Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

10,556 views

Published on

テキストマイニングして知識抽出,に初めて取り組む方へ向けたチュートリアルです.

Published in: Data & Analytics
  • Be the first to comment

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

  1. 1. ゼロから始める自然言語処理 大阪大学大学院情報科学研究科 荒瀬由紀
  2. 2. 自己紹介 荒瀬由紀 2010年: 博士号(情報科学)取得 2010年~2014年: Microsoft Research (Beijing)にて 自然言語処理研究に従事 2014年~: 大阪大学大学院情報科学研究科 准教授 初めて自然言語 処理に触れる!
  3. 3. 自然言語処理に初めてふれる方の: ・テキストデータを扱いたい! ・テキストから知識を抽出したい! をお助けするためのチュートリアルです.
  4. 4. 例題: Twitterから話題のポケGo用語を抽出
  5. 5. 処理の流れ • データの準備 • データクリーニング • 前処理 • 形態素解析 • 後処理 • 特徴語抽出
  6. 6. 処理の流れ • データの準備 • データクリーニング • 前処理 • 形態素解析 • 後処理 • 特徴語抽出
  7. 7. データ準備 • ダウンロードする – アノテーション付データが多い – 研究機関が作成・公開していることが多い • NII 情報学研究データリポジトリ http://www.nii.ac.jp/dsc/idr/datalist.html • ALAGIN 言語資源・音声資源サイト https://alaginrc.nict.go.jp/ – Pros: • 既存研究と実験結果を比較できる. • 無料! – Cons: • 最新のデータは手に入りにくい.
  8. 8. データ準備 • 購入する – 新聞記事,アノテーション付データ – Pros: • フォーマットされている • ノイズが少ない(ことが多い) – Cons: • 結構高い • 契約の年次更新が必要なことも
  9. 9. データ準備 • 自分でクロールする – Pros: • 欲しいデータが手に入る • 速報性 – Cons: • ノイズ除去が大変 • 時間がかかる.テクニックも必要.
  10. 10. データクローリング • クローリングのマナー – 相手のサーバに負荷をかけない. – API利用制限 Twitter search API: 180 requests/queries per 15 minutes – 違反すると,所属全体のIPがBanされたり怒られた り. • 取得失敗時のリカバリ – 壊れたデータを保存しないようロールバック – 重複チェック • ネットワーク障害,サーバダウン,停電,etc.
  11. 11. 処理の流れ • データの準備 • データクリーニング • 前処理 • 形態素解析 • 後処理 • 特徴語抽出
  12. 12. 形態素解析 • 形態素への分割と品詞タグ付け – 意味を構成する最小単位 • 精度の高いツールがあります! – Chasen,Mecab http://chasen-legacy.osdn.jp/ http://taku910.github.io/mecab/ – JUMAN http://nlp.ist.i.kyoto- u.ac.jp/index.php?JUMAN
  13. 13. Mecabの分析例 新宿 名詞,固有名詞,地域,一般,*,*,新宿,シンジュク,シンジュク 御苑 名詞,一般,*,*,*,*,御苑,ギョエン,ギョエン で 助詞,格助詞,一般,*,*,*,で,デ,デ ピカチュウ 名詞,固有名詞,一般,*,*,*,ピカチュウ,ピカチュウ,ピカチュウ に 助詞,格助詞,一般,*,*,*,に,ニ,ニ 会い 動詞,自立,*,*,五段・ワ行促音便,連用形,会う,アイ,アイ たかっ 助動詞,*,*,*,特殊・タイ,連用タ接続,たい,タカッ,タカッ た 助動詞,*,*,*,特殊・タ,基本形,た,タ,タ 形態素の 表層 読み 原形 品詞情報 発音
  14. 14. 処理の流れ • データの準備 • データクリーニング • 前処理 • 形態素解析 • 後処理 • 特徴語抽出
  15. 15. 特徴語抽出 • TF-IDF強し – Term Frequency – Inverse Document Frequency TF−IDF = tf 𝑡𝑡, 𝑑𝑑 idf 𝑡𝑡, 𝐷𝐷 idf 𝑡𝑡, 𝐷𝐷 = log 𝑁𝑁 𝑑𝑑𝑑𝑑(𝑡𝑡, 𝐷𝐷) tf 𝑡𝑡, 𝑑𝑑 :ターム𝑡𝑡のドキュメント𝑑𝑑での頻度 𝑑𝑑𝑑𝑑(𝑡𝑡, 𝐷𝐷): 全てのドキュメント𝐷𝐷で𝑡𝑡を含む𝑑𝑑の数 𝑁𝑁:ドキュメント数
  16. 16. TF-IDFの注意点 • 𝐷𝐷を定義(用意)できるか? • ドキュメントを扱う場合IDFは重要 • Tweetのような短文ではTFのみで良 いことも
  17. 17. やってみる.
  18. 18. こうなる
  19. 19. あれ,思てたんと違う… …
  20. 20. 処理の流れ • データの準備 • データクリーニング • 前処理 • 形態素解析 • 後処理 • 特徴語抽出
  21. 21. データクリーニング 現実のデータは… ノイズだらけ!
  22. 22. よくあるノイズ • URL • 非文(@mention,hashtag,商品コー ド,etc.) • アクセント記号:ã,ä,é • 対象以外の言語データ • 記号のバリエーション --﹣ ‐ - ⁃ ˗ − ➖ ‒ – ~ ~ ∼ ˜ ˷ ∽ ∾ ∿ 〜 〰 ﹏ • 謎のUnicode文字
  23. 23. ノイズ除去 • URL,非テキスト,記号のバリエーション -->データに頻繁に出現するパターンを観察して, ルールで除去 • アクセント記号 -->文字コードに注意すれば大丈夫. HTMLでは特殊記号に置き替えられるので置換 • 対象言語以外 -->Unicodeの範囲指定である程度何とかなる. 本気を出すならLanguage Identification • 謎のUnicode文字 -->テキストをまずデコード,失敗したものは排除.
  24. 24. リュウ 「単語」とのずれ
  25. 25. 「単語」とのずれ • 形態素解析の単位は「形態素」 • 「単語」って実はすごく曖昧 – 「大阪」「大学」vs「大阪大学」 • ルールで形態素を合併 – 連続した(固有)名詞はつなげる • 辞書の追加
  26. 26. • URL, @mentionの除去 • 「。!?」でテキストを 分割 • ポケモン,ポケモン技の 辞書作成 • 形態素解析の結果,ポケ モンとポケモンの技のみ 抽出 • 出現頻度カウント
  27. 27. 発展編 • 単語ペアを扱う! --> コロケーション抽出 • 文の意味を考慮したい! --> 係り受け解析
  28. 28. コロケーション抽出 • 頻繁に共起する単語のペアを特定 • Pointwise Mutual Information (PMI) 𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 = log 𝑝𝑝(𝑡𝑡1, 𝑡𝑡2) 𝑝𝑝 𝑡𝑡1 𝑝𝑝(𝑡𝑡2) – 𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 > 0:共起しやすい – 𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 = 0:関連無し(独立) – 𝑃𝑃𝑃𝑃𝑃𝑃 𝑡𝑡1, 𝑡𝑡2 < 0:共起しにくい
  29. 29. コロケーション抽出 • 単語の出現確率 𝑝𝑝 𝑡𝑡1 の推定 – 簡単なのは最尤推定 𝑝𝑝 ピカチュウ = 200/1000000 – 低頻度の単語ペアのPMI値が非常に高く なってしまう -->出現確率の推定が正しくない • 解決策 – 頻度を考慮する – 事後分布最大化推定値
  30. 30. コロケーション抽出
  31. 31. 係り受け解析 • 係り受けを解析 – 文節単位 • 固有表現抽出 上野公園で 強い ギャラドスに 会いたかった LOC ART
  32. 32. 係り受け解析 • 「誰が」「どうした」を抽出できる. • 単純な単語の共起よりも,文の意味を反 映した情報抽出が可能 • 精度の高いツールあります! – Cabocha https://taku910.github.io/cabocha/ – KNP http://nlp.ist.i.kyoto- u.ac.jp/index.php?KNP
  33. 33. 係り受け解析 & PMI イーブイって 出やすいのか? ソーラービームが 強すぎる! カイリューゲットしたんだけど 育てるべき? ラプラスが れいとうビームだったんだけど 「はがねのつばさカイ リュー」って ハズレなの? カイリューに 勝てる・・・だと? ミュウツーを GETするには? ギャラドス 作って フーディンって 強いの? かえんほうしゃは、 はずれだよね? シャワーズ虐めすぎたら 調整入るぞ! イワークが 捕まらない
  34. 34. おまけ:おススメの環境 • Python – 強力な文字列処理ライブラリ – 自然言語処理・機械学習ライブラリも充実 NLTK:http://www.nltk.org/ scikit-learn:http://scikit- learn.org/stable/ – MecabなどのNLPツールとバインディング • C#, Java, Perl もよい • 速度を求めるならC++
  35. 35. まとめ • 利用できるデータは積極的に利用 • 自然言語処理ツールはたくさん – 辞書,ルールの活用 • 地道なノイズ除去が肝心 – データの観察 – 諦めも大事

×