mots quotidiens.
Daichi Mochihashi (持橋大地) daichi <at> ism.ac.jp by hns, version 2.10-pl1.

先月 2005年06月 来月
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

2005年06月03日(金) [n年日記]

#1 submit

論文を2本同時にsubmit。

一部の人は知っていることですが, ACL は当日の夜中になってATRのネットワークが 完全に遮断されるという, ほとんど嫌がらせかよ!!みたいな出来事があったため, ほぼ書き上がっていたのに submit できなかったのでした。; というわけで, 僕がミシガンにいないのはそもそも出していない からであって, 落ちたわけではありません。DNSが止まっていたので, ネットワークどころかXの画面自体が真白に なってしまっていた。
個人的にはNLPというよりCLの方向でやっていた仕事だったのと, 松本先生も石井先生も, ACLは出せば通るだろうとおっしゃっていた ので, 非常に 悔しかったんですが, まぁ終わったことなので仕方ない, と。
まぁEMNLPも, また理解できないので通せないとか, 色々難癖が付く 可能性があるので, うーん, という気はします。
できるだけ直観的に, わかりやすく書くようにはしたのだけれども, 8ページとしてはギリギリまで書いたと思う。


2005年06月08日(水) [n年日記]

#1 引越

というわけで, 工藤君の協力で chasen.org に引っ越しました。
メール daiti-m@chasen.org はATRの方にリダイレクトされます。

今は英語版だけなので, 日本語のページはぽつぽつ作っていこうと思います。
とりあえず, アクセスの多い zsh のページへのリンクは復活させておきました。
それから, DMのページ を書き直して, テクニカルレポート等へのリンクを張っておきました。

#2 -

フィジカルにも席を移動したんですが, まだ慣れない..。


2005年06月11日() [n年日記]

#1 Indian buffet Processes

いつになったら世界の top に追い付けるのか、気が遠くなる..。


2005年06月22日(水) [n年日記]

#1 変分ベイズ法チュートリアル

先日 DMLA でやった変分ベイズ法のチュートリアルを, 内部でリクエストがあって もっと一般的な話にして行ったので, スライドを公開しました。

EMから順番に説明して, 繋がるようになっています。 「計算統計I」を読んでわかった人にはわりと不要かもしれませんが, EMの説明がいきなりQ関数を出すやや天下り的な方法ではなく, いわゆる Neal-Hinton 流に下限を maximize する説明から, 自然にQ関数が導かれる ようになっています。(実際には, Ghahramaniの説明を参考にした。)
他には, 途中の計算を省略せずに書いてあるということと, 言語処理向けに, 正規分布や Wishart 分布が全然出てこないのが特徴かも しれません。 応用例として, LDAとVB-HMMの説明が簡単に含まれています。

1つ注: モデル選択の議論は含まれていません。 (∫∫∫p(D,z,θ,m)dzdθdm → p(m|D) ∝ p(m)exp(F(m)) という話)。 変分ベイズ法の一番本質的な所はここではないと思うのと (単にそこまで書く時間がなかったともいう ;), m を隠れ変数の数だとした時には, 現代的にはもっといい方法があると思うので, 興味のある方は元論文をご覧下さい。

vb-nlp-tutorial.pdf


2005年06月27日(月) [n年日記]

#1 summer

夏っぽい画像 (謎)。

#2 PDF

変分ベイズ法のチュートリアルを途中まで聴いた人から, スライドでわからない所が あると言われたので, いくつか修正。 EMの説明で, F(q(z),θ) とするとわかりにくい かと思って F(z,θ) と書いたらかえってわかりにくいとのことだったので, 正確な方の F(q(z),θ) に修正。
Prosperでスライドを作る時, そのままだとしおりがEUCなので文字化けして しまう。 ここ にある convert-euc というスクリプト(僕は psuni という名前にした)で, スライドのタイトルだけを Unicode に変換しておくと, 日本語のしおりが通るようになる。 公開 しておいたPDFもこれを使って, 日本語のタイトルが化けないようにしておきました。


2005年06月28日(火) [n年日記]

#1 sparse matrix in MATLAB

SVMlightや TinySVM, lda *1 等で使われている, 素性とその生起回数を表すデータ フォーマット
12345	101:1 103:2 107:3 109:4 113:5 127:6
は一般的に, (12345,101) -> 1, (12345,103) -> 2, .., (12345,127) -> 6, .. のような疎行列として表せる。
MATLABは疎行列を持っているので, それで表すことができて, 次のようなコードを書くと, 上のような行を持つテキストファイルから 疎行列にロードできる。 (一部)
 1 m = sparse(n,l);
 2 while ~feof(fid)
 3   l = fgetl(fid);
 4   d = sscanf(l,'%d',1);
 5   i = strpbrk(l,'       ');  % space or tab
 6   f = sscanf(l(i+1:end),'%d:%g',Inf);
 7   n = length(f) / 2;
 8   for j = 1:n
 9     m(d,f(2*j-1)) = f(2*j);
10   end  
11 end

これは小さなデータについては何の問題もなく動くのだが, ファイルが大きくなるとかなり遅くなる。
そんなもんか, と思ってあきらめていたのだが, プロファイルを取ってみたところ (profile on), 上の9行目でほとんどの時間が食われていることがわかった。
ハッと気が付いたのだが, MATLABの疎行列を表示してみると, 内部的にはrow-wiseではなく column-wise に格納されているように見える。 ということは,

m(f(2*j-1),d) = f(2*j);
とすると速くなるのでは.. と思って実験してみると, とてつもなく速くなった。;
>> tic, m = fmatrix('bncm.uni.dat');, toc
loading lines 4120/4120..
elapsed_time =
  926.6075 (seconds)

>> tic, m2 = fmatrix2('bncm.uni.dat');, toc
loading lines 4120/4120..
elapsed_time =
   14.2434 (seconds)
何と65倍。 (必要なら, 最後で m = m' とすればよい。)
データがもっと大きくなると, 前者の方法では数時間かかるものが 後者だとせいぜい数分で終わるようになる。
"行列"というと, 何となくつい簡単に行→列の順にアクセスしたくなって しまうのだが, というわけで, 「MATLABの疎行列は基本的に column wise にアクセスせよ」 ということのようだ。 考えてみると, MATLABは基本的に column-oriented な言語になっているので, 自然で当たり前なことなのだけど。 うーむ。他の部分のプログラムも書き直さないと。;


*1: lda のMATLAB版では, C版と同様に疎行列を使わずに二つの配列で表現しているので, 速度の問題はありません。

6 days displayed.
タイトル一覧
カテゴリ分類
 なかのひと
Powered by hns-2.10-pl1, HyperNikkiSystem Project