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
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
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3k
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.8k
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
150
実装だけじゃない! CCA-F取得エンジニアが教えるClaude Code開発プロセス活用術
diggymo
2
740
穢れた技術選定について
watany
12
2.8k
オブザーバビリティ、本当に活用できてる? 〜API連携×生成AIで成熟度を自動評価〜
dmmsre
1
3.2k
AmplifyHostingConstructからSSRフレームワークのためのホスティング設計を考察する/amplify-hosting-construct
fossamagna
1
100
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
2.4k
型は壁、Rustでもバグを直すな、表現できなくせよ
nwiizo
13
2.1k
CIで使うClaude
iwatatomoya
0
270
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.4k
Claude Code 珍プレー好プレー
shinyasaita
0
330
Featured
See All Featured
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.4k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
630
A Modern Web Designer's Workflow
chriscoyier
698
190k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Visualization
eitanlees
152
17k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
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" ; }
▪注意する点 ニュースの自動カテゴライズの場合、常に学習してあげる必要がある。 スパムの場合は単純。「出会い」や「借金」とかがメインのキーワードになる。 それに対して、カテゴリ分類の場合は意味合いが流動的である。 例えば、 •「イチロー」というキーワードは今スポーツだけど来年にはタレントなって「エン ターテイメント」分類されるかもしれない。 •「立ち上がれ日本」が政治に属されるとは数カ月前には予想もつかない。 •複数のカテゴリにまたがるニュース。 「のりピーが覚せい剤で捕まる」エンターテイメント?社会?
ご清聴ありがとうございました。