HMMとCRFとの違いについて調べてみた
経緯
系列ラベリングの代表的な手法として HMM と CRF はそれぞれ聞いたことあるし概要は本を読んでわかったつもりになっているけど,どうもそれらの違いがわからないなぁ...と思ってちょっと調べてみた.意外と日本語の記事が見つからず,英語の記事でいいものがあったのでそれの翻訳兼要約としてまとめる.英語に抵抗感がない人は元記事へ.
CRFとHMMの違いがどうしてもわからなくて延々とググっている.
— ノエル (@saya_hakuren) 2018年5月27日
想定する読者
以下の用語を聞いたことがあるかた
ちなみにこの辺りのことは自然言語処理概論やサポートベクトルマシンを参考にしてください.
HMM と CRF との違いは何か
ざっくり言えば
HMMはナイーブベイズを,CRFはロジスティック回帰を用いる.
以下詳細
以下では入力系列をX=(x1, x2, ..., xi, ..., xn),ラベル列をY=(y1, y2, ..., yi, ..., yn)とする.
モデリング対象としている確率分布
HMM: XとYとの共起確率 P(X, Y)
CRF: Xが与えられた時のYの条件付き確率 P(Y|X)
学習の仕方
HMM: 学習データ中の出現頻度をカウント.またはEMアルゴリズムなどを用いて出現確率や遷移確率を推定.
CRF: 勾配効果法 (SGD) などの最適化アルゴリズム.
HMMの方がCRFよりも早く学習されるが,CRFの方が推定精度や偏りのある学習データへの頑健性などの面で強い.
系列全体の依存関係への挙動
(単純な)HMM: Xとyiとの依存関係を直接モデル化できない.
(単純な)CRF: Xとyiとの依存関係を直接モデル化できる.
CRFはラベル全体の分布Yをモデル化するだけであり,入力系列全体の分布Xを考慮しない.これに対しHMMは共起確率をモデル化する際にXとYの両方を考慮する必要がある.したがって,CRFはXのyiへの影響を直接モデル化することができる.
ほかの記事では
HMMはP(X, Y)をモデル化しているのに対してCRFはP(Y|X)をモデル化している.このためHMMでは P(X) = ΣP(X, Y) を行うことで,P(X)を求めることができる.P(X)は入力系列Xの確からしさを表しており,つまりはXに対する全てのYのスコアを足し合わせることで言語モデルとして使うこともできる.
あとがき
今回HMMとCRFとの違いという観点から両手法への理解を深めた.HMMは共起確率を,CRFは条件付き確率をそれぞれモデリングの対象としていることが全ての違いの中心にあると感じた.
余談であるがこのブログが私の初めてのブログである.間違ったことはいえねぇと,色々な書籍を引っ張り出して復習した.ブログむずい....
ここまで読んでいただきありがとうございました.私の理解が足りていないところなどがあれば,なにとぞ優しくまさかりを投げてください.
今回の執筆にあたって,一緒にCRFのことを調べたり考えたりしてくれた同研究室のT氏とT氏には大変にお世話になりました.
参考にさせていただいたサイト
What is the difference between HMM and conditional random field? - Quora
https://www.cs.cmu.edu/~epxing/Class/10701-08s/recitation/em-hmm.pdf