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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Taakshi Aoki
November 16, 2015
Technology
180
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
78
AWSの基礎
elk1997
1
120
ベイエリアIT事情@第10回関西PHP勉強会
elk1997
0
120
Other Decks in Technology
See All in Technology
個人OSSが、机の上から世界に広がるまでの話
shinyasaita
1
360
【CEDEC2026】次世代デジタルカードゲームのサーバー設計と運用 〜『Shadowverse: Worlds Beyond』の舞台裏~
cygames
PRO
1
950
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
350
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
150
社内の7割が使うデータ基盤を、 データチーム2人で回すためにやったこと
koh_yoshi
4
1k
グローバル基準のSREは、運用現場でどう機能したか:成熟度アセスメントの実践 / SRE NEXT 2026
sorawatanabe
0
130
AI時代の強いチームの作り方
yuukiyo
25
16k
SnowflakeCoCoでデータエンジニアリング!
foursue
0
180
生成 AI の基礎 〜 サンプル実装で学ぶ基本原理
enakai00
7
4.4k
Pavlokで始める電撃駆動開発
sgrsn
0
170
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
430
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
950
Building a Scalable Design System with Sketch
lauravandoore
463
34k
KATA
mclloyd
PRO
35
15k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
270
30 Presentation Tips
portentint
PRO
1
360
Six Lessons from altMBA
skipperchong
29
4.4k
Become a Pro
speakerdeck
PRO
31
6.2k
Into the Great Unknown - MozCon
thekraken
41
2.7k
The Spectacular Lies of Maps
axbom
PRO
1
890
A designer walks into a library…
pauljervisheath
211
24k
Building AI with AI
inesmontani
PRO
1
1.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" ; }
▪注意する点 ニュースの自動カテゴライズの場合、常に学習してあげる必要がある。 スパムの場合は単純。「出会い」や「借金」とかがメインのキーワードになる。 それに対して、カテゴリ分類の場合は意味合いが流動的である。 例えば、 •「イチロー」というキーワードは今スポーツだけど来年にはタレントなって「エン ターテイメント」分類されるかもしれない。 •「立ち上がれ日本」が政治に属されるとは数カ月前には予想もつかない。 •複数のカテゴリにまたがるニュース。 「のりピーが覚せい剤で捕まる」エンターテイメント?社会?
ご清聴ありがとうございました。