@ITの連載記事「テキストマイニングで始める実践Hadoop活用」の第2回です。この連載ではテキストマイニングを行うHadoopプログラムを作成する方法を解説することで、実際にどうHadoopを活用すればよいかをイメージしてもらうことを目的としています。第1回ではHadoopやMapReduceの概要、環境構築などを解説しています。第2回では著作権が切れた文学作品を集約したWebサイト「青空文庫」のデータを利用し学習させ、任意のテキストからそのテキストを書いた人の寿命を推定するプログラムをHadoopを使って作る方法について解説しています。
はじめはアルゴリズムについてです。テキストからbag-of-wordsと呼ばれる各単語の出現回数を表したデータ構造に変換し、著者の寿命を教師信号[1]に設定します。そして両者間の関係をうまく成立させるための関数を求めるべく、なるべく誤差(損失)が小さくなるような値を求めます。その値を求めるアルゴリズムとして「Widrow-Hoffの学習規則」を紹介しています。数式が登場して難しそうに思いますが、一つ一つの変数について説明やサンプルデータを当てはめており、イメージしやすいようになっています。重みベクトルの更新をMapReduceで分散できることの説明を行ったあと、いよいよ実装の解説に入ります。まず、作品データと寿命との対応付けを行うMapReduceプログラムを作ります。そして実行して得られた結果を重みベクトルを求めるための入力として扱います。
重みベクトルが求まると、任意のテキストを入力として与えることで寿命を推定できます。記事ではサンプル入力として一時期話題となった恋愛コラム「オムライスを食べられない女」のテキストを扱っています。プログラムを実行させたところ、コラムの著者であるエビオス嬢氏の推定寿命は「2.0285976773748837歳」となりました。記事の冒頭にあるように、「遊び程度の精度」しか出ませんでしたが、これはこれでなかなか楽しめそうです。
URL:http://www.atmarkit.co.jp/fjava/rensai4/hadoop_tm02/01.html