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

先月 2004年09月 来月
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

2004年09月21日(火) [n年日記]

#1 ISMイテキタ

統計数理研究所 (ISM)に行ってきました。 セミナーをするなら旅費を出しますよ, との有難いお話でしたが, (少なくとも現在のところは)そんな怖れ多いことができるわけがないので(^^;), 東京の実家に用事があって帰る時のついでに。
広尾のあたりに行くのは実は初めてだったりして。
統数研は, 何というか病院みたいな感じの建物でした。別に悪い意味ではなく, 建物が古くて静かなのと, 床がリノリウムかつ公的な建物なのが そういう感じがするのかも。

伊庭さん とずっとお話しして, その後福水さんに紹介していただいて少しお話ししたり。
3月に松本研研究会で話した (今はもう少し違うやり方でやっています)を最後に説明したら, 隠れ変数が5層 *1 になっているので「やりすぎ(笑)」と言われました。(笑)
帰ったのは結局午後7時半くらいだったので, 6時間くらい喋っていたような 気がする。


*1: z→λ->α->γ->(a,b) の5層。ただし, λは積分除去されているので実際には4層。

2004年09月30日(木) [n年日記]

#1 hashtable in MATLAB

MATLABで扱えるのは基本的に数値だけなので, 単語を id (整数)に変換する 関数が必要になるが(これは他の言語でも同じ), MATLABにはどうもハッシュテーブルが ないらしい。テキストを扱っている人は全体からみると少数派だろうから, 致しかたないのかも。
NIPS Papers(0-12) dataset (MATLABフォーマット) *1 のように, あらかじめ整数に変換しておくという手もある が, 訓練データに関してはそれでいいとしても, テストデータに関して毎回 それをやるのは面倒だし原理的に問題が多い。

なければ作れ, というわけで, アルゴリズム2巻 を参考にして実装してみた。
大羽さんの MATLAB のページ に公開してもいいんだけど, NLPに特化している感じがするのでここに公開して おきます。

バグを取って速くしていたら書くのに2日かかってしまった。;

内部的には double hash になっていて, ハッシュ関数は perl 内部で使われている ものと 同じ。 ハッシュを自分で書いたのは数年ぶりなので, 勉強になった。
matlab-hash-0.1.tar.gz の中身は以下のような *.m ファイルからなっています。 使い方は中の README を読んで下さい。 おまけで, テキストを整数(の配列のセル配列)に変換する関数群 matlab-text-0.1 も公開しておきます。( README )

これを使って, テキストを整数にマップするにはたとえば以下のようにします。 (/usr/share/dict/words を lexicon にする例)

slt:~% matlab
> words = cellload('/usr/share/dict/words');
loading /usr/share/dict/words..
done.
> map = hashtable(words,1:size(words,2));
adding key 45427/45427..
done.
> text = textload('/home/dmochiha/corpus/austen/clean/emma.txt');
reading /home/dmochiha/corpus/austen/clean/emma.txt..
loading lines 14281/14281..
done.
> d = textmap(map,text);
mapping 14281/14281..
done.
> d{100}
ans =
 [ 19451 20830 36967 19255 38643 1369 41328 34619 28419 19897 24271 3073 0 ]
> text{100}
ans =
 { 'happier' 'if' 'she' 'had' 'spent' 'all' 'the' 'rest' 'of' 'her' 'life' 'at' 'Hartfield.' }
(ans は圧縮して表記しました)
/usr/share/dict/words の4万エントリのハッシュを作るのに25秒くらいかかってしまう (180秒くらいだったのを速くした)が, まぁ普通1回しか使わない関数なので いいことにする。(matlabではコードをベクトル化して内部処理させないと遅くなり ます。この場合は for 文を回すしかないのでベクトル化できない。) コンパイルするともう少し速くなるかも。

*1: 前は NIPS abstracts で Abstract だけだったけれども, 去年あたりに見たら本文も 全部入っているようです。

#2 tips

ついでに, いくつか気付いた MATLAB tips.


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