tabateeの日記: winnow 8
日記 by
tabatee
何かに勝利するって話じゃなくて、Computer Science系の話です。
以前のエントリで紹介した論文「Scaling to Very Very Large Corpora for Natural Language Desambiguation」のFigure 1の右の方で最高の性能を出しているWinnowって手法を知らなかったんですが(他の3つは知ってたんですが)、Winnowのわかり易い解説を見つけました。
理論的な方まで追うと他のものよりも大変そうですが、コードを書くレベルでは驚くほど簡単な手法に見えます。
anthyの最近のはMemory basedのclassifierを使ってて、Social IMEとかで使ってるものにはvotingを追加してみたりしてますが、将来に検討するようなことがあればこの辺のアルゴリズムもアリな気もします。
以前のエントリで紹介した論文「Scaling to Very Very Large Corpora for Natural Language Desambiguation」のFigure 1の右の方で最高の性能を出しているWinnowって手法を知らなかったんですが(他の3つは知ってたんですが)、Winnowのわかり易い解説を見つけました。
理論的な方まで追うと他のものよりも大変そうですが、コードを書くレベルでは驚くほど簡単な手法に見えます。
anthyの最近のはMemory basedのclassifierを使ってて、Social IMEとかで使ってるものにはvotingを追加してみたりしてますが、将来に検討するようなことがあればこの辺のアルゴリズムもアリな気もします。
パーセプトロン? (スコア:1)
誤差に学習係数をかけて重みに足すのではなく、重み自体をα倍してるんですね。
理論的な解析はたしかに大変そうです。
Re: (スコア:0)
Re:パーセプトロン? (スコア:1)
今のところのanthyのサンプル数(数万文節)だと現行のMemory Based+Votingに素性はマニュアルで選択というのはそんなに悪くないと思ってます。
もし、Winnowを使うとすると、変換エンジンがユーザに出した結果が文節の伸縮などを受けたかどうかをもとに、係数を更新していくことでユーザ好みの変換を学習していくなんてのが面白いんじゃないか妄想中です :-)
Naive Bayes (スコア:1)
Re:Naive Bayes (スコア:1)
結局、入力のどの程度に問題なものが含まれているかに依存してそうで、試してみれば意外といけるかもしれませんね。その前にサンプルを増やしたり、素性(品詞体系)の選択を工夫したりすべきなんでしょうけど…
学習にWinnowを使えば良いかもしれないと書いたのは、係数が最近の正変換や誤変換にフィットして古い情報を忘れていくように調整することで、ユーザの傾向に合った学習機構になるんじゃないかと思ったからですが、実際のところ学習はセコい手でなんとかなってるように感じます。
Re: (スコア:0)
おっしゃるように,独立でなくてもナイーブベイズでうまく行く場合は多いです.著名な論文として次のものがあります.
フルペーパー: P.Domingos and M.Pazzani, "On The Optimality of The Simple Bayesian Classifier under Zero-One Loss", Machine Learning, vol.29, pp.103-130 (1997)
国際会議:P.Domingos and M.Pazzani, "Beyond Independence: Conditions for The Optimality o The Simple Bayesian Classifier", ICML1996
過去のk個の語か
Re:Naive Bayes (スコア:1)
自分自身は何かタナボタが降ってきでもしない限りanthyの開発をする気のない状況で、余暇にはアセンブラよりlow levelなscript言語処理系なんてのを作って遊んでいる今日この頃ですが、今後、変換エンジンを作ろうとする人には役に立つ議論だと思います。
一応、今のanthyでは、過去のk個の語から次の語を予測ではなくて、k個の単語もしくは文節の列が正変換・誤変換となる確率を考えるようにしています(やる事は一緒ですが)。「確率的言語モデル」に書かれている方法で最大エントロピー法を使っての開発もやってみたのですが、以下の理由で失敗しました。
確かに学習の重いアルゴリズムを変換ごとに使うのは無理なので、そういうのはリリースする人が例文から計算してインストールパッケージに含めるようにし、実行時にはオンラインアルゴリズムの結果と投票で混ぜるのもアリですね。
Re: (スコア:0)