形態素解析の話
2017年6月22日
ワークス徳島人工知能NLP研究所
高岡 一馬
自己紹介
高岡 一馬
ワークスアプリケーションズ
徳島人工知能NLP研究所
元 茶筌メンテナ
過去4つの形態素解析
器開発にたずさわる
コーパス開発
かな漢字変換
テキストマイニング
3
形態素解析とは
4
伝統的な自然言語処理の階層
応用技術
情報検索 翻訳 日本語校正
要約 レビュー解析 英文校正
情報抽出 Web応用 対話
要素技術
言い換え 語義曖昧性解消
固有表現抽出 照応解析 知識獲得
基礎技術 形態素解析 構文解析 述語項構造解析
Project Next NLPの資料を一部改変
5
形態素解析の3要素
Segmentation
● テキストを分割
● にわとり/は/飛ば/ない
Stemming (Lemmatization)
● 語形を辞書形に
● 飛ば → 飛ぶ
Part-of-speech Tagging
● 品詞を付与
● にわとり(名詞)/ は(助詞)/ 飛ば(動詞)/ ない(助動詞)
6
共通接頭辞検索とラティス
「東京都に住む」
0 1 2 3 4 5 7
BOS
東
京都
に 住む EOS京
都
東京
東
京
京
都
都 住
む
に
7
N-gramモデル
Markov連鎖の仮定
● ある単語列 の生起確率は
● 直前の(N-1)語までのみ依存すると近似
wn
=w1 w2...wn
P(wn
)=P(w1)P(w2|w1)P(w3|w1 w2)... P(wn|w1 w2 ...wn−1)
P(w
n
)=∏
n
P(wi
|wi−N+1
i−1
)
8
その他の機能
表記正規化
● 送りがな
● 異体字
読み付与
● 読みがな、発音
● 連濁
派生
● 可能動詞
● 自動詞、他動詞
● 申し込み
●
申込み
● 申込
● 高岡
●
髙岡
● 書ける
● 書く
● 開く
● 開ける
9
既存のオープンソース
形態素解析器と辞書
10
解析器と辞書
解析器 辞書 +α
MeCab IPADIC NEologd
UniDic NEologd
JUMAN辞書 JUMANより精度がよい
JUMAN JUMAN辞書
KyTea 点推定をつかったモデル
IPA品詞体系にちかい
11
UniDic
国立国語研究所短単位
● かなり短めの単位、学校文法にちかい品詞体系
● だれがタグ付けしても再現できるような定義(斉一な単位)
学習コーパス: 現代日本語書き言葉均衡コーパス (BCCWJ)
● 国語研が公開
● 依存構造解析、述語項構造、照応解析、シソーラスなどが付加
難点
● 短すぎ
● 分割ルールが直感的でない eg.「寿司屋」「家具/屋」
● 固有名詞が不足
12
IPADIC
IPA品詞体系にもとづく
● 学校文法にちかい
● 分割長はほどほど
● 分割粒度にばらつきがある
学習コーパス: RWCPコーパス
● 非公開
難点
● メンテナンスがとまってる
● ライセンスがOSS非互換(ICOT条項)
● 後継のNAIST-jdicも停止
13
NEologd
IPADICを補完
● 固有名詞、複合名詞を1語として追加
● 表記補正なども辞書で対応
● UniDic版もあり
Webからの語彙収集
● システムによる自動・半自動
コスト推定
● 単語生成コストはコーパスをつかわず調整
14
JUMAN辞書
益岡・田窪文法にもとづく
● クセのある品詞体系 eg. ナ形容詞、判定詞
パラメータは人手調整
● JUMAN++はNNも利用
付加情報が多い
● カテゴリ・ドメイン情報、派生語情報
間欠的にメンテナンスされている(らしい)
● JUMAN++では語彙追加も
15
Tips
16
前処理は大切
形態素解析器は脆弱
● 文字コード
● 改行
● 言語
● テキストではないもの
構造情報はべつに保存しておく
● タグ、カラム情報、位置
特殊なものは専用のパーサで
● 住所
ヘ_ヘ
ミ・・ ミ
( )~
17
辞書への単語追加
再学習はしない
● 結果がぶれる
● コーパスの調達が手間
● やりたいことが明確なら手で調整
コストの人手調整方法
● 品詞をちゃんときめる(MeCabなら連接ID)
● 単語生起コストは適当でも大丈夫
● 解析はおおむね品詞連接コストできまる
18
単語追加の注意点
単語追加をさけるべき語
● 一般的な語の品詞ちがい eg. みんな(固有名詞組織)
● 短い語
● ひらがな語 eg. 「なのは」問題
19
解析を強制したい
特定の文字列の解析を一定にしたい
● 文字列を1語で登録
● 付加情報に分割位置を記録
● 後処理で分割
にはにはにはにわとりがいる,1285,619,0,動詞,自立,*,*,一段,基本形,
庭に埴輪鶏がいる,ニワニワニワトリガイル,ニワニワニワトリガイル,
にわ|名詞|一般|*|*|*|*|庭|ニワ|ニワ/
に|助詞|格助詞|一般|*|*|*|に|ニ|ニ/
はにわ|名詞|一般|*|*|*|*|埴輪|ハニワ|ハニワ/
...
20
つかいやすい形態素解析
21
語の同定
切って、品詞つけるだけでじゅうぶん?
● こまかい品詞分類はいらない
● つかえる分割単位か
● 何につかうのかを意識する
その語が何なのか
● 他の資源との関連付け
● Entity Linking, Wikification
● 同義語、概念辞書
22
解析の一貫性
わかったことは出力
● 可能性にもとづく品詞
● 「当分」
 (名詞副詞可能)
● 「当分動けない」
 (副詞)
「当分の間」
 (名詞)
状況にかかわらず一定
● 検索、機械翻訳
● 同一文字列には
同一の結果
VS
23
分割の粒度
ほしい長さはアプリケーションによってちがう
● 検索
● マイニング
● 語彙調査
既知語と未知語で粒度がかわる
非常識 名詞,一般,*,*,*,*,非常識,ヒジョウシキ,ヒジョーシキ
非 接頭詞,名詞接続,*,*,*,*,非,ヒ,ヒ
効率 名詞,一般,*,*,*,*,効率,コウリツ,コーリツ
24
形態素解析器
Sudachi
25
形態素解析器Sudachi
形態素解析器つくります
● オープンソース
● 開発もオープン
● 辞書もつくります
● まずはJavaで
26
なぜいまさら形態素解析器を?
世の中ニューラルネットワークでEnd to End
● 独立したタスクとしての形態素解析は不要
ブラックボックスだとできないこともある
● どうしても強制したい事例
● ピンポイントで直したい
語の同定は?
● 他の資源との接続
● 「テキストから社員名を同定してDBとひもづけたい」
27
Sudachiでやりたいこと
複数の分割単位の併用
● 必要に応じて切り替え
多数の収録語彙
● UniDicとNEologdを
ベースに調整
継続的なメンテナンス
● 10年以上はつづけたい
機能のプラグイン化
● 自由に機能追加
同義語辞書との連携
● OSSで公開予定
28
C単位 ワークス徳島人工知能NLP研究所
B単位 ワークス 徳島 人工 知能 NLP 研究所
A単位 ワークス 徳島 人工 知能 NLP 研究 所
複数の分割単位を出力
分割単位
● A単位 UniDic相当
● B単位 IPADIC相当
● C単位 NEologd相当
それぞれの単位で出力や再分割が可能
29
表記正規化
送りちがい 打込む → 打ち込む
字種 玉蜀黍 → トウモロコシ
異体字 附属 → 付属
連濁 いとごんにゃく → いとこんにゃく
誤用 シュミレーション → シミュレーション
縮約 ちゃあ → ては
×略語 スマホ → スマートフォン
30
プラグイン
各処理ステップをフックして処理を差し込む
● 入力テキスト 異体字統制、表記補正
● 辞書検索 異体字統制、表記補正
● ラティス 未知語処理、品詞接続禁制
● 出力解 人名処理、分割粒度調整
ユーザーが自由にプラグインを作成できる
31
大規模使用時の省メモリ化
辞書イメージをメモリ上で共有
● tokenizerごとで独自の辞書セットをもてる
VM1 VM2
32
形態素解析器Sudachi
8月中旬初版リリース予定!

形態素解析