2004-07-22 Thu
* svm_struct [r]
半分も理解できない論文のネタ、その二。
I. Tsochantaridis, T. Hofmann, T. Joachims, Y. Altun,
"Support Vector Machine Learning for Interdependent and
Structured Output Spaces", ICML2004.
http://www.cs.brown.edu/~th/papers/TsoHofJoaAlt-ICML2004.pdf
理論はさっぱりわからないが、この論文を基にしている svm_struct とい
うパッケージが、Thorsten Joachims のページからダウンロードできる。
http://www.cs.cornell.edu/People/tj/svm_light/svm_struct.html
実験のところで、NER や Parsing にも適用していて、面白そうだったか
ら試してみたくなった。struct_hmm や struct_pcfg は coming soon だっ
たけど、配列アラインメント(懐かしい…) svm_align はダウンロードで
きる。
http://www8.cs.cornell.edu/~paz3/svm_align/
svm_struct は、関数のインターフェースを提供しているだけで、
svm_align で、具現化するという関係になっている。
動かしてみることができれば、実現方法を調べてみることで、理論がわか
らなくても、すこしはイメージがつかめるとっかかりになるかな…と思い、
試行錯誤してみた。が、激しく、敗北。(ま、expected outcome ですが。)
簡単な敗北ログを。
# コンパイルができない!
+ svm_struct の方のパッケージに svm-light が含まれているが、 QP
solver を使うのではなく、svm_align は、 PR_LOQO optimizer を使って
いる。インストールのやりかたは、
svm_light
のページに注意書きがある。
+ Makefile や #include のところで、 svm-light と svm_light という
2つの書き方が混在していている。要チェック。
+ svm_align をコンパイルするときは、bin と tmp というディレクトリ
をあらかじめ用意する必要がある。src に svm_struct のコードと、
svm_align.tar.gz から svm_struct_api.c, svm_struct_api_types.h,
svm_struct_classify.c を用意する。
+ コンパイル中にも警告がいろいろでる。(不安度向上へ抜群の効果あり)
+ 実は、svm_struct_api.c, svm_struct_api_types.h で関数のインター
フェースと実装が矛盾している箇所がある。
# segmentation fault になる!
$ ./svm_struct_learn ../example.data ../example.mdl
Reading training examples...done
セグメンテーション違反です
私だけの幻想か…。ここで、ハッキングする根性がなかった…。機械学習
への愛も足りないだろうし、日頃の行ないも悪いからか。
もっと修行しないとダメですね…。
2004-07-21 Wed
* 勉強会 [o]
担当。半分も理解できない論文を選んで、だめだめな説明をした。
体内の熱も、部屋の温度も上がってきて、泥沼にどっぷり。耐久レース。
ごめんなさい。> 出席された方々
教訓 - 熱があるときに、ミーティング類は禁物。他人に迷惑がかかる。
ちなみに、紹介した論文は↓。"Factored *" の章は、全滅。
http://robotics.stanford.edu/~btaskar/pubs/mmcfg.ps
2004-07-20 Tue
* GIZA++ [r]
世の中の statistical MT と word alignment model とはどんなものなの
かを調べたいんだが、いまいち結果の解釈ができない。
ALIGNMENT FILE (*.A3.final) という結果ファイルの一部を眺めて、学習
中の Viterbi alignment がどうなっているか観察しているのだが、なん
だか、信じられないぐらい性能が悪いように思う。謎。
2004-07-19 Mon
* 重文と複文 [r]
555 文ほど、因果関係の構文ファイルがあったので、眺めてみる。
和英辞典から抜き出した文だからか、不自然な英訳が散見された。
# 忠実な訳というのとは違う。おさまりが悪い英文。
熱で意識が半分とんでいたけど…複文の主節(核)と従属節(衛星)だってひっ
くり返して訳しても通じるじゃないか疑惑発生。頭から訳出する方法とか、
通訳訓練でやるスラッシュリーディング、とかは、談話レベルでの節の関
係を無視しているんじゃないかなぁ。と、とりとめもないことで時間切れ。
アラインメントには、重文か複文か単文かという分類や他の意味的な分類
をバイパスする方法が存在するかも、とか思ったり。
2004-07-18 Sun
* 喉がいたい [l]
一ヶ月前と同じ症状に苦しむ。(ref.[2004-06-02])
何もしなくても、ただただ、喉がいたい。そのうち、声がでなくなった。
きつい。。。集中できなくて、仕事は溜る一方。××な週末だ。
2004-07-16 Fri
* 雑談ミーティング [r]
とてもお疲れの奥村先生と、雑談ミーティング。
悩みつづけていた、今年度の私のCREST関連研究のオチについて、どの辺
りに設定すればよいか、という疑問が解消した。CREST プロジェクトや奥
村先生から期待されていること、が明確になった。向かう方向が分かった
のが、最大の成果。よかった。一安心。
以下、将来の私へのメモ。
- 重文と複文の訳し分け(言い換え)についてつながる研究であって欲しい。
- 研究の出発点は CREST 生データからで良い。
CREST 以外のデータ(web からもってきたデータ)も利用してよい。
例の語彙体系を拡張したパターンファイルに限定されなくてもよい。
このデータは、評価用として利用して、いろいろ考察をする方が嬉しい。
- 研究は、分野できちんと評価されるものに仕上げるようにする。
CREST チーム内でしか通用しない発想や方法論は、むしろ、好まない。
- 夏休みの宿題は、例の妄想ネタで良いみたい。
2004-07-15 Thu
* JBI [r]
Special Issue の guest editor から、of publishable quality だ、と
連絡がくる。多分、これで、採録。手続きとしては、これから、JBI の
editors による査定があるらしい。ふーん。
十数ページにもおよぶ査読コメントを直したのが評価されたのか?こっち
も一週間ぶっ通しで直したから疲れたけど、editors も読むのに疲れたみ
たい。今回の直しは、私のお粗末な冠詞の言語モデル周り。"a" と削れ、
"the" を入れろ、という指示が 80 % 以上だった。違う神経を使って、妙
に疲れた。Viterbi algorithm の前には "the" を入れて、Double Array
の前には "a" にして、"F-measure" の前は "an" っていう。すっかり混乱。
アメリカ語では、"envisage" を "envision" というらしい。へぇ〜。
2004-07-14 Wed
* 通訳学校 [t]
イラク情勢。リアルタイム英日変換をひたすらする。ぐったり。いらくト
クソ法の成立過程はもう知りたくない。飽きた。師曰く、私は、
「パフォーマンス力がない」らしい。内容解析、変換、生成もきちっとで
きるのに、と注意されてもね…そんなん言われても…研究でも、プレゼン
ヘタレですからね…私は。
* 勉強会 [o]
高村さんが要約タスクで使われた tree-position kernel というものを紹
介してくれる。http://www.isi.edu/~hdaume/publications.html
要約の背景がよくわからんから、適用したのが偉いのかもしれない。
http://www.isi.edu/~hdaume/SVMsequel/
ただ、カーネルは、基本的に、木のパス(系列)の集まりとみて、ストリ
ングカーネルの考え方をそのまま適用する、みたい。技術的に新しいとこ
ろはない、と、高村さんがコメントしてくれる。確かに、カーネルのエッ
センスは、これと同じ。
http://www-2.cs.cmu.edu/Groups/NIPS/NIPS2002/NIPS2002preproceedings/papers/submitted/AA11-draft.pdf
* Google API [l]
実は、はじめて、だったりする(恥)。
手始めに、アカウント作成して、ツールをダウンロードする。
Java にも C# も Perl もペラペラにしゃべれないから、Ruby でアクセス
できそうなRuby/Googleで代用することに。
Ruby 1.8.1 では、uconvとdevel-loggerとsoap4rが必要らしく、インストールする。
とりあえず、サンプルは動いた。めでたし。
あとは、transliteration の一覧が掲載されていそうなページを検索する
ためのクエリーを考えないと。(ref. [2004-07-12]) そう言えば、NTT の
どこか研の永田さんが、その昔、かの地(ふらんす)で、こういうページ
を partially bilingual text と呼んで、専門用語の対を抽出できた、と
かいう報告をしていたような気がする。
# うぎゃ。現実逃避をしている場合ではないぞ。
2004-07-12 Mon
* ゼミ1日目 [o]
あべかわさんのおまけネタを聞いて、これで、英語とカタカナのペア
(transliteration) が、表記の揺らぎも含めて、大量の抽出できるように
なるかも、と思う。そうすると、ごちゃまぜ文の形態素解析の辞書に使え
るかも。という訳で、しばらく、妄想プロセスが走った。
帰宅して、少し冷静に現況をみつめる。
まずは、Google API の使い方とか知らないから、調べないと。という口
実をみつけて、またまた、ウェブ散策。世の中の web 関連の技術ってす
ごい。勢いが。追うだけで、体力いるなぁー。
1000 件のリミットがあるし、英語とカタカナ表記の一覧がありそうな
web ページを検索してくれそうなクエリを考えないとまずそう。なにより、
奥村研の web 組の研究の邪魔をしてはまずい、といろいろ注意が必要。
2004-07-06 Tue
* 部分木マイニング [r]
2 年越しの課題だったけど、やっと、部分木マイニングに挑戦しはじめる。
とりあえず、依存解析木を対象としたいから、兄弟関係は考慮するが順序
は考慮しない unordered 部分木マイニング。
http://www.i.kyushu-u.ac.jp/doitr/trcs216.pdf
http://www.cs.ucla.edu/~ychi/publication/cmtreeminer_pakdd04.pdf
まだ具体的なイメージわかないんだが、なんとなく、分かったこと。
- equivalence class を定義するために、cannonical form を導入する
-- depth-first cannonical form が rooted (un)?ordered (maximal|closed)? subtree mining の標準的なデータ構造みたい。ポイントは、最右拡張。
-- breadth-first cannonical form にすると、free tree マイニングへの拡張が比較的容易にできるらしい。
- maximal と closed の違い
基本的には、「姉--妹」関係と「先祖--子孫」関係の両方がマイニングで
きるようになるのだが、どっちの関係が結果を左右してしまうのかな?
1960-80 年代のコンパイラの研究成果に多謝。ドラゴンブック最強。
2004-07-05 Mon
* リハビリ明けなのに、いきなりスランプ [r]
候補パターンを系列マイニングでのネタが、なかなか軌道にのらない。
私の BIDE の実装がヘタレだから、マイニングに一週間かかっている。
sequence database のサイズが 127,813 で、100 回以上出現したもの(
データマイニングコミュニティでいうところの minsup 0.0776 % ) を対
象にしているから、そもそも無茶なのかも。どちらかというと、sparse
な sequence database だと思うけど、その基準はよくわからんし。むぅー。
とりあえず、374 文しかない小さな The Happy Prince で精度を計算する。
ちなみに、ここでいう精度は、抽出されたものが分母で正解と人手で判断
したものが分子。unannotated & unsupervised な設定だから、正解コー
パスがない。リコールを測定するのは、無理。
最低出現回数 は 2 で設定。結果はイマイチ。BIDEの精度 は、
118/207 で 57% 。PrefixSpanの精度 は、121/271 で、45% 。目視
のレベルだけど、BIDEの抽出結果 と PrefixSpanの抽出結果 を
比べると、BIDE の方が、同点スコアによる誤り対応が少なくなって、
それなりに、順序よく抽出してくれてると思うが。たいしたことない。
部分木も試しておきたいな…。実装から始めないと…。時間あるのか?
# で、CREST の研究、どうしよう。アラインメントは、いつするんだ?
# 棚上げした cocab はどうすんの? 制約、タグとばし、ごちゃまぜ、多言語…
# … … … 山積み。激しく、落ち込む。つぶれそう。こげまくり。
2004-07-03 Sat
* 時事英語 [t]
イラク関連の用語集が RNN 時事英語辞典(http://www.rnnnews.jp/)に掲
載されていた。宿題(ref. [2004-06-30])になっている、自衛隊イラク派
遣もまとまっている。http://rnnnews.jp/indepth/pg/view.php?ch=023
これから、覚えないと。
2004-07-01 Thu
* cpp [p]
今日、はじめて、priority_queue の使い方がわかった。コンテナに格納
しながら、逐次に優先度順にソートしてくれるらしい。便利。
まず、priority_queue に入れたい要素オブジェクト(構造体)を定義する。
struct result {
double score;
unsigned int j;
unsigned int e;
friend bool operator<( const result& r1, const result& r2 )
{
return ( r1.score < r2.score );
};
friend std::ostream& operator<<( std::ostream& os, const result& r ) {
os << r.score << "\t" << r.j << "\t" << r.e;
return os;
};
};
struct result r1;
r1.score = 1.5;
r1.j = 1;
r1.e = 5;
struct result r2;
r2.score = 2.3;
r2.j = 2;
r2.e = 3;
ここで、operator< と operator<< を friend にしておく。
(奥義を理解していないので、ほとんど、おまじない)
で、 priority_queue の宣言。先ほどの struct result がコンテナの要
素オブジェクト。最後の引数の二項述語の終りに () が付かないのに注意。
よくわからんが、これで型を指定していることになるらしい。
(yet another おまじない。)
std::priority_queue< result, std::vector< result >, std::less< result > > pq;
pq.push( r1 );
pq.push( r2 );
while ( ! pq.empty() ) {
std::cout << pq.top() << std::endl;
pq.pop();
}
出力はこんな感じ。優先度が高い方から(score in a descending order)
で出力される。
2.3 2 3
1.5 1 5
ラティスのパスの N-best candidates を出力したいなと思っていたが、
priority_queue がわからず停滞していた。今回、ポイントが分かったの
で、自分でも実装できそう。
* 要するに、研究しろ、らしい。 [o]
高村さんから、2日連続で、軽〜いジャブ(注釈:奥村研で日常的に使わ
れる間接発話)攻撃。もう、免罪符、使い果たしちゃったしね。めげそー。
# また、日記に書かれるよ、って奥村先生がおっしゃっていたので、
# ご期待にそうように、書きました。