Mahoutって何?
本題に入る前にまず宣伝を。データベースエンジニアの祭典「db tech showcase」が、この春(5月29日~31日)、いよいよ大阪でも開催されます!参加したいが東京は遠い、と思っていた関西のDBエンジニアの皆様、ぜひこの機会を逃さずご参加ください! 私も登壇します! 詳細は弊社Webサイトよりご確認ください。
さて、これまではHadoopの基本機能であるMapReduceフレームワークのみを使ってツイートの分析を行ってきました。具体的にはツイートを単語ごとに区切り(形態素解析をし)、区切った単語や使われているハッシュタグを数え、件数を降順で並べてランキングしました。これだけでも、分析した時期におけるツイートの傾向が何となくわかり、ふむふむといった気分になることができます。
でも、これだけではちょっと物足りないですよね。何せ世間では「ビッグデータ」が花盛り。「○○を分析することで売上高が急上昇!」といった話の裏側が、単に件数を数えていました、であることはほとんどないでしょう。データの整形・集計を行った先にどんな知見を得ることができるのか。そのための武器となるのが、今回使ってみるMahout(マハウトと読みます)です。
Mahoutを一言で説明すると、「機械学習のアルゴリズムが詰まったJavaのライブラリ」です。とはいっても、「で、機械学習ってなに?」という疑問がすぐにわくことでしょう。では機械学習とは、なんて話を始めると、本題(Twitterの内容を分析する!)からどんどんずれていってしまうので、主な「Mahoutでできること」をざっくりと紹介しましょう。
Mahoutで出来ることは大きく分けて3つあります。まず一つ目は「レコメンド」。これはある一つのもの(商品など)を選ぶと、そのものと性質が似ている別のものを選び出してくれる機能です。Amazonなどのネットショッピングにある「おすすめ」機能としておなじみですね。
二つ目は「クラスタリング」と呼ばれる機能です。これは、多数のものの集まりを、それぞれが持つ様々な特徴を元にグループ分けする機能です。クラスタリングを使うと、雑多なものの集まりで、一見してどのようにグループ分けして良いのかわからないような集合をうまくグループ分けすることができます。
三つ目は「クラシフィケーション」という機能です。これは事前にサンプルとなるもののグループ分けを行いそのグループの特徴を整理しておき、次にグループ分けが不明なものがやってきた際に、その特徴からどのグループに所属するのかを判定する機能です。メールサーバのスパムフィルタなどに使われています。あらかじめスパムメールの特徴を学習しておき、新たなメールがスパムかどうかを判断するという仕組みですね。
さて、ここまでHadoopの話が一切出てきていませんが、MahoutとHadoopとの関係はどのようになっているのでしょうか。Mahoutは元々、Apache Luceneというテキスト全文検索エンジンを作成するプロジェクトで生まれたものです。Luceneの成果の中で、機械学習に関するものがMahoutというサブプロジェクトとして分離し、それがApacheのトップレベルプロジェクトに昇格しました。一方、Hadoopも同じく、Luceneプロジェクトの中のNutchというWeb検索エンジンのサブプロジェクトから派生したものです。HadoopとMahoutはいわば兄弟なのですね。
もちろん、単に出自が同じだというだけではありません。Mahoutが扱う機械学習には大量の演算処理が必要となるものが多々あります。また、大量のデータを分析する必要がある用途に使われることが想定されています。「大量のデータ X 大量の演算処理」、これはまさしくHadoopが得意とする領域です。そのためMahoutにはHadoopを使用して処理がこなせるよう、MapReduceを使って処理が書かれたものが多くあります。またMahoutの各種機能を実行することができるランチャースクリプトも、自分の環境でHadoopが動作しているか否かを判別し、Hadoopが動いていれば自動的にHadoop上で処理を実行してくれる機能を持っています。
このように、HadoopとMahoutを連携させることで、ビッグデータの分析が手軽に行えるようになるのです。ちなみに、「Mahout」とはヒンズー語で「象使い」を表す単語です。象(Hadoop)をうまく使いこなし、ビッグデータの分析の旅へと出て行きましょう。