以下の内容はhttps://www.yasuhisay.info/entry/20110104/1294088567より取得しました。


練習がてらC++でHMMのコードを書いた

いわゆるお勉強的なコードなので特に新しいところはないです。

HMMをベースにしたモデルを作る必要が(たぶん)出てきそうなんですが、そういえばHMMの前向き後ろ向きアルゴリズムの付近とか実装したことねぇやべぇと思ったので書いてみました*1。系列の長さが100超える付近からまじめにやらないとアンダーフローで死んだりしたので、Scalingの付近はちゃんとやりました。が、i.i.d.な系列が複数あるバージョンでの推定や、テストデータが未知語を含む場合などは(不真面目なので)端折ってます。まあ、それでも遊べるし...。コードはgithubに上げました。
github.com
対数尤度が単調増加してる感じだったので、こんなんでとりあえずいいかーと思ったものの、去年unsupervisedなpos taggingを機能語と内容語を考慮してモデル化する話の論文とか読んでみて、教師なしのpos taggingで実験したことないなーと思ったので、こっちも実験してみることにしました。Graham Neubigさんが、ノンパラベイズのチュートリアルの題材として教師なしpos taggingをやられていて、その評価用スクリプトも公開してくださっているので、それとそれについているwikipediaのデータで実験しました(ありがとうございます)。結果のほうはgithubのほう見てください。

実際のタスクでやるときには収束も早いohmmとか使ったほうがいいと思いますが、この辺自由にモデル化&実装できないとこの先生き残れないので車輪の再発明をしましたとさ。あとは便利と噂のglogとかwafとかを使ってみたかったという不純な動機もある。

*1:前向きとViterbiは昔Rubyで書いたことがある模様




以上の内容はhttps://www.yasuhisay.info/entry/20110104/1294088567より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14