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

36
ゼロから始める自然言語処理 大阪大学大学院情報科学研究科 荒瀬由紀

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

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

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

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

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

自己紹介荒瀬由紀

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

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

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

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

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

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

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

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

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

処理の流れ

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

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

処理の流れ

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

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

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

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

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

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

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

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

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

データ準備

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

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

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

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

データ準備

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

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

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

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

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

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

Twitter search API:180 requests/queries per 15 minutes

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

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

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

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

処理の流れ

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

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

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

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

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

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

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

Mecabの分析例

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

形態素の表層 読み

原形

品詞情報 発音

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

処理の流れ

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

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

特徴語抽出• TF-IDF強し

– Term Frequency– Inverse Document Frequency

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

idf 𝑡𝑡,𝐷𝐷 = log𝑁𝑁

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

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

TF-IDFの注意点

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

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

やってみる.

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

こうなる

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

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

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

処理の流れ

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

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

データクリーニング

現実のデータは…

ノイズだらけ!

Page 22: ゼロから始める自然言語処理 【FIT2016チュートリアル】
Page 23: ゼロから始める自然言語処理 【FIT2016チュートリアル】

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

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

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

• 謎のUnicode文字

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

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

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

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

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

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

本気を出すならLanguage Identification

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

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

リュウ

「単語」とのずれ

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

「単語」とのずれ

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

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

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

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

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

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

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

• 出現頻度カウント

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

発展編

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

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

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

コロケーション抽出

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

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

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

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

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

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

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

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

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

コロケーション抽出

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

係り受け解析

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

• 固有表現抽出

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

まとめ

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

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

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