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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
LayerX コーポレートエンジニアリング室におけるサプライチェーンセキュリティへの取り組み / Supply Chain Security at LayerX Corporate Engineering
yuyatakeyama
2
680
就職⽀援サービスにおけるキャリアアドバイザーのシフトスケジューリング
recruitengineers
PRO
1
150
徹底討論!ECS vs EKS!
daitak
0
250
気軽に使える"情報のハブ"としてのNotion活用 〜フロー情報の集積点 と、 Claude Code × Notion AI〜
syucream
1
150
マルチアカウント環境での コーディングエージェントを使った障害調査が大変なので AIエージェントにReadOnly権限を付与してみた / ReadOnly AI Agents for Multi-Account AWS Incident Response
yamaguchitk333
2
110
人材育成分科会.pdf
_awache
4
300
AIAU_UMEMOGU_ninomiya_slide
ninomiya_ii
0
240
SONiCの統計情報を取得したい
sonic
0
230
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
150
自宅LLMの話
jacopen
1
650
小さく始める AI 活用推進 ― 日経電子版 Web チームの事例/nikkei-tech-talk47
nikkei_engineer_recruiting
0
300
脆弱性対応、どこで線を引くか
rymiyamoto
1
420
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
9
870
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
Amusing Abliteration
ianozsvald
1
210
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
WCS-LA-2024
lcolladotor
0
650
Marketing to machines
jonoalderson
1
5.5k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
140
How GitHub (no longer) Works
holman
316
150k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Tell your own story through comics
letsgokoyo
1
960
Mobile First: as difficult as doing things right
swwweet
225
10k
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" ; }
▪注意する点 ニュースの自動カテゴライズの場合、常に学習してあげる必要がある。 スパムの場合は単純。「出会い」や「借金」とかがメインのキーワードになる。 それに対して、カテゴリ分類の場合は意味合いが流動的である。 例えば、 •「イチロー」というキーワードは今スポーツだけど来年にはタレントなって「エン ターテイメント」分類されるかもしれない。 •「立ち上がれ日本」が政治に属されるとは数カ月前には予想もつかない。 •複数のカテゴリにまたがるニュース。 「のりピーが覚せい剤で捕まる」エンターテイメント?社会?
ご清聴ありがとうございました。