mots quotidiens. | |
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp | by hns, version 2.10-pl1. |
|
|||||||||||||||||||||||||||||||||||||||||||||||||
A4 1枚なので読んだ方が簡単ですが, 内容を日本語で簡単に言うと, 識別モデルで最大化されるラベルの尤度 p(C,θ|X)=p(θ)p(C|X,θ)の裏には, 生成モデルの立場からは データ X を生成した「別の」パラメータ θ' があって, 本当は
p(C,X|θ,θ') = p(C|X,θ)p(X|θ')になっているのだ, ということ。このようにデータ X を生成したパラメータθ'と, ラベルを生成したパラメータθが decouple されているので, それだけモデルの 柔軟性が高まる。(が, 推定の精度は下がる可能性がある。)
p(C,X,θ,θ') = p(θ,θ')p(C|X,θ)p(X|θ')となって, ここで p(θ,θ')=p(θ)p(θ') と分離できれば, この確率最大化は普通のCRF等の 尤度最大化と同じになる。 *1 だが, 一般にはそうとは限らないので, p(θ,θ')の依存関係を入れることで, unlabeled data (Xのみ)が含まれる場合も consistent にモデル化できます, という話。
今回の僕の話はディリクレ過程混合モデルでDMを推定する, という話
ですが, 結局Blei(2004)のDP混合モデルの変分ベイズ法をそのまま使った
感じになってしまったので, 正直書くのがかなり欝でした。
まぁDMをDPでやるという穴を埋めたかったのですが, かなり反省。
もちろん, 最適な混合数の所にEMを回すと収束するというのは面白いのですが,
「そんなの自明じゃん」というのはわかっておりますので.. という感じ。
実は, Blei(2004)を理解するためには, 測度論→DP→HDPと全部理解して,
さらに Ishwaran and James (2001)にも依存していて変分ベイズも使って..
と理解できる前には果てしなく長く思えた道のりがあったのに, 理解できてみると
すごい自明で, それ以上拡張もできなかったという話。うーん。
とはいえ, DPの話はずっと興味を持っていて時間を使っていたことでは
あるので, これでとりあえずは切りが付いたかなと。
このプログラムを使うと, 任意のテキストを真っ白に変換できる。
~/atelier/white% echo "Hello, world." | whiten > hello.white
とすると,
驚きの白さに!(ぉ
Hello, world.中身は予想通りで, 下のような感じで簡単に書けます。
/* * whiten.c * Mon Mar 20 16:18:15 JST 2006 dmochiha <at> slc.atr.jp * */ #include <stdio.h> #define white "\x20" #define WHITE "\xa1\xa1" #define BITS(c,n) ((c & (1 << n)) >> n) int main (int argc, char *argv[]) { int i, b, c; while ((c = getchar()) != EOF) { for (i = 0; i < 8; i++) { if ((b = BITS(c, i)) == 0) printf(white); else printf(WHITE); } } exit(0); }unwhite.c:
/* * unwhite.c * Mon Mar 20 16:34:50 JST 2006 dmochiha <at> slc.atr.jp * */ #include <stdio.h> #define SETBIT(c,n) (c |= 1 << n) int main (int argc, char *argv[]) { char b = 0; int c, i = 0; while ((c = getchar()) != EOF) { switch (c) { case 0x20 : break; case 0xa1 : SETBIT(b, i); c = getchar(); break; default : fprintf(stderr, "error: c = %d\n", c); exit(1); } if (i == 7) { putchar(b); b = 0; i = 0; } else i++; } exit(0); }0->半角スペース, 1->全角スペースなので, jpegや圧縮ファイルなどは 平均的にはほぼ(8+16)/2=12倍になります。 ちょっと面白かったのは, テキストなどは0が多いので10倍くらいなのかなと思っていたところ, せいぜい11倍くらいだったという結果。意外と1が多い。 man ascii すると, 英小文字はcharの後ろの方に割り当てられている ので, 比較的1が多いのだろう, という話でした。
タイトル一覧 |