Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Perlで自動文書分類
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
640
AWSじゃなくてさくらのクラウドを使ってる話
elk1997
0
2.4k
Tech Night Vol.2 - Fabric
elk1997
0
84
AWSの基礎
elk1997
1
120
ベイエリアIT事情@第10回関西PHP勉強会
elk1997
0
120
Other Decks in Technology
See All in Technology
今こそ知りたいAmplifyGen2
mkdev10
2
150
MCPゲートウェイを作って運用してわかったこと — Agent時代の権限管理の現在地
mtpooh
10
3.1k
More Freedom on the Same Shared GPU Cluster: A Small Team’s Experience with vCluster
nttcom
0
140
ビジネスを止めない技術的負債の返済のための戦略とその手法 - 技術的負債と向き合う / Complexity and Simplicity
soudai
PRO
3
640
AgentCoreで実践するハーネスエンジニアリング
yakumo
1
280
並行性の問題を防げ!実践トランザクション入門
occhi
0
280
Codex概要
ymiya55
0
420
【データ横丁主催】AI Agentがコンテキストを使って仕事をした後、何が残るのか― 組織の経験を次の判断に引き継ぐ「Agent Memory」
shisyu_gaku
2
330
生成AIを使って「人が」考える技術 ― AI時代の人機共想と実践ノウハウ|UNITT AC2026
ishiirikie
0
560
プロダクト価値を、 チームが使える判断軸に変える
vivion
0
130
AIアプリを使い分けるための共通ツール基盤を考えてみる#devio2026
osawa
0
260
AI時代に必要な脅威モデリング― 変化の速度に負けない理解とリスク判断
masakane55
4
1.1k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
55
13k
Become a Pro
speakerdeck
PRO
31
6.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
620
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
270
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
320
Designing Experiences People Love
moore
143
24k
Darren the Foodie - Storyboard
khoart
PRO
4
4k
GitHub's CSS Performance
jonrohan
1033
470k
Side Projects
sachag
456
43k
Mind Mapping
helmedeiros
1
390
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Leo the Paperboy
mayatellez
10
2.3k
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" ; }
▪注意する点 ニュースの自動カテゴライズの場合、常に学習してあげる必要がある。 スパムの場合は単純。「出会い」や「借金」とかがメインのキーワードになる。 それに対して、カテゴリ分類の場合は意味合いが流動的である。 例えば、 •「イチロー」というキーワードは今スポーツだけど来年にはタレントなって「エン ターテイメント」分類されるかもしれない。 •「立ち上がれ日本」が政治に属されるとは数カ月前には予想もつかない。 •複数のカテゴリにまたがるニュース。 「のりピーが覚せい剤で捕まる」エンターテイメント?社会?
ご清聴ありがとうございました。