ある分野の研究者となるために
先日のJUMAN/KNPのラッパーの話の続き。
この前書いたjumanknp.rbはLinuxで書いたのだが、あれをWindowsに持って行ったときに思いがけない罠に嵌った。
Threadから立ち上げたjuman -Sと通信をするとなぜか、
みたいな感じで返ってくる。ちなみに期待するのはこんな感じ。
金閣寺 きんかくじ 金閣寺 名詞 6 組織名 6 * 0 * 0 "代表表記:金閣寺/きんかくじ"
に に に 助詞 9 格助詞 1 * 0 * 0 "連語"
ついて ついて つく 動詞 2 * 0 子音動詞カ行 2 タ系連用テ形 14 "連語"
。 。 。 特殊 1 句点 1 * 0 * 0 NIL
EOS
試しに別のプロンプトを立ち上げて、juman -C localhost:32000から文を送信してやると、これは正しく解析する。rubyからTCP/IPで通信をするとうまくいかない。
この現象を調べているうちにわかったことは、
- JUMANは入力はSJISを期待しているが、どうもStringがrubyからASCIIになって送信されてるっぽい
- rubyの中でString.force_encode("Shift_JIS")とかしても効果がない
- もちろんcoding Shift_JISとかcoding Windows-31Jとかruby -Ksとかも試したけど意味ない
- Windows版RubyのTCP/IPの実装に怪しげなところがある
ということ。Linux版のTCP/IP実装ではEUCのStringを投げるとEUCのStringが飛ぶけど(ruby 1.8系と1.9系で文字コードの扱いが変わっているがそのあたりは割愛)、Windows版の実装では全部強制的にASCIIになってしまうっぽい。なんじゃそりゃ。
とりあえずこの問題の解決策としては、
あたりしか思いつかないけどどっちも辛い…
後者はもしかしたら、元々EUCの実装をWindows実装で表だけSJISに切り替えてる可能性があるので、そうならぱっとできるかもしれないけど、河原(大)先生に聞くべきかなー
今なんでこんなことをやってるかというと、僕の研究は対話システムの動的な応答生成と分野適応なのだが、河原先生に、「ある分野の研究者となるためには、その分野の周辺技術は一通り実装までやってみるべき」と言われ、なるほどと思ったというのがある。
例えば、音声認識の研究をするのであれば、専門が音響モデルであろうと言語モデルであろうと、既存のものを使うだけでなくて、どちらのモデルも自前で作ってみるようなことを、博士の間にするべき、というのが先生の教えなのだが、確かに研究をやってる以上、ここはあれに依存しています、そっちはどこどこに依存しています、というのはよくない。言語処理研究者は言語処理のパーザを一から書くべき、とまでは言わないけど、少なくとも、メジャーなパーザのコードを読んで、自分でモデルを作れる、というところまでは、博士を出るつもりである以上はやらないといけないと思う。
そんなわけで、対話システムの研究をやるのであれば、言語処理的なパーザに対する理解も必要だし、音声認識の言語モデルによる分野適応もできないといけないし、応答の音声合成に対する造詣も、あった方がいい。対話システム自体広い分野にまたがる複合テーマなので、やるべきことも多いが、少なくとも各要素技術に対する理解と、それらの制御は自前できちんとできるようにしないとなあ。