ゼロから始める自然言語処理 【fit2016チュートリアル】
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++
まとめ
• 利用できるデータは積極的に利用• 自然言語処理ツールはたくさん
–辞書,ルールの活用• 地道なノイズ除去が肝心
–データの観察–諦めも大事