大規模テキストデータ処理の行き着く先

朝7時半ごろ外を歩いていたら日差しが強い。もう夏が近いってことかなぁ。まだ8時前なのに宿舎周辺は幼稚園(保育園?)に行く子どもたちがたくさんいてびっくり。みんな早い。というかこれまでこんな時間にここ通ったことなかったかも。

NLP.app 勉強会では

という論文を紹介。単語クラスタリングというはの、どの単語とどの単語は同じグループか、というのを決める手法のことなのだが、これを大規模データでも(MapReduce を用いて分散処理することで)使えるようにしました、という話。具体的には Exchange Clustering (Kneser and Ney, 1993; Martin at al., 1998) というクラスタリングアルゴリズムがあるのだが、これにちょっと手を加えて高速に動くようにする、というもの。

実は exchange algorithm の高速化については @hillbigくんが

にて(1)サンプリングを導入することと(2)初期の計算に時間がかかるので初期化を工夫することの2点で高速化を図る提案をしており、やりたいことは同じようなこと(大規模データを高速にクラスタリングしたい)かなと思う。彼の話の MapReduce 版という見方もできよう。

いろいろ MapReduce (Hadoop) が自然言語処理に応用できる場面はあるのだが、「これだけがんばってこんな少ししか上がらないのか」と言われるのは(少しがっくりくるが)ある意味正しい。大規模データが活きてくるは意味解析や文脈解析の領域であり、たとえば日本語の格解析なんかはデータを1.6MBから1.6GBにすると精度が5割から8割に上がるし、省略解析も2割から4割に上がるし、まだまだ先がある。1TB 使って0.5%上がりますよ、というせちがらい話ではない(数字の出典は情報処理2010年5月号の長尾先生の記事)。ただし、これらの述語と項のペアはひたすらデータを集めてもまだスカスカなので、もっともっと膨大に収集しないとデータだけから推論するのは難しいのである(データ以外の知識と組み合わせてできるとよいのだけど)。

Hadoop を用いた実習は yasuhiro-r くんに手伝ってもらって1/4コンプリート。自分はシェルスクリプターなので数字の集計には awk とか bc 使ったりするのだが、みなさんは思い思いのプログラミング言語使ってくださればいいのではないかと。プログラミングはできそうだったのであまり心配していなかったのだが、Unix を日常的に使っていない人にとってはターミナルを開いてコマンド打ち込むのも大変なんだなぁ、ということを学ぶ。プログラミングは難しくないのだが、ディレクトリを移動してコンパイルして、みたいなところが大変みたい。簡単に終わると言って申し訳ない。

はてさて、大規模データを扱うとは言っているが、まだ松本研でそんなに大規模データをロードしたりしていないので、次回の勉強会までに用意しておかないと……。