はじめに
近年、機械学習が非常に注目を集めている。機械学習を用いることによって、データから有用な規則、ルール、知識表現、判断基準などを抽出することができる。
機械学習を用いた例として、レコメンデーション、クラスタリング、分類、市場予測、評判分析、情報抽出、文字認識、ロボットなどが挙げられる。
また、アメーバを含むインターネットサービスの普及により、解析対象データが急激に増加している。解析アルゴリズムは最低でも線形の計算量が必要だが、それでも昨今のデータ増加量が上回っている。
世界で作成されたデータ量は、2009 年時点で0.8ZB にもなっており、2020 年には35ZB にも膨れ上がると予想されている(Degital Universe 2010)。
このことにより、機械学習処理の並列分散は今後必須であると考えられる。
この問題に対するアプローチの1 つとして、Apache Mahout[1] がある。
これは、Hadoop[2]上で機械学習を行うためのライブラリである。クラスタリングや、パターンマイニング、文字列データ処理、分類、行列演算などの様々な手法をサポートしており、スケーラブルであることを最優先しているため、百台超でも線形にスケールすることが確認されている。
本レポートでは、Apache Mahout を調査し、レコメンデーションエンジンに応用できないかを検討した。具体的には、Apache Mahout のTaste という協調フィルタリングのライブラリを使用し、アメーバのタレントを対象とした簡易レコメンデーションエンジンを実装した。
Apache Mahout について
本章では、Apache Mahout についての概要を述べる。
Apache Mahout は、Apache Software Foundation のオープンソースプロジェクトであり、大規模データセットのためのスケーラブルな機械学習ライブラリである。
Apache Mahoutのゴールは、Apache ライセンスのもと、無料で使用できるスケーラブルな機械学習のライブラリ群を構築することである。多くの実装について、スケーラビリティを担保するためにHadoop を使用している。
現在、Apache Mahout は以下の機能を実装している。
・Taste による協調フィルタリング
・Canopy クラスタリング
・K-Means, Fuzzy K-Means クラスタリング
・期待値最大化法
・平均シフトクラスタリング
・ディリクレ課程クラスタリング
・Latent Dirichlet Allocation
・Parallel FP growth algorithm
・連語抽出
・ロジスティック回帰
・単純ベイズ法, Complementary 単純ベイズ法
・サポートベクトルマシン
・パーセプトロン, Winnow
・ニューラルネットワーク
・ランダムフォレスト
・Restricted Boltzmann Machine
・特異値分解
レコメンデーションエンジン
本章では、今回作成したレコメンデーションエンジンについて述べる。
(1)データについて
本レポートで用いたデータは、アメーバのログインユーザによるタレントブログ閲覧のログの1日分(2011/02/25 分) を用いた。データフォーマットを以下に示す。
Apache Mahout のTaste では、UserID とItemID をLong 型で扱うため、アメーバID のそれぞれに固有のシーケンス番号を割り当て、それを使用した。
(2)ItemSimilarityJob について
ItemSimilarityJob は、Apache Mahout が提供しているアイテムベース協調フィルタリングのHadoop MapRedce ジョブである。ItemSimilarityJob は、全てのアイテムの類似度を計算する。
入力として、UserID,ItemID(,preference value) のリストを受け取り、ItemID の各ペアの類似度を計算し、出力する。
以下、使い方の例である。mahout-core-0.4-job.jar はApache Mahout のWeb サイトからダウンロードできる。
オプションの詳細は以下にまとめる。
-input (-i) | 入力ファイル、またはディレクトリ |
-output (-o) | 出力ディレクトリ |
-similarityClassname (-s) | 類似度を計算するクラス名、またはプリミティブの類似度を指定 (SIMILARITY_COOCCURRENCE, SIMILARITY_EUCLIDEAN_DISTANCE, SIMILARITY_LOGLIKELIHOOD, SIMILARITY_PEARSON_CORRELATION, SIMILARITY_TANIMOTO_COEFFICIENT, SIMILARITY_UNCENTERED_COSINE, SIMILARITY_UNCENTERED_ZERO_ASSUMING_COSINE) |
-maxSimilaritiesPerItem (-m) | アイテム毎の類似アイテム数の上限(デフォルト100) |
-maxCooccurrencesPerItem (-o) | アイテム毎の共起数の上限(デフォルト100) |
-booleanData (-b) | 入力をpreference value 無しで扱うかどうか |
(3)デモアプリ
本レポートで簡易レコメンデーションエンジンを実装した。
用いたアルゴリズムは、SIMILARITY_LOGLIKELIHOOD、SIMILARITY_TANIMOTO_COEFFICIENT、SIMILARITY_UNCENTERED_ZERO_ASSUMING_COSINE である。
まとめ
本レポートでは、Apache Mahout のTaste による協調フィルタリングを用いて、タレントを対象とした簡易レコメンデーションエンジンを実装した。厳密な精度評価はしていないが、主観ではそこそこの精度が出ていると思う。
今後は、引き続きApache Mahout を調査し、これを応用したアプリケーションを模索していきたい。
参考文献
【1】Apache Mahaout
http://mahout.apache.org/
【2】Apache Hadoop
http://hadoop.apache.org/
【3】Mahaout Wiki
https://cwiki.apache.org/con
uence/display/MAHOUT/Mahout+Wiki