mots quotidiens.
持橋大地 (Daichi Mochihashi) daichi <at> cslab.kecl.ntt.co.jp by hns, version 2.10-pl1.

先月 2010年03月 来月
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 31

2010年03月07日() [n年日記]

#1 Google Sparsehash+HPYLM

日曜日だが, 坪坂君の実験 で Google sparsehash はやはり結構速かったことが わかったのに影響されて(?), 自製のHPYLMのコードを Google sparsehash で書き直してみることに。
というのは, もうすぐ公開する予定のプログラムで確率の計算がボトルネックに なっているらしいことが分かったからですが..。 *1

実際のプログラムはうまく抽象化して書いてあったことが幸いして, 少し直すだけで対応完了。

の両方を sparse_hash/dense_hash にしてみました。
例えば, p(cake|mary eats a)の確率を予測したい場合, 木の根から a→eats→mary の順にノードをたどり, たどり着いた 'mary eats a' のノードで cake が何回出てきているか&そのテーブルの数は何個か, を知る必要がありますが, どの検索もスパースなので, 何らかの形で効率的なデータ構造が必要になります。

というのが前置きで, 以下がその結果。

AlgorithmTimeMemory
dense_hash_map33.48min209M
sparse_hash_map55.28min111M
splay tree57.13min76M
上はかなり小さいデータ(京大コーパスから5000文)のもので, 毎日新聞2000年度全文 (約150万文)を突っ込んだメモリ使用量は, dense_hash_map で7.5G, splay tree で 4.0Gでした。ちなみに, ナイーブに ext/hash_map を使うと20G超えのようです。
ということで, というのがひとまずの結論のようです。
スプレー木は二分木なので O(logn) ですが, 意外と速かったなというか..。
今回は densehash を使うことにしましたが, ちなみにスプレー木は自己組織化二分木 なので, 計算が進むほど, 各ノードの持つ二分木の構造が最適化されて, どんどん計算 が速くなるという素敵仕様があったりします。


*1: ちなみに, この実装ではノードの検索は int のハッシュなので, ハッシュ関数の影響 はありません。
*2: これは, ngramの各ノードでそれぞれハッシュを持つという構造のせいで, 巨大なハッシュを一つだけ持つという場合は, Google sparsehashのメモリ効率は非常に 良いのだと思います。

2010年02月24日(水) [n年日記]

#1 MCMC研究会@ISM

立川に二泊して, 土・日の統数研でのMCMC研究会から帰ってきました。

どの発表もとても興味深い内容で, 特に美添一樹さんのモンテカルロ木探索の話が 非常に力の入ったトークでした。
北門さんの漁業での混合比推定のお話もなるほどという感じで, Pritchard(2000)のadmixtureの話(=LDAと同じモデル)が出たので, これも入れないといけないと思い, 急遽翌日の自分のスライドにLDAの紹介の話を入れた のですが, 北門さんは二日目は出席しておられなかったようで残念でした。
結構参加者がいて, 色々な話や議論があって, かなり成功だったのではないかと思います。

僕は二日目朝に, 統計的NLPの最近の状況とそこでのMCMCの使われ方について いくつか紹介しました。
別に僕はMCMC信者というわけではないですが, 色々な場面に有用な手法なのはなぜか, のような話も書いてあります。 PDFを置いておきましたので, ご興味のある方はどうぞ。 *1


*1: インフォーマルな研究会なので, わりと本音っぽいことが書いてあったりします。

#2 電通大

翌日は実家に泊まって, 月曜日は韓先生のシャノン賞受賞記念講演会 「情報数理の遥かな地平」 を聴きに, 調布の電通大へ。甘利先生や韓先生の謦咳に初めて接してきました。


2010年02月12日(金) [n年日記]

#1 -

連携講座関係の打ち合わせでCS研に来られた京大の 田中先生 に, ずっとお話を伺う。
色々なお話を聞いて, 本当楽しかったです。

最近つくづく思うことは, もし関西に来ずに東京にずっといたら, こういう機会は まずなかっただろうなぁ, ということ。
日本の自然言語処理の実質上の本場である京阪奈に来て(京阪奈がそうなのは, 結局長尾先生の影響だと思います), 関西の色々な方 と話すことができているのは, 非常に貴重な経験だと思っている。

あまり就職先等を選ぶときにそういうことを気にしている人は少ないのかも 知れないですが..。


2010年02月10日(水) [n年日記]

#1 Gnus+nnmhでMail

研究には直接関係ない話。
個人的に, メーリングリストの過去メールをまとめ読みする必要が生じた。 今でも, MLのメールを後でゆっくり読みたい等ということは結構あるのではないかと 思います。
こういう目的にはメーラーではなく, 既読/未読を管理でき, メールをスレッド表示 してくれるニュースリーダーが便利です。昔はメールを持ち帰って, GNUSでメールを 読んでいました。 (正確に言うと, 指導員室の SparcStation でMLのメールを tar+gz で固めて持ち帰った後, Macの漢字Talk7上の Mac MiNT (System7用のUnix環境)上の Nemacs 3.3.2+GNUS 4.1 で メールを読んでいました。..マニア!)

GNUSはサーバを ":Mail" のように指定すると mhspool.el (現在はnnmh.el) の機能で ~/Mail を読んでくれるという機能があり, 現在も使えるようですが, 実際に起動してみると, あるはずのメールフォルダが表示されません。 Gnusはその後 Nana Gnus やら September Gnus やら専門のマニアでないと付いて いけない世界に突入していたため見送っていたのですが, そろそろEmacsも枯れてきた ので大丈夫だと思い, 決意して設定してみました。
かなり色々壁があったので, 以下その過程のメモ。

・ ステップ1:

さて, まず, 例えば Thunderbird ではメールは ~/.thunderbird/*.default/Mail/Local Folders/ 以下にある一つの ファイルに mbox 形式でまとめられているので, それをバラす必要があります。 *1
これにはMHを使うと簡単です。MHは最近のLinuxには入っていないようなので, http://www.nets.ne.jp/~matsu/MH/ あたりから src.rpm をgetしてbuildします。 MHの inc コマンドは通常 /usr/spool/mail/`whoami` のメールボックスを読みますが, これは -file オプションで変えられるので, .mh_profile に Path: Mail 等を書いて おいてから,
% inc +foo-ml -file /tmp/FOO-ML
で ~/Mail/foo-ml/ にメールを inc してばらします。

・ ステップ2:

ここで Gnus を起動するわけですが, 実際にやってみると, 上のfoo-mlも何も表示 されません。この原因は, 昔のGNUSと異なり, 明示的にUをタイプしてディレクトリを 「講読」しないと表示されないことのようなので, Infoを読むと
(define-key ctl-x-map "g" 'gnus)
(setq nnmh-directory "~/Mail")
(setq gnus-select-method '(nnmh ""))
(setq gnus-options-subscribe ".*")
(setq gnus-options-not-subscribe "*draft*")
のように書くと, 自動的にフォルダが講読されるようです。

・ ステップ3:

これでメールフォルダを Gnus 5.9 で読めるようになったわけですが, 実際に読んでみると, 多くのGmail関係のメールの From: や Subject: が(none)と 表示されます。(!)
少し調べたところ, どうもこれは Gmail の付ける長い符号化されたsignatureヘッダ や, Received: が連続に連続を重ねると発生するらしく, どちらも読むためには不要なので, 下のようなスクリプトであっさりカット。そもそも nnmh は勝手に自分で管理用の ヘッダを付加するようなので, ヘッダを削ることは問題ないと思います。
#!/bin/env perl

while (<>)
{
    if (1 .. /^$/) {
        if (/^$/) {
            print_header($header);
        } else {
            $header .= $_;
        }
    } else {
        print;
    }
}
    
sub print_header
{
    my $buffer = "\n" . shift;
    my @header = split(/\n([A-Z][\w\d\-]*:) /, $buffer);
    shift @header;

    while (my ($label, $content) = splice(@header, 0, 2))
    {
        unless ($label =~ /signature/i || $label =~ /^received/i)
        {
            printf("%s %s\n", $label, $content);
        }
    }
}
ここまでやって, ようやくGnusでメールが読めるようになりました。万歳。
以前と比べて, じっくりメールを読むことは減ってきているように思いますが, こうしてオフラインでゆっくり読める環境も大事なように思います。


*1: Gnusのnnmboxを使うとmbox形式のファイルを直接読めますが, これは当然メールボックスを直接1つだけ指定することを想定しているので, こうした用途には向かないと思います。

2010年01月18日(月) [n年日記]

#1 ランダム生成

あまり前の仕事にこだわるつもりはないのですが, 来週NTT R&Dの偉い人へのプレゼン& NTT言語系内部コロキウム@横須賀でデモをするので, 言語モデルからランダム ウォーク生成してみました。 (実は論文にある通り, 学習の際に単語モデルからモンテカルロ法の中で生成している のですが, あまり真面目に結果を見ていなかった。)

英語の単語モデル(文字∞-gram)から生成した例。(Penn Treebank+オバマ就任演説)

sj:~/work/segment/src% ./spygen -c -n 30 ../model/obama+ptb
varied grain classistor ruminus read headof myhome eastgo smoke
her garry nexty . hunkyu stify feckless s dinnie ener stis pilepar
dottles crash gamble summon abated stoppeduzz muched the dis
おお, いかにもそれっぽいですが, ありそうで, 実際にはない単語が。 個人的には, 単純なn-gramなので, こんなに「英語らしい」単語が生成されるとは 少し意外でした。
次は「しょこたんブログ」からの生成。
sj:~/work/segment/src% ./spygen -c -n 30 ../model/shoko
リンパ きたいから 空間 もう一度 って ぉぉおおぉー 思い出せない いったし
wwwwwww 、 暖冬 とどんそく みえます ぐってた 憧れ だらーり
貼った さん 福本先生様 トリップルパイ 震える 『 覚えて ハート ホテル
(′ωω`) で 天才 メンB 飼う
言うまでもないですが, いわゆる辞書があるわけではないので, 実際に存在する単語 と一致するものがあるのは単なる偶然 (あるいは, モデルが正しく学習されていることを示すもの)です。新しい顔文字が。w

下は源氏物語からの生成(ランダム源氏物語)。

sj:~/work/segment/src% ./spygen -n 5 ../model/genji.n2
いとよう思ひしづめて、山深きこと、と思すも、なほ、いともかしこには、同じことに
て、限りある御身には、いとどしく侮らはしく思ひければ、あさましうなりたまひて、
その返り事は見せたてまつりたまへば、ことになかりし儀式、よそほしうひきつづきて、
その世の道理なれど、院の御子の方の人、 「来し方のことなど、我は 、おのづから
御覧じ知らるることもこそ、かやうの御前の花の木どもも、げにいとおもしろし。
ことごとしくもてなさせたまふ。
大将の宇治に、 「心憂く。
風のつてに見しやどの紅葉をこきまぜて、生ひ先篭れる窓の内なるほどになん。
頼もしげなきやうなりや。
こういうことができるのは生成モデルだからこそなので, 研究的にはおまけとは言え, 面白いなあ, と思います。


2010年01月09日() [n年日記]

#1 信学会誌講座

電子情報通信学会誌の今月号(2010年1月号)に, 前に書いたノンパラメトリック ベイズの講座が載りました。図を沢山入れてわかりやすく書きましたので, ご興味のある方はどうぞ。
信学会の規定でLaTeXの原稿はアップできないらしく, 学会からPDFを購入すると 見れるとのお話を久保さんから聞いたので, 後で購入してPDFを見れるようにする 予定です。

今回は第III回ですが, 第I回の久保さんの階層ベイズモデルのイントロダクションは 10月号に載っていて, 久保さんのページ でPDFが見られるようです。

僕の記事はもともとLaTeX 6ページに収めるつもりで図を2 columnに入れるように ギリギリまで圧縮して書いたのを, 1コラムに展開されてしまったので, 図が僕の意図 より若干大きくなってしまっているのが残念です。その他, 「分かる」が漢字になって いるとか, 「尤度」がひらがなになっているなども信学会の編集の結果のようです。

#2 Reviewing the Reviewers

国際会議の査読が必ずしも高品質とは限らないわけですが *1 , Ken Church が2005年に Computational Linguistics に "Reviewing the Reviewers" という4ページの記事を書いていることを知り, 読んでみました。 別にNLPに限った話ではないので, 他の分野の方が読んでも充分に面白いと思います。

基本的な主張は, よい論文を落とさない(recallを上げる)にはいくつかの方法があるが, 一番なのは Acceptance rate を上げることだ, ということ。rate が20%を割ると, 明らかに良い論文が落ちるようになるらしく, それを簡単な数値実験とともに 示しています。
面白いのは, committee の評価基準として, 「クロスバリデーション」, つまり, committee を入れ替えてみて, 同じ論文が通るかの precision と recall を測る ことができる, という話。実際にどれくらい実行できるかはわからないですが, 「真に良い論文」が埋もれている可能性があり, それを客観的に評価することができる という視点は面白いと思います。他の分野の方にもお薦めです。


*1: 今回の僕のACLの査読はかなりレベルが高くて的確な指摘が多かったですが, 後で聞いてみると, 基本的にレビューアを割り当てたのは鈴木さんらしい。 なるほどすぎる。。

#3 -

寒いなぁと思ってiPhoneの天気アプリを見たら, 精華町は7°だった。 (精華町は例えば大阪難波より常に数度低い。) 一方, ノボシビルスクは-32°Cらしい。シベリア流石すぎる。。

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