stackoverflow の上にも三年

午前中は保育園の「おたのしみ会」だそうで、たまたまミーティングがなかったので出てみる。とはいえ、午後からは勉強会があるので、出し物を見るだけだけど。いつもと違うと子どもが興奮してしまうので、いつもと同じ時間に保育園に連れてきて、10時半に改めて来てください、というので、一度車で娘を送り出し、自転車で出直し。手が込んでいる……。

娘が通う保育園は異年齢保育なので、いつ行っても少し大きなお姉ちゃんお兄ちゃん(といっても1歳数ヶ月ですら「お姉ちゃん」っぽく面倒を見てくれる)が娘を囲んでわいわいしていて、楽しく過ごしている。一人っ子だとどうしても面倒を見たり見られたりする機会がないし、保育園でこうやって過ごせるのはありがたいことである(保育者がベテランでないと難しいだろうが、娘の通う保育園はベテランばかり)。「面倒を見る」というのは実はものすごく貴重な体験で、やっていることは大したことをしていないように見えても、ものすごく学ぶことが多いのである。

大学の研究室も、いろんな年齢の人が混在して、教えたり教わったり、同期で刺激し合ったり、学生たち同士で切磋琢磨するほうが、教員が教えるよりはるかによい経験になる。自分も学生に教えるのが仕事だとは思っておらず、学生から教えてもらう(どれくらい教えるのが下手でも、根気強く付き合う)のが仕事だと思っているので、大学ではそういう環境を用意したい。(高校や予備校、塾までの経験だと、教わるのが大学・大学院だと思いがちだが、そうではない)

午後は SICP(プログラミングの基礎)勉強会。データの抽象化のお話。自分が SICP を初めてやってよかったなと思ったのは、それまで「なんでこういうふうにプログラムを書かないといけないの?」と思いながら写経するように書いていたことが、実は他の書き方・実現方法があって、しかも場合(処理系)によってはそちらが採用されていたりする、みたいな実例をたくさん知ることができたことである。場合によって適切なアルゴリズムやデータ構造を選択することができるようになった、ということだろうか。

研究をするに当たっては遠回りに見えるかもしれないが、このあたりをやっておかないと後で問題に当たったとき自分で解決できなかったりするし、意外と抜けている知識が多いので、来年度以降も新入生にはやってもらったほうがよいように思った(うちの研究室は分野外から来る人も多いし)。

夕方は学生のプログラミングのお手伝い。

1件目は、Travatar という機械翻訳のプログラムのコンパイルができない、という相談。結局は Boost という C++ のライブラリのバージョンに起因するバグだったのだが、ここでもコンパイル時のエラーメッセージをそのまま Google に入れて検索すれば原因と対応策が見つかる(最近はだいたい英語の stackoverflow というサイトが引っかかる。日本語版も12月からサービスが始まったらしいが、情報量が違いすぎるので、どう考えても英語版を見た方がいいと思う)し、基本的なトラブルシュートの仕方があまり学生間で共有されていないようだ。自分もこのあたりのスキルを身につけるには3年くらいかかった気がするので、いきなりは難しいだろうが、研究室ができて3年もすれば、自力(学生間)で解決できるようになるかなぁ。

2件目は固有表現認識の基本的なデータセットである CRL(現在の NICT)データセットの抽出に関する相談。データ自身は文書ID何番の何文字目から何文字目までがこのタグ、という形式(オフセット形式と呼ばれる)で格納されていて、別途購入している毎日新聞のテキストにタグ情報を統合したいのだが、そのプログラムがコンパイルできない、という問題(先週解決)と、プログラムは動作しているように見えるがデータが変、という問題(今週ずっと取り組んでいる)。

最初は文字コードの問題かと思って、JPerl で書かれているプログラムを最近の Perl で動くように

use encoding "euc-jp";

などと入れてもらっていたのだが、それで問題なくデータができている文書もあれば、どうも文書の途中のあるところから先がおかしい文書があるようだ。

おかしいな、と思って、文書の先頭から一文字ずつ先頭から何文字目、というのを表示させ、タグの情報と横に並べて見てみると、確かに途中からずれるようで、どうも新聞記事テキスト側の文字数が多いことが分かる。Perl のソースを見ると、ルビを除去したり記号を除去したりしているので、どうも正規表現による除去が正しく動いていないようである。

ここまで分かると(1日1時間弱ずつ見ていたから1週間かかったが)あとは簡単で、マッチしない正規表現と対応する行をにらむと、どうも行末の処理があやしかったので、テキスト側の改行コードを Unix (LF)に揃えたところ、問題解決。どうもときどき Windows の改行コード(CR+LF)がデータに混じっているようだ……。

分かってみると単純だが、自然言語処理のデータは20年前に作られたものも珍しくないし、このあたりのノウハウはどこかにまとまっていないと、分野外の人や新規に立ち上げた研究室では往生して(そういうデータを用いた研究ができなくなって)しまいそうな気がする。こういうのこそ、誰かがパッチを公開したり、本家で対応してもらったりすればいいんだろうけど……(教員が書くより実際にやった学生が書いた方がいいと思うので、みなさんじゃんじゃんブログとか Twitter とか Gist とかに書いてね!)