ゼロから始める自然言語処理 【fit2016チュートリアル】

Post on 15-Apr-2017

5.804 Views

Category:

Data & Analytics

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

ゼロから始める自然言語処理

大阪大学大学院情報科学研究科荒瀬由紀

自己紹介荒瀬由紀

2010年:博士号(情報科学)取得

2010年~2014年:Microsoft Research (Beijing)にて自然言語処理研究に従事

2014年~:大阪大学大学院情報科学研究科 准教授

初めて自然言語処理に触れる!

自然言語処理に初めてふれる方の:・テキストデータを扱いたい!・テキストから知識を抽出したい!をお助けするためのチュートリアルです.

例題:Twitterから話題のポケGo用語を抽出

処理の流れ

• データの準備• データクリーニング• 前処理• 形態素解析• 後処理• 特徴語抽出

処理の流れ

• データの準備• データクリーニング• 前処理• 形態素解析• 後処理• 特徴語抽出

データ準備• ダウンロードする

– アノテーション付データが多い– 研究機関が作成・公開していることが多い

• NII 情報学研究データリポジトリhttp://www.nii.ac.jp/dsc/idr/datalist.html

• ALAGIN 言語資源・音声資源サイトhttps://alaginrc.nict.go.jp/

– Pros:• 既存研究と実験結果を比較できる.• 無料!

– Cons:• 最新のデータは手に入りにくい.

データ準備

• 購入する–新聞記事,アノテーション付データ–Pros:

• フォーマットされている• ノイズが少ない(ことが多い)

–Cons:• 結構高い• 契約の年次更新が必要なことも

データ準備

• 自分でクロールする–Pros:

• 欲しいデータが手に入る• 速報性

–Cons:• ノイズ除去が大変• 時間がかかる.テクニックも必要.

データクローリング• クローリングのマナー

– 相手のサーバに負荷をかけない.– API利用制限

Twitter search API:180 requests/queries per 15 minutes

– 違反すると,所属全体のIPがBanされたり怒られたり.

• 取得失敗時のリカバリ– 壊れたデータを保存しないようロールバック– 重複チェック

• ネットワーク障害,サーバダウン,停電,etc.

処理の流れ

• データの準備• データクリーニング• 前処理• 形態素解析• 後処理• 特徴語抽出

形態素解析• 形態素への分割と品詞タグ付け

–意味を構成する最小単位• 精度の高いツールがあります!

– Chasen,Mecabhttp://chasen-legacy.osdn.jp/http://taku910.github.io/mecab/

– JUMANhttp://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN

Mecabの分析例

新宿 名詞,固有名詞,地域,一般,*,*,新宿,シンジュク,シンジュク御苑 名詞,一般,*,*,*,*,御苑,ギョエン,ギョエンで 助詞,格助詞,一般,*,*,*,で,デ,デピカチュウ 名詞,固有名詞,一般,*,*,*,ピカチュウ,ピカチュウ,ピカチュウに 助詞,格助詞,一般,*,*,*,に,ニ,ニ会い 動詞,自立,*,*,五段・ワ行促音便,連用形,会う,アイ,アイたかっ 助動詞,*,*,*,特殊・タイ,連用タ接続,たい,タカッ,タカッた 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ

形態素の表層 読み

原形

品詞情報 発音

処理の流れ

• データの準備• データクリーニング• 前処理• 形態素解析• 後処理• 特徴語抽出

特徴語抽出• TF-IDF強し

– Term Frequency– Inverse Document Frequency

TF−IDF = tf 𝑡𝑡,𝑑𝑑 idf 𝑡𝑡,𝐷𝐷

idf 𝑡𝑡,𝐷𝐷 = log𝑁𝑁

𝑑𝑑𝑑𝑑(𝑡𝑡,𝐷𝐷)tf 𝑡𝑡,𝑑𝑑 :ターム𝑡𝑡のドキュメント𝑑𝑑での頻度𝑑𝑑𝑑𝑑(𝑡𝑡,𝐷𝐷): 全てのドキュメント𝐷𝐷で𝑡𝑡を含む𝑑𝑑の数𝑁𝑁:ドキュメント数

TF-IDFの注意点

• 𝐷𝐷を定義(用意)できるか?• ドキュメントを扱う場合IDFは重要• Tweetのような短文ではTFのみで良いことも

やってみる.

こうなる

あれ,思てたんと違う……

処理の流れ

• データの準備• データクリーニング• 前処理• 形態素解析• 後処理• 特徴語抽出

データクリーニング

現実のデータは…

ノイズだらけ!

よくあるノイズ• URL• 非文(@mention,hashtag,商品コード,etc.)

• アクセント記号:ã,ä,é• 対象以外の言語データ• 記号のバリエーション

--﹣ - - ⁃ ˗ − ➖ - –~ ~ ~ ˜ ˷ ∽ ∾ ∿ ~ 〰 ﹏

• 謎のUnicode文字

ノイズ除去• URL,非テキスト,記号のバリエーション

-->データに頻繁に出現するパターンを観察して,ルールで除去

• アクセント記号-->文字コードに注意すれば大丈夫.

HTMLでは特殊記号に置き替えられるので置換

• 対象言語以外-->Unicodeの範囲指定である程度何とかなる.

本気を出すならLanguage Identification

• 謎のUnicode文字-->テキストをまずデコード,失敗したものは排除.

リュウ

「単語」とのずれ

「単語」とのずれ

• 形態素解析の単位は「形態素」• 「単語」って実はすごく曖昧

–「大阪」「大学」vs「大阪大学」• ルールで形態素を合併

–連続した(固有)名詞はつなげる• 辞書の追加

• URL, @mentionの除去• 「。!?」でテキストを分割

• ポケモン,ポケモン技の辞書作成

• 形態素解析の結果,ポケモンとポケモンの技のみ抽出

• 出現頻度カウント

発展編

• 単語ペアを扱う!--> コロケーション抽出

• 文の意味を考慮したい!--> 係り受け解析

コロケーション抽出

• 頻繁に共起する単語のペアを特定• Pointwise Mutual Information(PMI)

𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 = log𝑝𝑝(𝑡𝑡1, 𝑡𝑡2)𝑝𝑝 𝑡𝑡1 𝑝𝑝(𝑡𝑡2)

–𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 > 0:共起しやすい–𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 = 0:関連無し(独立)–𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 < 0:共起しにくい

コロケーション抽出• 単語の出現確率 𝑝𝑝 𝑡𝑡1 の推定

–簡単なのは最尤推定𝑝𝑝 ピカチュウ = 200/1000000

–低頻度の単語ペアのPMI値が非常に高くなってしまう-->出現確率の推定が正しくない

• 解決策–頻度を考慮する–事後分布最大化推定値

コロケーション抽出

係り受け解析

• 係り受けを解析–文節単位

• 固有表現抽出

上野公園で 強い ギャラドスに 会いたかったLOC ART

係り受け解析• 「誰が」「どうした」を抽出できる.• 単純な単語の共起よりも,文の意味を反映した情報抽出が可能

• 精度の高いツールあります!– Cabocha

https://taku910.github.io/cabocha/– KNP

http://nlp.ist.i.kyoto-u.ac.jp/index.php?KNP

係り受け解析 & PMIイーブイって 出やすいのか?ソーラービームが 強すぎる!

カイリューゲットしたんだけど 育てるべき?ラプラスが れいとうビームだったんだけど

「はがねのつばさカイリュー」って ハズレなの?カイリューに 勝てる・・・だと?ミュウツーを GETするには?ギャラドス 作って

フーディンって 強いの?かえんほうしゃは、 はずれだよね?

シャワーズ虐めすぎたら 調整入るぞ!イワークが 捕まらない

おまけ:おススメの環境• Python

–強力な文字列処理ライブラリ–自然言語処理・機械学習ライブラリも充実

NLTK:http://www.nltk.org/scikit-learn:http://scikit-learn.org/stable/

– MecabなどのNLPツールとバインディング• C#, Java, Perl もよい• 速度を求めるならC++

まとめ

• 利用できるデータは積極的に利用• 自然言語処理ツールはたくさん

–辞書,ルールの活用• 地道なノイズ除去が肝心

–データの観察–諦めも大事

top related