Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Perlで自動文書分類
Search
Taakshi Aoki
November 16, 2015
Technology
170
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Perlで自動文書分類
Taakshi Aoki
November 16, 2015
More Decks by Taakshi Aoki
See All by Taakshi Aoki
Windows使いのデザイナーにVagrant+Gitの開発環境構築した話
elk1997
0
630
AWSじゃなくてさくらのクラウドを使ってる話
elk1997
0
2.4k
Tech Night Vol.2 - Fabric
elk1997
0
77
AWSの基礎
elk1997
1
120
ベイエリアIT事情@第10回関西PHP勉強会
elk1997
0
120
Other Decks in Technology
See All in Technology
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
150
2026TECHFRESH畢業分享會 - Lightning Talk - 打造精準高效的 MCP 設計模式與測試實務
line_developers_tw
PRO
0
1.3k
iAEONの段階的リアーキテクト戦略 / iAEON's_Gradual_Re-architecture_Strategy
aeonpeople
0
230
攻撃者視点で考えるDetection Engineering
cryptopeg
3
2k
[チョークトーク資料]AWS DevOps Agent を使いこなす / AWS Dev Ops Agent Chalk Talk AWS Summit Japan 2026
kinunori
3
570
生成 AI 実践ガイド (概略版) AIガバナンス編
asei
0
120
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
410
【2026年版】 ベクトル検索とEmbedding最前線
mocobeta
16
4.5k
あなたの知らないPDFのアクセシビリティ
lycorptech_jp
PRO
0
220
自宅LLMの話
jacopen
1
650
Chainlitで作るお手軽チャットUI
ynt0485
0
280
When Platform Engineering Meets GenAI
sucitw
0
130
Featured
See All Featured
Unsuck your backbone
ammeep
672
58k
How STYLIGHT went responsive
nonsquared
100
6.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
400
Raft: Consensus for Rubyists
vanstee
141
7.5k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
440
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.9k
Designing for humans not robots
tammielis
254
26k
Typedesign – Prime Four
hannesfritz
42
3.1k
Transcript
2015/11/17 perlで自動文書分類
▪自己紹介 •青木崇(elk1997) •大阪のWeb屋 •perl歴3年程 •文系
▪perlを使ったサービス DELCO READER Web型のフィードリーダー hatebte はてなブックマークを全文化してEvernoteに保存できるサービス
▪自動文書分類 単純ベイズ分類器(ナイーブベイズ)というものを使って ニュース記事の自動文書分類(自動カテゴライズ)を行います。 もちろんperlで。
強い(単純な)独立性仮定と共にベイズの定理を適用することに基づいた単純な確率 的分類器である。 その元となる確率モデルは、より正確に言えば「独立特徴モデル; independent feature model」である…………. wikipediaより引用 ▪ベイズ分類器とは 単純ベイズ確率モデル ▪
単純ベイズ分類器とは ・ ・ ・
▪ベイズ分類器とは かなり簡単にいうと…
▪ベイズ分類器とは •過去にあった単語の出現頻度でカテゴリを予測する •語順をまったく考慮しない •単語間の相関関係はまったく考慮しない
▪単純ベイズ分類器とは 「通常のメール」「迷惑メール」を分類 メールの迷惑メールフィルタにも使われてるアルゴリズム 手動による学習のフェーズ(トレーニングモード) 運用フェーズ
▪単純ベイズ分類器とは ▪mac mail ▪thunderbird
▪例えば迷惑メール分類の場合 青木さん おつかれさまです。 仕様書確認したよ。素晴らしい。 山田 ついに発見!出会い率100%の出会い系 サイト! こんなサイトがあったなんて! しかも完全無料。 【広告】人妻が出会いを求めています...
紳士・淑女が出会いを求めて集まる出会 い系サイト「であちゃったよ!」 あなたも是非登録を! もちろん完全無料。 青木さん おつかれさまです。 明日の飲み会okです。 参加します。 武内 通常メールらしきメール 迷惑メールらしきメール 学習フェーズ おつかれさま × 2回 出会い × 5回 完全無料 × 2回
▪例えば迷惑メール分類の場合 右のようなメールがあれば、「迷惑メール」ボタンをクリック。 出現頻度の高い「出会い」「完全無料」があれば迷惑メールかもしれ ないと学習する。 以後、送られてくるメールの内容に「出会い」「完全無料」という言葉 があれば迷惑メールと判断し自動的に迷惑メールフォルダに分 類されます。 逆に「おつかれさま」という言葉があれば通常メールの確率が高いと 学習します。 ▪学習フェーズ
▪運用フェーズ
▪例えば迷惑メール分類の場合 この度は私どもの運営する人妻との出会いに特化した完全無料サークル のご案内でご連絡差し上げました。 このサークルは完全無料で参加でき、いつまでも無料。 突然料金がかかったり急に有料になったりということがない安心サークルで す。 主に20代、30代の会員様が多く参加しておられ、女性中心の明るく健康的 な活気あふれるサークルとなっています。 単純ベイズ分類器によって迷惑メールに分類される
▪例えば迷惑メール分類の場合 メールだと2種類に分別してるだけだけど、自動文書分類ではこれのカテ ゴリの数を増やしたもの。 ここではニュースを分類するデモをお見せします。 ▪分類するニュースのカテゴリ 1. スポーツ 2. 社会 3.
政治 4. エンターテイメント(芸能)
▪今回使用するCPANモジュール • Lingua::JA::TFIDF ドキュメントの中から特徴のある単語を抜き出す tf-idfというアルゴリズムの簡易版 日本語トークンの取得はText::MeCabを使用 • Algorithm::NaiveBayes ベイズ分類の計算を行う
▪デモ 学習用に予め取得してきたニュースを手動で分類
▪デモ(運用フェーズ) 各ニュースから特徴語を抜き出す My $contents = “ニュースの本文”; # NGワードも設定できる $config{'ng_word'} =
¥@original_ngword; my $calc = Lingua::JA::TFIDF->new(%config); my $result = $calc->tfidf($contents); # もっとも特徴ある単語上位十件を抽出する my @hoge = $result->list(10); main::pp(¥@hoge);
▪デモ(学習フェーズ) 小沢 51 鳩山 24 沖縄 81 首相官邸 6 外務大臣
11 東京 12 自治体 5 ・ ・ ・ politics.txt 政治 各カテゴリ別のファイルに特徴語と出現回数をため込んでいく 野球 12 サッカー 4 イチロー 41 K1 4 延長戦 1 オリンピック 6 タイガース 5 ・ ・ ・ 懲役 10 裁判 10 誘拐 12 覚せい剤 6 雷雨 5 台風 1 東京 2 ・ ・ ・ 沢尻エリカ 12 離婚 10 オリコン 7 ハワイ 6 映画 11 女優 12 ハリウッド 5 ・ ・ ・ sports.txt スポーツ society.txt 社会 entertaiment.txt エンターテイメント
▪デモ(学習フェーズ) 学習させる use Algorithm::NaiveBayes; my @category = (“スポーツ”, “政治”, “社会”,
“エンターテイメ ント”); foreach my $category_name(@category) { # 本当は特徴語を保存したファイルから # my %wordcount= ( “小沢” => 51 , “鳩山” => 24 , “沖縄" => 81, ….. ); my $bayes = Algorithm::NaiveBayes->new; $bayes->add_instance( attributes => %wordcount, label => $category_name, ); } # 学習を実行 $bayes->train;
▪デモ(運用フェーズ) 分類したいニュースの本文から特徴語を抜き出す My $contents = “分類したいニュースの本文”; # NGワードも設定できる $config{'ng_word'} =
¥@original_ngword; my $calc = Lingua::JA::TFIDF->new(%config); my $result = $calc->tfidf($contents); # もっとも特徴ある単語上位十件を抽出する my @hoge = $result->list(10); main::pp(¥@hoge);
▪デモ(運用フェーズ) 鳩山 2 沖縄 2 辞任 1 ゴールデンウィーク 1 抽出できた特徴語
target.txt
▪デモ(運用フェーズ) 分類させる # 本当は特徴語を保存したファイルから # my %wordcount= ( “鳩山” =>
2 , “沖縄” => 2 , “辞任” => 1, “ゴールデンウィーク” => 1 ); my $result = $bayes->predict( attributes => {%wordcount} ); while ( my ( $category_name , $point ) = each %$result ){ print "$category_name => " . sprintf("%.20f", $point) . "¥n" ; }
▪注意する点 ニュースの自動カテゴライズの場合、常に学習してあげる必要がある。 スパムの場合は単純。「出会い」や「借金」とかがメインのキーワードになる。 それに対して、カテゴリ分類の場合は意味合いが流動的である。 例えば、 •「イチロー」というキーワードは今スポーツだけど来年にはタレントなって「エン ターテイメント」分類されるかもしれない。 •「立ち上がれ日本」が政治に属されるとは数カ月前には予想もつかない。 •複数のカテゴリにまたがるニュース。 「のりピーが覚せい剤で捕まる」エンターテイメント?社会?
ご清聴ありがとうございました。