形態素解析器メモ

はじめに

形態素解析器が何たるかも知らずにいたのでメモ。

形態素とは?

  • 意味を持つ最小の言語単位
    • 形態素<単語<文<テキスト(ドキュメント)
  • 例えば「今日は晴れ」という文は「今日」+「は」+「晴れ」のような形態素(単語)に分解できる

形態素解析とは?

  • 形態素に分解するだけでなく、以下の3つの処理がある
    • 形態素に分割
    • 品詞の付与
      • 形態素が動詞なのか名詞なのか品詞を決定する
    • 原型の復元
      • 「行った」の原型は「行く」などのように語形・活用変化を元に戻す
  • 日本語は英語のように単語分割されていないので、うまく分かち書きできるかも重要

形態素(単語)に分割する手法

基本用語
  • 単語辞書
    • 「見出し語」「読み方」「品詞」「活用形」「原形(基本形)」などをそれぞれ保持しているもの
    • 辞書に登録されている見出し語を形態素とみなす
  • 連接可能性行列
    • 「文頭」「文末」「名詞」「動詞」「助詞」「接続詞」など、2つの単語(品詞)が隣接する可能性があるかどうかを0,1で保持している行列
  • ラティス
    • 単語辞書と隣接可能性行列を使って、入力された文をグラフに直したもの
      • 頂点:可能性のある形態素(品詞付)
      • 辺:各頂点から次に続く可能性のある形態素(品詞)のときのみ辺を張る
    • http://d.hatena.ne.jp/takeda25/20110807/1312702772 (ラティスとプログラム上の実現などについてわかりやすい!)
コスト最小法
  • いろんな形態素に分けられる可能性がある(「きょう/はは/れ」や「きょう/は/はれ」など)
  • 分け方の中で妥当そうなものを順位づける方法
  • ラティスにおけるすべてのパスについて、以下の2つの総和をそのパスのコストとする
    • 生起コスト(どのぐらいその形態素がでにくいか)→頂点を通るコスト
    • 隣接コスト(形態素形態素の結び付きにくさ)→辺を通るコスト
  • 一番コストの小さいパスが妥当(そう)な分割
  • 隣接可能性行列の要素(辺)をコストにする感じ
  • ラティスはDAGとも見れて、各頂点にそこまでの最小コストを保持するDP(ビタビアルゴリズム)で求められる
  • 応用として、形態素数最小法、文節数最小法なども考えることができる
  • コストの値は人力で与えるなどしないといけない
    • コーパスから自動的に学習する手法も開発されてる
  • 辞書にない単語(未知語)があるとやばい
    • 未知語の扱いをどうするか?
  • 新しい言葉づかいなどで書かれた文章だとやばい
    • 「こんにちは」が「ちわーっす」などになってると鼻血でそう
    • どうすればいいか?
最長一致法
  • できるだけ長い形態素(単語)で構成される分け方を優先して選ぶ
N-best探索
統計的言語モデルによる手法
  • ラティスの頂点・辺のコストを確率値にして、確率が一番高くなるパスをもとめる
  • 確率値を求めるのが難しい
    • 一部のデータから作る言語モデルを使うといろいろ問題もある
辞書を使わない方法