機械学習に求められる役割の1つに、「データに語らせる」ことがあります。したがって、データの種類や情報抽出の目的に応じた"聞き上手"な手法を選択する必要があります。 機械学習によりデータに語らせた結果、何が分かり何ができるかには、次のような事例があります。

例1:SNSのデータからユーザのリンク構造を抽出し、解析することで友人関係、影響力のあるユーザ、情報伝播経路が分かり、効果的な広告戦略の立案や需要予測ができるようになる。

例2:レビューデータから、固有表現として商品名とその前後のテキストを抽出すると、商品の評判(商品のどの属性がどのように評価されているか)が分かり、短期間かつ低コストでマーケティング戦略の見直しや新商品の設計ができるようになる。

例3:気象データと移動データから、天気や気温及び渋滞発生の相関が分かり、渋滞回避のためのナビゲーションや都市計画ができるようになる。

機械学習の応用分野はデータマイニング、テキスト解析、画像解析、分類・識別、予測、トラフィック解析等多岐にわたり、問題解決のアプローチも統計学、情報理論等を組み合わせたものまで幅広く存在します。

ここ数年の傾向として、統計物理で使われているアプローチが機械学習に取り込まれています。というのは、統計物理では分子間の相互作用をシミュレーションするために、大規模演算のノウハウが蓄積されているためです。ユーザネットワークの情報伝播をモデル化する場合を考えてみましょう。ここで、ユーザ→分子、ユーザ間の人間関係→分子配置、ユーザ間の情報共有の度合い→分子間力と置き換えると、統計物理で使われているアプローチを用いることで、ユーザ間のネットワークを通しユーザ全体に情報が伝播する過程をシミュレーションすることができます。  

機械学習の実装

機械学習はビッグデータが話題になる前から研究あるいは利用されていますが、そのアルゴリズムの多くは単一マシンのメモリ上での実装を想定しています。したがって、複数マシン上での並列処理、処理可能なデータ量及び処理速度についてのスケールアウトの面で実用上の課題があります。

機械学習をビッグデータに適用するためには、アルゴリズムだけでなく、その実装手段の見直しも必要です。Hadoopは処理可能なデータ量及び処理速度もスケールアウトできる可能性があるために、機械学習の基盤として注目されています。

Hadoopはファイルシステムと分散処理のフレームワークなので、個々のアルゴリズムはMapReduceのフレームワークに合わせて再設計、実装する必要があります。一方で、分類、クラスタリング、パターンマイニングなどのタスクとその代表的なアルゴリズムはMahoutのライブラリとして準備されています。MahoutはLuceneプロジェクト(検索エンジンを開発するプロジェクト)のサブプロジェクトとして生まれました。Luceneを含めたWeb検索エンジンプロジェクトがNutchなので、元々Hadoopとは関係の深いプロジェクトです。Mahoutは数多くの代表的なアルゴリズムを実装済みで、現時点では次のようなアルゴリズムが実装されています。

表1:Mahoutで実装済みのタスクとアルゴリズム

タスク 概要 アルゴリズム
分類 対象となるデータ(文書や画像など)に、あらかじめ作成したラベルを付与してグループ分けする方法。メールのフィルタリングなどに使われる。 Logistic Regression、 Bayesian、Support Vector Machines、Perceptron and Winnow 、Neural Network、Random Forests、Restricted Boltzmann Machines、Online Passive Aggressive、Boosting、Hidden Markov Models
クラスタリング 対象となるデータ集合を、個々のデータが持つ特徴(文書であれば単語)が類似したクラスタにグループ化する方法。検索結果のグループ化などに使われる。 Canopy、K-Means、Fuzzy, Expectation Maximization、Mean Shift、Hierarchical、Dirichlet Process、Latent Dirichlet Allocation、Spectral、Minhash、Top Down
パターンマイニング データの中から出現頻度が高いパターンを抽出する方法。購入履歴からの購入商品の組み合わせの抽出に使われる。 Parallel FP Growth Algorithm
次元縮小 高次元の特徴量を持つデータを、低次元のデータに変換する方法。その結果、データ集合の構造抽出や可視化だけでなく、モデルの汎化能力の向上にも効果がある。 Singular Value Decomposition、Principal Components Analysis、Independent Component Analysis 、Gaussian Discriminative Analysisなど
レコメンド 利用者毎にアイテムを推薦する方法。ECサイト等で使われている。 Item-Based、Matrix factorization

Mahoutがこれだけ多くのアルゴリズムをカバーしていれば、他に選択肢は無いように思えますが、Apacheが付かないだけで、Hadoop上で利用できるプログラムやコードが多数公開されています。例えば、Mahoutにも含まれているLatent Dirichlet Allocation (LDA)についてもY!LDAやMr.LDA等何種類か公開されています。

ビッグデータへの機械学習の適用には、処理可能なデータサイズだけでなく、処理速度の高速化も求められます。前回も触れたように、機械学習のアルゴリズムをHadoop上で実装した場合、多くの場合、MapReduceが多段、つまり何度もMapReduceを繰り返す必要がでてきます。したがって、処理の高速化のために、Mapperのアイドリングタイム、つまりReducerが開始されるまでのタスクの待ち時間や、タスクにおけるReducerのアイドリングタイムを短縮する必要があります。

また、HDFSからのデータの読み込み(HDFSは短時間での大量のデータの読み書きが苦手)、Jobの起動・停止、Shuffleのコスト、及びそれに伴う遅延、また、データのブロックサイズやMapperあるいはReducer 間でのデータ共有方法についても見直す必要になる場合もあります。Combinerに手を加えることもあるかもしれません。

もし、分析アプローチが大規模グラフ問題の解析に帰着できるならば、前出のHamaあるいはGiraphの利用も考えられます。その他にもHaloop、twisterなどもあります。MapReduceのスケジューラで対応しきれない場合、Facebook が開発したスケジューリングソフトのHadoop Coronaの利用も考えられます。

Hadoop自体がバッチ処理を前提としていたので、リアルタイム処理の基盤を用いたアプローチも考えられます。その場合、前回も紹介したS4、Stormなどが選択肢になりますが、最近はそれを利用したScalable Advanced Massive Online Analysis (SAMOA)という機械学習のフレームワークが登場しました。SAMOAがHadoop上のMahoutに相当するポジションを位置づけられるために、更なるアルゴリズムの追加実装が待たれます。

図1:ビッグデータ向けの機械学習の環境

現段階では、機械学習のツールとしてはまずはMahoutになると思います。その中で興味のあるアルゴリズムの高速化、更にはリアルタイム処理を考えたときにHama、Giraph Apache以外のプロジェクトやSAMOAを検討することになるでしょう。ただし、当面あるいは将来、処理するデータ及び途中で生成されるデータも含めて単一マシンのメモリに収まる、あるいは特徴選択などで収められる場合はHadoopを選択する必要は無いでしょう。

 

オープンなデータ

当たり前ですが、ビッグデータには、機械学習を扱える人や分析環境の両方だけでなく、データが必要です。そのデータが自社でしか利用できないデータであれば、それだけ他と差別化し易くなります。

一般に、データが増えれば、個々の分析手法の優劣が見え難くなるだけでなく、抽出される情報の正確性も増えます。そのため、アルゴリズムの高度化だけでなくデータの収集も重要です。実際にHadoop関連のサブプロジェクトや機械学習の研究成果の多くが、Google、Yahoo!、Microsoft、Twitter、Facebookなどビッグデータを保有する企業から出ていることからも分かります。

一方で、最近は機械学習の利用環境だけでなく、データのオープン化が進んできています。Web関連であれば各種サービスのAPI(Application Programming Interface)を利用するなどがあります。また、収集したデータをオープンにし、他社や一般ユーザが利用できるように提供している事例もあり、以前よりもデータを利用できる環境が整ってきています。例えば以下のサイトでは、テキストデータだけでなく、時系列データ、画像データ、レビューデータ等々を公開しています。

UCI Machine Learning Repository
Free Public Datasets

また、総務省は、政府統計の総合窓口で提供している統計データをXML等の機械判読可能な形式で取得できるAPIの提供を開始しました。利用できる統計データは、国勢調査、住宅・土地統計調査、労働力調査、全国消費実態調査、家計調査など総務省統計局所管統計の約3万2千表のデータで、次世代統計利用システムから登録することで利用できます。

さらに、機械学習の腕試し?にはコンテストが開催されています。例えば、国際会議と共催されるコンテストには次のようなものがあります(年により若干ずれることがあります)。

KDD:毎年8月に開催。コンテストの開始時期は3月頃から。
ICDM:毎年12月に開催。コンテストの開始時期は7月頃から。
WSDM:毎年2月に開催。コンテストの開始時期は10月頃から。

これらのコンテストでは、参加者がチーム(個人参加でも可)を作って、同じデータを使って主催者の発表したタスクを競います。これらの国際会議では機械学習の新しいアルゴリズムだけでなく、前出のようなHadoopをベースにしたプログラムやコードが公開されます。   

ビッグデータにだまされないために

これまで5回に分けて、ビッグデータとHadoopの関係について紹介させていただきました。ビッグデータと呼ばれるデータがあり、活用手段として機械学習があり、その実装ツールとしてHadoop及びそのサブプロジェクトや周辺プロジェクトが存在しています。

最後にビッグデータで分析を始める前に、本当にビッグデータが必要なのかを判断するポイントを紹介したいと思います。

表1:ビッグデータ分析のチェックポイント

□ビッグデータ分析によって得られる情報が明らかになっている
⇒得られる情報がはっきりしないと、分析手法も決められない
□上記の情報を既存の手段で得られるとすれば、ビッグデータ分析を実施することで得られるメリットや違いがあるか明らかになっている
⇒設備投資や時間のコストもお忘れなく
□ビッグデータ分析で新しい情報が得られるとすれば、その理由がデータなのか分析手法なのかが分かっている
⇒同時に既存のデータあるいは分析手法では不十分な理由が分かります
□分析に必要なデータが明らかになっている
⇒設備投資や時間のコストもお忘れなく
□そのデータの利用に関しては問題が無いことを確認済み
⇒アクセス権限だけでなく、データのクリーニングも含みます
□必要となる分析手法が分かっている
⇒分かっていなくても、やっていくうちに分かることもありますが
□分析のケーススタディの有無とその内容について調査は十分である
⇒ケーススタディを調査していると回り道をしなくて済むことが多いです
□データサイエンティストに騙されない
⇒設計できない、実装できない、説明できない自称データサイエンティストも多いです

川前徳章(かわまえ のりあき)
工学博士、NTTコムウェア 研究開発部 勤務。専門は情報検索、統計的機械学習、マーケティングサイエンス。現在は感性検索とコンテンツジェネレータの研究と開発に従事。東京電機大学安田研究室協力研究員。
関連記事:Hadoopでレコメンドシステムを作ろう