40
mecab-ipadic-NEologd の効果的な使い方 2015-04-23 LT at えびスタ!#2 佐藤敏紀 ( @overlast )

mecab-ipadic-NEologd の効果的な使い方

Embed Size (px)

Citation preview

Page 1: mecab-ipadic-NEologd の効果的な使い方

mecab-ipadic-NEologdの効果的な使い方

2015-04-23 LT at えびスタ!#2

佐藤敏紀 ( @overlast )

Page 2: mecab-ipadic-NEologd の効果的な使い方

まとめ

- mecab-ipadic-NEologd は IPA 辞書を拡張した mecab のシステム辞書

- 新語・固有表現などを160万語以上再録- 読み仮名・原型付きで(異表記の重複込み)

- 最低月2回アップデート(初旬・中旬)- Apache License 2.0 なOSSなので安心

- 辞書はタスクに応じて使い分けると効果UP !!

Page 3: mecab-ipadic-NEologd の効果的な使い方

佐藤 敏紀 ( @overlast )現職 : LINE 株式会社のエンジニア

- 自然言語処理、検索、機械学習まわり

前職 : ヤフー株式会社のエンジニア

- 検索エンジンのキーワードのスペル訂正等

学生 : 東京工業大学大学院 奥村研究室

- 比較表現抽出の研究- blogWatcher の開発運用

Page 4: mecab-ipadic-NEologd の効果的な使い方

その他

- DSIRNLP という勉強会を主催しています- 初心者にもやさしく雰囲気も良いです^^- YouTube で「DSIRNLP」を検索

- 夏に開催されるNLP若手の会 第10回シンポジウムに是非ご参加ください(まだ詳細未定)

http://yans.anlp.jp/

- 僕の現職や前職について何か聞きたい方は、お気軽にお声がけください

Page 5: mecab-ipadic-NEologd の効果的な使い方

Neologism dictionary based on the language resources on the Web for mecab-ipadic

Page 6: mecab-ipadic-NEologd の効果的な使い方

mecab-ipadic-NEologdメカブ アイピーエーディック ネオログディー

Page 7: mecab-ipadic-NEologd の効果的な使い方

Avg 10 unique cloners / day で普及

mecab-ipadic と併用することが常識になることが一番最初の目標である

Page 8: mecab-ipadic-NEologd の効果的な使い方

mecab-ipadic-NEologd を使うと

IPA 辞書を使っている際の「新語が辞書に登録されていなくて困る問題」を大幅に軽減できる

- その例をインストール時に確認できる

新語が「名詞 ,固有表現,一般,*,*,*」として認識されている

Page 9: mecab-ipadic-NEologd の効果的な使い方

初回インストール (例: OSX)

Step.1 : 必要なライブラリをインストール

- $ brew install mecab mecab-ipadic git curl xz

Step.2 : git clone する

- $ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git

Step.3 : インストールする

- $ cd mecab-ipadic-neologd; ./bin/install-mecab-ipadic-neologd -n

Page 10: mecab-ipadic-NEologd の効果的な使い方

インストールが超簡単!!

https://www.flickr.com/photos/kit4na/6385016345/

Page 11: mecab-ipadic-NEologd の効果的な使い方

使用例 : コマンドラインの場合[overlast@]$ mecab -d /usr/local/lib/mecab/dic/mecab-ipadic-neologdiQONのアプリ内のデータ分析基盤の紹介や分析手法について紹介します。

iQON 名詞,固有名詞,一般,*,*,*,iQON,アイコン,アイコン

の 助詞,連体化,*,*,*,*,の,ノ,ノアプリ 名詞,固有名詞,一般,*,*,*,アプリ,アプリ,アプリ

内 名詞,接尾,一般,*,*,*,内,ナイ,ナイ

の 助詞,連体化,*,*,*,*,の,ノ,ノデータ 名詞,一般,*,*,*,*,データ,データ,データ

分析 名詞,サ変接続,*,*,*,*,分析,ブンセキ,ブンセキ

基盤 名詞,一般,*,*,*,*,基盤,キバン,キバン

の 助詞,連体化,*,*,*,*,の,ノ,ノ紹介 名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ

や 助詞,並立助詞,*,*,*,*,や,ヤ,ヤ分析 名詞,サ変接続,*,*,*,*,分析,ブンセキ,ブンセキ

手法 名詞,一般,*,*,*,*,手法,シュホウ,シュホー

について 助詞,格助詞,連語,*,*,*,について,ニツイテ,ニツイテ

紹介 名詞,サ変接続,*,*,*,*,紹介,ショウカイ,ショーカイ

し 動詞,自立,*,*,サ変・スル,連用形,する,シ,シます 助動詞,*,*,*,特殊・マス,基本形,ます,マス,マス

。 記号,句点,*,*,*,*,。,。,。EOS

既存の IPA 辞書には登録されていない固有表現を認識できるようになった !!

Page 12: mecab-ipadic-NEologd の効果的な使い方

うまくいかない場合の例一般名詞の固有表現化

- 「デート」が一般名詞だから、ドラマのタイトルに固有表現な品詞情報を付与できない

↑↑↑ 今後の固有表現抽出で解くべき問題の一つ

Page 13: mecab-ipadic-NEologd の効果的な使い方

便利そうですね!!

事実とても便利

些細なエラーは忘れたい

可能になったことが大切

文書分類やレコメンドの

結果も当然改善される

https://www.flickr.com/photos/span112/2245983695/

Page 14: mecab-ipadic-NEologd の効果的な使い方

たまにアップデートしましょう

以下のコマンドでサクっと更新できます

 $ ./bin/install-mecab-ipadic-neologd -n

-h オプションで機能を確認してみましょう !!!

辞書のバージョンを固定したい場合

 => tag から任意のバージョンを選ぶ

- 機能が大幅に更新された時に作っている- 現在は v0.0.1 のみ存在している

Page 15: mecab-ipadic-NEologd の効果的な使い方

LT の本題

Page 16: mecab-ipadic-NEologd の効果的な使い方

5種類の典型的なタスクにおけるオススメな形態素解析辞書の選択例

1. 【検索】index を 1 つだけ使って検索する

2. 【検索】形態素 index を 1 つだけ作成

3. 【一般】特殊なジャンルの文書を解析する

4. 【テキストマイニング】さくっと分析

5. 【機械学習】テキストから特徴ベクトル作成

Page 17: mecab-ipadic-NEologd の効果的な使い方

番外編1 :文字列正規化は形態素解析前にする

例題 :  Tweet を API から取得して text 部分をそのまま MeCab で解析してます。とくに新語は含まれていないのに結果がボロボロになります

解 : 新語の有無はさておき、仕事や研究で形態素解析をする場合は一番最初に正規化をします。以下の記事が参考になるかもしれません。

- mecab-ipadic-NEologd の辞書作成時の正規化ルール 

Page 18: mecab-ipadic-NEologd の効果的な使い方

例: 最初はこんな風に正規化したい

“LINE” => “LINE”- 英数字はギリギリまで小文字化しない

“  PRML  副 読 本  ”  => “PRML副読本”- 日本語と英数字の間のスペースは削減する- 全角文字は一部の記号を除いて半角にする

“Coding the Matrix”  => “Coding the Matrix”

“南アルプスの 天然水 Sparking Lemon レモン一絞り”=> “南アルプスの天然水Sparking Lemonレモン一絞り”

Page 19: mecab-ipadic-NEologd の効果的な使い方

番外編2 : 異表記・表記ゆれは最初に解消する

例題 :  形態素解析辞書に「ノンフライワンタン」は登録済みだけど「ノンフライわんたん」が未登録で「ノンフライ / わんたん」に区切られる

解 :  同義語・表記ゆれ辞書を作り、形態素解析前に、より一般的な表記に変換しましょう

- 読み仮名付きの表記ゆれ辞書はとても大切です- NEologd にご提供頂けますとかなり嬉しいです

Page 20: mecab-ipadic-NEologd の効果的な使い方

【検索】index を 1 つだけ使用できる

解1 : 文字 2gram な 転置 index が良さそう

- 例 : LINEの辞書

=>「LI:1, IN:1, NE:1, Eの:1,の辞:1, 辞書:1」- 形態素解析を使わない方が良い時がある

- 検索では文字区切りに高い再現率が必要

 

解2 : 対象データが少量なら Suffix Array も可

- 任意長の文字列で漏れ無く検索できる- 転置 index と違う長所・短所がある

Page 21: mecab-ipadic-NEologd の効果的な使い方

【検索】形態素 index を 1 つだけ作成

解1 : MeCab と IPA 辞書で作成すると良さそう

- MeCab は速いし、問題や罠が少ない- UniDic は名詞を細かく区切りすぎる- mecab-ipadic-NEologd では長すぎる- naist-jdic は IPA 辞書より精度が下がる- JUMAN は付与される情報を使うなら有用

解2 : 意味があるなら何個でも index を作る

- 個人的に最初は文字 2gram 、文字 3gramと形態素 1gram の 3 つを使うことを試す

Page 22: mecab-ipadic-NEologd の効果的な使い方

【一般】特殊なジャンルの文書を解析する

例題1. 自分の専門分野の文書を正確に解析したい

 解 : あなたがユーザ辞書を作るのが最も良さそう

- 専門分野のプロが解析結果を見ると、

沢山の解析エラーを見つけられるはず

- そのユーザ辞書を欲しがる人もいるはず

例題2. 古典・古文・近代文語文を検索する

 解 : 最初は中古和文/近代文語 UniDic を使う

- 専門分野の辞書がすでにある場合もある

Page 23: mecab-ipadic-NEologd の効果的な使い方

【テキストマイニング】さくっと分析したい

解 : MeCab と mecab-ipadic-NEologd を使う

- 頻度集計では名詞の過分割が一番の課題- 異表記によるノイズよりも割合が大きい

- チャンキングは多くの人にとって難しい- Wikipedia に乗るような語は分割しなくて良い

- 現代はメモリを沢山使えるので、仕事や研究では

辞書サイズをそれほど気にする必要がない

例 :「辛そうで辛くない少し辛いラー油」の分割- IPA辞書「辛い:3,そう:1,だ:1,ない:1,少し:1,ラー油:1」- ipadic-NEologd「辛そうで辛くない少し辛いラー油:1」

Page 24: mecab-ipadic-NEologd の効果的な使い方

【機械学習】テキストから特徴ベクトル作成

解 : MeCab + mecab-ipadic と MeCab + mecab-ipadic-NEologd の結果を任意にマージ

 => 漏れを削減しつつ、固有表現で次元数を増やしたい 。必要なら文字 Ngram を足す。

200万人の佐藤さんノイズ問題 : 例「佐藤琢磨」

- mecab-ipadicのみだと「佐藤:1, 琢磨:1」- “佐藤:1” は後で重みを正規化するけど、日本全国の佐藤さんとつながるので辛い

- “佐藤琢磨:1” があると結果が大分変わる

Page 25: mecab-ipadic-NEologd の効果的な使い方

まとめ

- mecab-ipadic-NEologd は IPA 辞書を拡張した mecab のシステム辞書

- 新語・固有表現などを160万語以上再録- 読み仮名・原型付きで(異表記の重複込み)

- 最低月2回アップデート(初旬・中旬)- Apache License 2.0 なOSSなので安心

- 辞書はタスクに応じて使い分けると効果UP !!- 5種類のタスク向けの選択例 + 2つの前処理をご紹介- NEologd は特徴量作成とテキストマイニングに最適

Page 26: mecab-ipadic-NEologd の効果的な使い方
Page 27: mecab-ipadic-NEologd の効果的な使い方

以降は付録

Page 28: mecab-ipadic-NEologd の効果的な使い方

Q&A

Page 29: mecab-ipadic-NEologd の効果的な使い方

Q. 他の勉強会での発表資料は ?

- slideshare- 2015-03-28 / R 勉強会 @ 東京

- 形態素解析器 MeCab の新語・固有表現辞書 mecab-ipadic-NEologd のご紹介

今後も開発の進行具合に合わせて、少しづつ新しい内容を足しながら各所で発表する予定です

Page 30: mecab-ipadic-NEologd の効果的な使い方

Q. 採録しているエントリの収集方法は?

エントリの元になる言語資源は2種類ある

- Web上からクロールして収集した資源- 手元で人手で作成した資源

言語資源から作成した辞書エントリは、著作権やライセンスの観点から2種類ある

- そのまま採録しても問題がない- そのまま採録するのは問題がある

mecab-ipadic-NEologd では =>「 Web 上から収集した資源」から「そのまま採録するのは問題がある」エントリを除く様に努めている

Page 31: mecab-ipadic-NEologd の効果的な使い方

Q. どんなエントリを採録してるの?

以下の様なエントリを採録している

- IPA辞書を使った時に- 複数の形態素に分割されてしまう固有表現- 分割は正しいが読み仮名を付与できない固有表現

- 開発者が必要だと考えたエントリ

逆に以下の様なエントリは積極的には採録しない

- 特殊なドメインの単語(医学・特許用語など)- 一般性の低い固有表現(TwitterのIDなど)

今後は製品名や作品名などをとくに充実させたい

- 採録して欲しい資源をお持ちの方はご相談ください

Page 32: mecab-ipadic-NEologd の効果的な使い方

Q. 品詞情報の決定方法は?現在は以下の4パターン以外については、とくに精査せずに「名詞,固有名詞,一般,*,*,*」を付与している

- 「郵便番号データ」のから得た住所を構成する文字列

- 「日本全国駅名一覧」から得た駅名を示す文字列

- 「人名(姓/名)エントリデータ」から得た文字列

- 既知の姓・名の組み合わせ

今後もかなり高精度に品詞情報を决定できる場合以外は、なるべく単純に品詞情報を付与するつもり

- この辞書の価値は正しく品詞情報を付与することでは、まだ無い、ので気楽にやっていきます

Page 33: mecab-ipadic-NEologd の効果的な使い方

Q. なぜ IPADIC を拡張したの?Web上には長単位な辞書エントリに変換しやすい言語資源が多い

既存の形態素解析辞書に対して長単位なエントリを追加する作業は、短単位なエントリを追加する作業よりも難易度が低いと感じられた

- 人間の目視による検査は最小化したい

用言や副詞など、体言以外のエントリについて自分でも考えたかった

- 今後、人手で確実に対処したい

既知の固有表現の単語境界に関してチャンキングを不要にしたかった

- 固有表現の内部構造が必要なときは別の辞書による結果を混ぜる

固有表現の読み仮名を推定なしで取得したかった

Page 34: mecab-ipadic-NEologd の効果的な使い方

Q. なぜ読み仮名が必要なの?

僕が取り組む課題では、形態素解析器を使って日本語の文字列に読みを付与することが必須な場合がとても多い

- 日本語な検索キーワードのスペル訂正- 読み仮名や読み仮名のローマ字表記が必要

読み仮名の推定は計算量が多いタスク

- 読み仮名が既知で推定が不要ならそれが最良である

固有表現に読み仮名を付与できると自然言語処理だけでなく、音声認識・合成においても未知語の解決に貢献できる

- 未知語が原因であるエラーを削減できる

Page 35: mecab-ipadic-NEologd の効果的な使い方

Q. 今後 UNIDIC には対応しないの?mecab-unidic-NEologd をリリースする予定がある

- 先に mecab-ipadic-NEologd に体言以外のエントリを追加する

対応する理由

- NEologd で生成する辞書の性能や性質を評価するため- 副作用に関する評価を中心におこないたい

追加するエントリの単位

- 短単位エントリの追加作業は個人的に利益とコストが見合わない- 短単位以上で長単位以下のエントリを追加することになるはず

対応時期は

- 年内

Page 36: mecab-ipadic-NEologd の効果的な使い方

Q. なぜ Apache Licence 2.0 なの?

mecab-ipadic-NEologd に関連する著作権周りのことに関して悩むのは僕だけで十分だから

Apache Licence 2.0な OSS をどう取り扱うべきかは、ググれば分かるはずだから

Page 37: mecab-ipadic-NEologd の効果的な使い方

Q. 開発の経緯は?2014年1月、2月 :  形態素解析処理後のチャンキング処理の正解率の向上に限界を感じる

2014年3月 - NLP2014 に参加して意識が高まり、本質的な解決方法に取り組むことに

- 15年前から「未知語が辞書に登録されていない」という問題に変化が無いことに着目- 単語境界が既知ならチャンキングせず辞書引きすれば良い、という方針を選択

2014年4月9日  : 社内で新語辞書のシードデータ生成器の試作を開始

2014年7月9日  : 社内で新語辞書パッケージ first commit2014年7月16日  : 社内で新語辞書パッケージ を初めてアップデート

2014年8月〜2015年1月- (他の開発作業と並行して )粛々と機能改良とパッケージの更新とバグ修正を続ける

2015年2月1日  : 社内で開発した成果物を社外に出していくことになる

2015年2月24日  : 辞書のライセンスを Apache Licence 2.0 に決定

2015年3月9日  : 社外で mecab-ipadic-NEologd を first commit2015年3月11日  : 友人・知人に試用を依頼。動作確認と修正を繰り返す

2015年3月13日  : 社外でリリースした後の広報を開始

2015年3月14日〜19日 : 致命的なバグの修正や利便性を高める機能の追加をする

2015年3月24日 : tag / v0.0.1 をリリース

Page 38: mecab-ipadic-NEologd の効果的な使い方

今後の発展

- tag / v0.0.2 : 副詞などの追加- 追加のための作業に着手しました

- mecab-unidic-NEologd の生成

- 定量的な評価とその結果の発表

Page 39: mecab-ipadic-NEologd の効果的な使い方

Q. 最新情報の集め方は?

1. Twitter で @overlast をフォロー

2. たまに #neologd を検索する

3. neologd、形態素解析器、固有表現抽出などに対する関する不満を Twitter 上で言ってみる

Page 40: mecab-ipadic-NEologd の効果的な使い方

参考資料

MeCab 用の新語辞書 mecab-ipadic-NEologd を公開しました- http://diary.overlasting.net/2015-03-13-1.html

日本語のREADME- https://github.com/neologd/mecab-ipadic-neologd/blob/master/README.ja.md#

日本語で詳細な説明を書いたWiki- https://github.com/neologd/mecab-ipadic-neologd/wiki#

解析前に行うことが望ましい文字列の正規化処理- https://github.com/neologd/mecab-ipadic-neologd/wiki/Regexp.ja