エラーが出たらまずググれ

昨日は娘が昼から様子がおかしかったようで、夕方に小児クリニックに行ったところ、RSウイルス陽性だったそうだ。数パーセントではあるが重症化すると入院することになるそうだし、知り合いにもRSウイルスで子どもが入院したという人が両手で数えるほどはいるので、ちょっと心配。

ただ、つきっきりで看病して夫婦両方がダウンするとまずい、ということで、午前1時までは妻、それからあとは自分、という分担にする。いつもは夜は1-2回ミルクで起きるだけで、ミルクを飲ませたらすぐ寝るのだが、今日はミルクも飲まなければ、ずっと抱っこしていないと夜中でもギャン泣きで、布団に置いた瞬間火がついたように泣き始める。身体がしんどいのか、一人にされると不安なのだろう。

結局3-4時間ずっと両手で抱いていたのだが、午前5時ごろなんとか寝てくれたので、さすがにそろそろ準備せねば、と思って金曜日(翌日)のセミナーの講義資料の作成に取りかかる。これくらい直前にならないとできないくらい、時間のスケジューリングに困っているのだが、年度末に向けてどんどんタスクが溜まっていき、帳尻が合うのは卒論が終わったあとだろうな……。

熱は最高38.8度まで上がったが、朝は36.9度まで下がり、少し安心。念のため小児クリニックにもう一度連れていき、気管支を広げる薬を吸入する。妻は出勤日なので、自分が娘を家まで連れて帰り、昼間の面倒は母に頼んで自分も出勤。

研究室では論文紹介を先に始めてもらっており、以下の論文を紹介してくれていた。

  • Haitong Yang and Chengqing Zong. Multi-Predicate Semantic Role Labeling. EMNLP 2014.

1文に複数の述語が含まれる場合に、全体の項の割り当てを同時に考慮して意味役割を決める、という研究で、英語と中国語を対象に実験し、程度の差はあれいずれも効果があったという内容。

これまでは、1つの述語について、その述語の項を同時に推定する、という研究はあったのだが、複数の述語を同時に対象にしていなかったのだ。複数の述語で項の相関関係があるだろうから、同時推定すると性能が向上するだろうとは思うのだが、懸念点は大きく分けて2つあり、計算量的な問題と、あとはそもそも複数の述語が1文に含まれる事例が少ないので、思ったように性能が向上しないのでは、という問題があった。この論文の評価できるポイントは後者で、事例数をちゃんと出し、性能が向上することを定量的に検証しているところだと思う。

このネタは自分もずっとやりたい内容だった(昨年度、まさにこの内容を研究テーマとしていた学生もいるが、実装力的な問題でテーマを変更せざるを得なかった。)ので、惜しい気持ちもあるが、結果も納得。あとやるべきは事態性名詞と動詞の項構造の同時解析だと思うのだが、こちらは誰かやりたい人いないかなぁ……。(上記の研究、明示的には書かれていないが、事態性名詞は述語として扱われていないようだ)

昼からコース会議。審議事項がいろいろあり、2時間半ほどかかる(自分も2つ審議事項を挙げた)。数字をいじるのは苦手なので、引き継いだExcelファイルと格闘すること10時間以上なのだが、それでもまだ間違いがあったりして、しんどい……。Word はまだしも、Excel ファイルは触らなくていいようになりたい。

コース会議終了後、学内の委員関係のお仕事でコース長と打ち合わせ。内規で決まっていればいいのだけど、イレギュラーな案件は個別に議論しないといけないし、内規も、どこかにまとまっていればいいのだが、各教員がそれぞれ保存しているだけなので、着任以前に決まった内規は、教えてもらわないと知る由もない。教員の流動性が低い前提でこのようなシステムになっているのだろうが、内規はもう少し整理して(途中から来た人でもすぐ分かるようにして)ほしいと思う。

夕方は Spark 演習の問題作成のお手伝い。TA には「Apache Spark を使って1時間程度の演習問題を作ってほしい」というお題だけ出して、あとはなにも注文をつけなかったのだが、結局単語カウントになった。単語カウントは全く頭を使うところはなく、tf.idf の計算くらいになると少しは頭を使う(たとえば素直に書くと全データを2回なめないといけないが、1回だけ見ればよいアルゴリズムがある)のだが、演習問題以前に単語カウントですらちゃんと動作させられていなかったので、それどころではない。

(並列数を変化させて処理速度の違いを比較する演習にしたかったのに、並列数の指定方法が分からないという問題もあったが)一番の問題は、受講希望者には「Java の動作する環境であれば何でもよい」と伝えてあったのだが、Mac だと動作するのに Windows で動作させるとエラーになり、デバッグに付き合ったのである。

結局分かってみると、Windows 環境では Unix コマンド群がないので、winutil.exe というプログラムを入れる必要があった、ということなのだが、どうもエラーが出たとき、調べる方法が分からないようである(周囲に相談するのが一番だと思うけど……)。

エラーが出たら基本的にエラーメッセージそのまま Google に突っ込めば、大体答えが出てくるのだが、確かにそういうことは誰かに習ったりはしていない気もする(自分も fj かどこかで読んだような?)。このサブタスクとしては、どれが適切なエラーメッセージなのか判断する、というものもあるのだが、エラーと警告(warning)の区別がつかず、「とにかく大量になにか出てきてよく分からない」というところで完全に思考停止する人も少なくない。大体は、最初か最後に問題が出力されていて、ちゃんと error と書かれているので、その部分数行だけ切り取って検索エンジンに入れてみるとよい。(エラーメッセージの冒頭までちゃんとスクロールできないなら、エラーメッセージをファイルに書き出すようにして、ファイルの先頭を head なり less なりで表示する)

もちろん、ほとんどの場合結果は英語なので、英語で書かれたページを20個くらい読まないといけない(必ずしもトップの結果に答えが書かれているわけではなく、数十個読んでようやく解決策が分かることも往々にしてある)ので、英語を見たら引き返す人や、上位数件を見ただけで引き返す人は、やっぱりトラブルシュートできないが……。