題名:Java Diary-53章

五郎の入り口に戻る

日付:2004/10/29

目次に戻る


Goromi-Part4(Paper and Ver0.4)

今年度の初め「今年はこんなところに論文を出したり行ったりしましょう」という目標を立てた。その中で去年デモ発表を行ったWISSに論文を出す、というものが含まれていたのである。例年論文のしめきりは8月末。さて、問題です。何をネタにしましょう。

もちろんGoromiの他にネタが有るわけではないのだが、ただVer0.2を作りましただけでは去年のデモと同じである。新たに論文として提出するからには何か新しい観点でもないと。では機能拡張をと考えるが、さて問題です。何を拡張すればいいのでしょう。

やることは山ほどあるのだが、ただバグをつぶすだけでは論文にはなるまい。となるとどうしよう。元々はVer0.3で没にした「Open Mind Datbaseとの結合」を売りにするつもりだったのだが、結果がかんばしくない以上は他の事を考えねばならぬ。

仕事の合間にちょこちょこ考える。そのうち社内である男が書いた出張報告の中で"Small world"なる言葉があるのを見つける。これはなんだ、と読んでみると「友達の友達は友達だ、とやっていくと、大抵の人に少ない友達の輪で到達するんだよ」といったものらしい。うむ。これをネタにはできまいか。例えば

「Goromiを使ってキーワードを連鎖させて行くと、犬から土星まで4クリックで到達できます」

とか。いや、何故「犬から土星」なのかと聞かれても困るけど。

などとあれこれ論文を調べていくうち、どうやったのか覚えていないがKey Graphという重要語抽出アルゴリズムに行き当たった。内容を読むうち「これは使えるかもしれない」と思い出す。今までのバージョンでは単に出現頻度の高い単語を関連語としていた。それで大過なく使えていたのだが、このKeyGraphは単語のうち、お互いよく使われる単語をグルーピングし、そこから重要語をとりだすような処理をしている。Goromiを使っていて「面白い」と感じる場面はいくつかあるが、そのうちの一つに

「この言葉ってこんないろいろな意味で使われて居るんだ」

という発見がある。Kingと入れると、そのころ公開された映画、King Arthurとかエルビス・プレスリーとか(彼の愛称がKingらしい)Kingsという名前をもつスポーツチームとか、とにかくいろいろなものがでてくる。こうした「いろんな意味に関連したキーワード」を抽出するのにこれが使えないかと思うわけだ。

と、ここまで考えたのがお盆休み前。今年のお盆休みは一週間というか9日間あるが、途中に数回仕事がはいっているので東京に戻らねばならない。よし、これを夏休みの宿題にしよう。一人暮らしだからキーボードとマウスに執拗な攻撃をかけてくる「てろりしゅと」と戦う必要もないし。

というわけで夏休み。一人アパートに閉じこもりあれこれ作り出す。前述のKeyGraph--(KeyGraphが本来行う処理のうち半分しかやっていないからだ)もとりあえず動いているようだ。これがどこで役に立ったかと言えば、Jodie Fosterである。Fosterとだけ入れるとFoster Parents関係単語がたくさんでてくる。単に単語の出現頻度だけ使うと愛するJodieがでてこないのだが、新しいアルゴリズムを使うと、Foster Parents関係は3語だけ。あとは別のカテゴリーから選ばれるから、めでたくJodieも選出される、という塩梅だ。

というわけで目に見えないところの改良はなんだかできたのだが、久しぶりに使ってみるとなおしたいところがいくつも見えてくる。まずは英語の形態素解析プログラムMonty Linguaだ。Javaから直接使えて大変ご機嫌なのだが、問題はその速度。Pythonという言語で書かれているらしいからしょうがないのかもしれないが、とにかく遅い。作っているうちに新しいバージョンがリリースされ、「2倍は早くなった」と書いてあったからそちらに入れ替えてみたが、逆に遅くなったような気がする。以前は「関連語を抽出してから各頁をダウンロード」とやっていたのだが、関連語の抽出にあまりにも時間がかかるため、各項のダウンロードを平行して行うようにした。そうすると関連語抽出をやっている間にページの内容がわらわら表示されるので多少の気休めにはなるが、結局遅い。

そのうち「英語ならもともとスペースで区切られているから、それだけ使えばいいじゃないか」と思い出す。これは確かに早い筈なのだが問題がある。例えば解析途中でDogとDogsがでてきたとする。本来ならこれらは一緒の単語と認識してほしいのだが、スペースで単に区切っただけではそれがわからないのである。MontyLinguaはこれをちゃんと処理してくれる。こういうメリットもあるから使い続けるしかないか。

しかしデバッグのために何度もプログラムを修正しては立ち上げ、ということをやっている間にぷちっと切れる。解析が遅いのはともかくとして、プログラムの立ち上げにも異常に時間がかかる。ええい、この際DogもDogsも別物でよい。というわけでMontyLinguaをバイパスするオプションをつける。するととても快適に動作する。予想通り「単に複数形になった」だけの単語が別物として認識されているが、いいや、どうせあまり厳密なプログラムじゃないんだし。

そんなことをしながらプログラムをいじっていくと「ごそっ」と直したくなる。過去にあれをくっつけ、これをつぎたし、とやってきたものだから随分とおかしなことになっている。ごろごろと直し始めるが、内部のプログラムが綺麗になったところで当面の論文書きには関係ないからあまり深入りしないようにする、と考えては観るが「ああ、こんな変な処理を」というところが目につくとどうしても直したくなる。

いや、内部など整頓している場合ではないのだ。人に見えるところを直さなくてはならない。これについてはどうやるか大分前から考えてはいたが未だに結論が出ていないのだ。

一番大きな問題は「とても面白い写真がでてきた場合に、そのページあるいは写真付近の文章を読みたいことがある。どうすればよいか」というものである。最も簡単な解法は、ブラウザを呼び出しそのページを表示されることだろう。話は簡単だがこれにはいくつも問題がある。

まず、他のブラウザを立ち上げようとすると、そのやり方はプラットフォーム依存になってしまう。ではJavaでページを表示させよう、とやるとこれが最近のWebページというのは結構ややこしいことになっているらしくきちんと表示されない。

仮にそうした問題を解消したところで、もっと大きな問題が残っている。使っているうちに気がつきだしたのだが、このプログラムの良いところは

「その場の操作で使える」

なのではないかと。なんのことかと言えば、例えばパソコンソフトを使っていると

1)メニューから○○を選択する。

2)開いた画面の△△で、XXを選ぶ。

3)OKボタンを押す

といった一連の操作にでくわす。これの何が問題かと言えば、1)〜3)までの間操作にかかりっきりになるからだ。もちろん途中でよそ見をしてもいいのだけど、パソコン画面を見たときには自分がどこまで進んでいたのか、次に何をするのか考えなくてはならない。

普通のソフトならそれで問題ないのだけど、このプログラムは

「全く役に立たないけど、横目でちらちらみるのには良い」

といったものだ。となるとそうした一連の動作を必要とするのはいかがなものでしょう。つんとつつく。結果がでる。それだけではだめなのでしょうか。

などと考えていると「自縄自縛」という言葉が頭をかすめてくる。どうしてそう思えるか。さっきのブラウザの話に戻ろう。実現するとたぶんこんな操作になる。

1)画面上に現れた画像をクリックする

2)別画面にWebページが表示される。

3)ひとしきり読むと画面の上にある小さな○(もしくは□)をクリックして、閉じる。

これはまさしく一連の動作であり、なんだか避けたい。ではどうすればいいか?答えはなかなか出ない。表示するべきデータはそろっているのだが、表示の仕方が解らない。

そうこう考えている内に、左側に表示されている「要約の要約」が気になり出す。現在の使い方ではこれはほとんど役に立っていないのだ。どうすればいいだろう。例えば左の要約をクリックすると、そこに写真が表示されるとか。いや、このスペースではそれはやりづらい。

などと考えたあげく一番簡単な方法に立ち戻った。ページの「要約の要約」を表示するのを止め、ページの題名だけを表示、その下にそのページにある写真を表示するやり方である。これだと今までばらばらに表示していた写真も有る程度まとまりができ、かつページのタイトルを観ればそこそこ説明の文章にもなっている。

最初は、之にくわえ、さらに写真付近の文章を表示しようと考えていたが、できてみるとこれで十分だ。検索用のキーワードは今まで中央に表示していたが、左側に表示する内容が増え、右側が空いたため、少し右寄りに表示することにする。

などと内部をいじっているとまたもや「画像がちゃんと表示されない」とか「スクロールがおかしい」とかいう問題に突き当たる。やっていることはこれ以上ない位単純なのに、やっぱり私の頭はとても粗雑にできており、プログラム作るのに向かないのだろうか、などとしばらく落ち込み、昼寝をして復活する。

などとやっている間に表示はできるようになった。と、今度はキーワードの選び方が気になってくる。例えば複数のキーワードを選ぼうと思うと、

・あるキーワードの上でマウスを押し

・しばらく押しっぱなしにして

・押したまま別のキーワードの上で離す

という操作を行わなくてはならない。例の自縄自縛からすればこれも「一連の操作」だし、だいたいこの方法で3個以上のキーワードをどのように選んだらいいかもわからない。もっと

「ぽん ぽん ぽん」

と選べるようにならぬものか。

そう考え出すとしばらく逡巡する。構想は立ったがこれでうまく動くかどうか解らないし、実現の為にはプログラムの中身を大幅に変更する必要がある。しかし前のバージョンのプログラムを読めば読むほど変なことをやっている。ここは一発どかんと直してしまうべきではなかろうか。

そう思い切ると、プログラムの複製を作る。破綻したときに前のバージョンに戻れるようにだ。そしてごりごりと書き出す。なんとか(細かいところに目をつぶれば)動き出したのは夏休みが終わる前日だった。

というわけで晴れて(かどうか知らないが)提出する物のネタはできた。あとは論文にするだけだ、ということでごそごそ書き出す。4頁と言えばそれほど長くも無いはずなのだが、何故か書いても書いてもたくさん余白が存在している。これってどんな書き方すべきかな、、と思い前年の論文を観るとまたぱたんと閉じる。観客として聞いている時は「ふーん」とだけ思っていた論文だが、こうして自分が書く立場になると「をを、こんな裏付けデータまで」ということに気がつく。おまけに冒頭採択率がおよそ50%だったと書いてある。半分落ちるのなら私は間違いなく落ちる方に入るに違いない。しかしここまで書いてしまったし作ってしまったのだから今は進むしかない、と自分に言い聞かせる。

締め切り間際になり投稿サイトがオープンする。それを観るとまたもやデモムービーが投稿できるようだ。前に作ったのでお茶を濁そうかとも思うが、あれは英語バージョンだし、そのままというのはいくらなんでも横着。というわけで日本語解説入のを作り出す。ちゃんとした機材があれば美しいムービーができるのだろうけど、私にできるのは小さなデジカメを手に持ち、息を止め画面を写し続けることだけである。

というわけで締め切り前に無事投稿できた。後は野となれ山となれ。どうせ期限が過ぎてしまった以上は心配しようが何しようができることはない。などと開き直っているうちに、別のイベントが迫ってきた。

前の章 | 次の章


注釈