コンテンツ一覧

Mahout | Solr | Android | Environment

2012年8月24日金曜日

技術評論社 『Software Design』 Mahout入門 後編



Mahout関連のまとめはこちら



この記事は『Software Design』2012年9月号の後編の内容の補足情報を記載しています。本編と同じ章立てにしていますので、本編を読みながら参照していただければと思います。

はじめに
後編では、Mahoutを実際に実行します。

Mahoutで何をするのか?
そもそも、Mahoutではどのようなことができるのでしょうか。Lucid Imagination社が公開しているMahoutの概念図をご覧ください。



おすすめ商品の提案(Recommendation)、ニュースの分類(Clustering)、メーラのスパムの推定(Classification)などの処理で活用できます。Frequent pattern miningは、頻出するアイテムの組み合わせを抽出することができます。具体的な例を上げると、POSデータからビールとおむつを一緒に購入する消費者が多いことなどの知見を得るために使われます(※参考)。Geneticは、宅急便のトラック配車計画の最適化などに利用することができるでしょう。様々なアルゴリズムが提供されているMahoutですが、今回はRecommendationを取り上げます。

Recommendationのメリット
システムから見れば、利用者が欲しい情報を提示することができれば、より頻繁にシステムを利用して貰えることになります。アクセス数/広告収入/商品売上の増加などが期待できます。ユーザーは、自分が興味を持っている新しい情報を知ることができます。

但し、これは利用者に適切な情報をRecommendationしているときに限ります。興味がない/関連性がない/既知の情報をRecommendationしても、ユーザーは関心を持たないか、煩わしく感じることさえあるでしょう。未成年にアルコール商品を薦めることなどあれば、企業の信用問題にも繋がります。マイナスの評価を受けないためにも、チューニングはしっかりしていく必要があります。

Recommendationの概要
Recommendationの説明する前に使われる用語の説明をしたいと思います。

Recommendationの用語を整理する

Recommendationの方式は、Itemの関連性を分析する方法とCollaborative Filteringの二種類が代表的なものでしょう。前者は、コンテンツベースのRecommendationと言われています。例えば、同じジャンルの商品を提示する方法はシンプルで分かりやすいでしょう。しかし、意外性のある情報が提示される可能性は低く、ユーザーにとって新しい情報である可能性が低いことが欠点です。Collaborative Filteringは、ユーザーの行動履歴をベースにしてRecommendationを行ないます。更に細分化すれば、ItemベースとUserベースの考え方があります。こちらの違いは「Recommendationの用語を整理する」にまとめています。ここまでの話で幾つかの方式が登場したので、以下にまとめておきます。

  • Recommendation
    • コンテンツベース
    • CollaborativeFilteringベース
      • Itemベース
      • Userベース


Mahoutを動かす
現在、Mahoutの最新版は0.7です。既に0.8の開発がはじまっており、下記コマンドでリポジトリからソースコードをダウンロードすることができます。



ClusteringとClassificationの違い


Mahout関連のまとめはこちら


機会学習を学んでいると、ClusteringとClassificationという単語が登場します。Mahoutのアーキテクチャでも、この両者が登場しますが、どのように違うのでしょうか。日本語に直そうとすれば、どちらも「分類」に訳してしまいそうです。悩んでいたところ、あるWebサイトがスッキリと解説してくれていたので紹介したいと思います。

クラスタリングとクラス分類って違うらしい

クラスタリングとクラス分類

Clustering(クラスタリング)
クラスタリングは、既知の分類方法では見えなてこない情報を読み取るための方法となります。クラスタリングの対象となるデータから属性を抽出し、各属性を次元軸としてN次元空間を定義します。その空間に対して対象となるデータをプロットしていきます。空間内での距離が近いもの同士をグループ化して分けていくことがクラスタリングです。

Classification(クラス分類)
それに対して、クラス分類は、予め用意されている正解例に従い、対象となるデータを分類していく方法です。例えば、人の属性に着目すれば、性別・年齢・居住地などがあるでしょう。性別=男女、年齢=10代・20代・30代・・・、居住地=京都・大阪・兵庫・・・などに分類していきます。

クラス分類は、明確に「ある属性」に着目して分類をします。クラスタリングは、各属性(クラス分類とも言える)を俯瞰して、そこから見えてきた状態で分類をします。




2012年8月22日水曜日

Recommendationの用語を整理する


Mahout関連のまとめはこちら

Recommendationの解説をするには、用語の定義を曖昧にしてしまうと、読み手が混乱するということを改めて感じています。分かっている人には当たり前のことですが、改めて整理してみたいと思います。


  • Recommendation(レコメンデーション、リコメンデーション、リコメンド 等)
  • Item(アイテム)
  • User(ユーザー)
  • Preference(評価、評点、嗜好度)
  • Recommender System(レコメンダシステム、レコメンドシステム 等)
  • Collaborative Filtering(協調フィルタリング)

Recommendation
各人の行動や関心にもとづき、各人に関連性のある情報を提示すること。素直に訳せば推薦になります。(事例で良く取り上げられるAmazonのRecommendation機能の場合、「おすすめ商品の推薦」と表現すると同じニュアンスの単語が繰り返されるので、「おすすめ商品の提案」などと表現することが多いと思います。個人的には、「おすすめ商品のRecommeantion」と書いてしまった方が分かりやすいのですが、反対も多そうです。)

AmazonのRecommendation機能

User
Recommendationの説明をする場合、Userには3つの役割があります。Recommendation機能の入力情報として使う場合、ユーザーの属性情報や行動履歴を活用します。
  1. 情報を推薦される人
  2. 入力情報としてのUser
    ユーザーの属性情報→ 年齢・性別・職種など
    ユーザーの行動履歴→ 評価結果(明示的に収集)・閲覧履歴(暗黙的に収集)など
  3. 出力情報としてのUser
    類似・関連ユーザーが推薦されることがある
Item
Itemとは、ユーザーが購入する商品やコンテンツのことです。Recommendation機能の入力情報や出力情報になります。
  1. 入力情報としてのItem
    Webコンテンツなどであれば、中身や内容そのものが使われる
    物品であれば、それらを説明する文章や価格などの情報が使われる
  2. 出力情報としてのItem
    ユーザーに関心があると予想されるものが推薦される

Preference
評価・評点・嗜好度など表現されます。ユーザーがItemに対して評価をした値になります。はい/いいえの二値の評価や、段階的に数値で評価した結果などがPreferenceです。

Recommender System
Recommendationを実現するための仕組みがRecommender Systemになります。後述するItemやUserの情報を使ってRecommendationを行います。

Recommender Systemの入出力


Collaborative Filtering
ユーザーの行動履歴を元にRecommendationを行う仕組みで、協調フィルタリングと呼ばれるものです。ItemベースとUserベースの処理があります。

Itemベース
ユーザーが関心がある/好んでいるItemがあれば、それと類似しているItemを探しだして、Recommendationする方式です。

Itemベースの概要


Userベース
Recommendation対象ユーザーと類似している(嗜好が同じ)ユーザーを探しだして、Recommendationする方式です。

Userベースの概要

2012年8月20日月曜日

Mahoutおすすめ情報1(筆者の主観で厳選した5本)


Mahout関連のまとめはこちら


Mahout関連の情報をリンク集として以下の記事にまとめています。数が多いので、幾つかをピックアップして説明していきたいと思います。
『Software Design』Mahout入門 参考資料1

Apache Mahoutで機械学習してみるべ
都元ダイスケ氏の記事をはじめに紹介します。Mahoutのサンプル実行から、Recommendationの基本的な処理、Hadoopでの実行までを分かりやすく解説されています。私もMahoutを勉強している途中ですが、この記事を読んで引っ掛かっていたところが、スカッとわかりました。お勧めです。クラスタリングの記事もあります。

大規模データマイニング・機械学習 Mahout 活用に向けて読んでおきたい12のプレゼン資料 
Mahout JPの主催者でもある濱田晃一氏の記事になります。データマイニングの勉強会を開催しており、非常に先進的な技術情報や事例が集まっています。クラスタリング概論・ベイズ・Recommendation・Mahoutのパッチなど、多様な話が集まっています。

Mahout Recommendation
同じく濱田晃一氏によるRecommendationの解説記事です。12のプレゼン資料の中にも含まれています。アルゴリズムの詳細な説明やHadoop上の構成などを分かりやすく解説されています。筆者も、これぐらい分かりやすく情報をまとめていけるようになりたいと思います。

Mahout in Action Chapter 1 Summary
洋書『Mahout in Action』の解説記事です。洋書を買ったはいいけれど、読了できない日本人の人は多いのではないでしょうか。各章のポイントを分かりやすく記載してくれているので、読み進めることができない人は参考にしてみましょう。Chapter1の他にも、2,3,4の記事が公開されています。ブログ内検索を使えば一覧で出てきます。

日本語入力を支える技術 ―変わり続けるコンピュータと言葉の世界
Mahoutをはじめるにあたって、そもそも「機械学習」とは何か?という人は多いのではないでしょうか。筆者もその一人で大いに躓きました。この『日本語入力を支える技術』は文字通り、Iunput Method Editorに関する書籍ではありますが、機械学習について分かりやすく解説されている部分があります。ピンと来なくて困っている方におすすめです。



2012年8月16日木曜日

Mahoutを開発している人たち

Mahout関連のまとめはこちら

Mahoutを調べるにあたって「誰が開発をしているんだろう」と気になったので調べてみました。はじめに、Mahoutの大まかな系譜を紹介します。
歴史的に関係するプロダクトは、Lucene/Solr/Nutchなどがありますが、やはりHadoopとの関連性が大きいと思います。開発者の流れとしては、Luceneの開発者が合流していることが分かります。ただ、Mahoutは、複数の開発者が中心となって立ち上げているので、彼らの経歴を見てみたいと思います。

ApacheCon Europe08
Mahout -Bringing Machine Learning to Industrial Strength-

上記、Apacheカンファレンスの資料によると、2008年1月25日にMahoutのプロジェクトがスタートしたようです。そしてメンバーに名前を連ねている人たちも紹介されています。

Dawid Weiss
Karl Wettin
Ted Dunning
Grant Ingersoll
Isabel Drost
Jeff Eastman
Otis Gospodetnic
Erik Hatcher

現在、MapRに勤めているTed Dunning、Carrot2のDawid Weissなど多くのエンジニアが参加していたことが分かります。最新の情報は以下のサイトに公開されているようです。徐々にエンジニアが増えていっているようですね。パッと見たところ、日本人はいませんが、Mahoutのパッチを作っている人も国内にいるようなので、彼らがコアメンバーとして開発する日が来るのかもしれませんね。

Mahout

本ページは、Apache Mahout関連の情報をまとめています。


『Software Design』Mahout入門 参考資料1


Mahout関連のまとめはこちら

Webサイト・書籍・ソフトウェアなどの参考情報へのリンクを記載しています。ここに記載されていないリンクがあれば、コメント欄でお知らせいただければと思います。

Webサイト
New! 次の10年で一番熱い学問は統計学!統計学を勉強する上で参考になるサイト・書籍まとめ
New! Books Tutorials and Talks
MatrixFacorization を使った評価予測 ―アルゴリズムシリーズ 3―
Apache Mahout を用いたレコメンデーションエンジンの検討
Apache Mahout
機械学習の勉強を始めるには
Elastic MapReduceでMahoutを使ってリコメンデーション
Mahoutインストール
Mahout開発環境の作成
Mahout in Action Chapter 1 Summary
Mahout in Action Chapter 2 Summary
Mahout in Action Chapter 3 Summary
Mahout in Action Chapter 4 Summary
"Elastic MapReduce"で"Mahout"使ってリコメンデーション
MapReduce Optimization in Mahout Recommendation Engine
Mahout Recommendation Engine ? Threshold flag
Sarwar et al.:Item-Based Collaborative Filtering Recommendation Algorithms
RHadoop を動かしてみました
テキストマイニングのための機械学習超入門 一夜目
テキストマイニングのための機械学習超入門 二夜目 パーセプトロン
Apache Mahoutで機械学習してみるべ
レコメンデーションの簡単な原理を視覚的に把握してから実際に計算してみる
機械学習における重大な"仮定"と、アルゴリズムの評価
今度はMahoutでクラスタリング
今度はMahoutでクラスタリング(ソース編)
Mahoutで分散レコメンド(1)
Mahoutで分散レコメンド(2)
Mahoutで分散レコメンド(3)
Apache Mahout で単純なレコメンドを実施
Mahout RandomForest Driver 実装法 -大規模分散 機械学習・判別 -
大規模データマイニング・機械学習 Mahout 活用に向けて読んでおきたい12のプレゼン資料
MapReduceできる10個のアルゴリズム
画像処理と機械学習のメモ
超簡単 ! Windows で Mahout IN ACTION (Mahout IN ACTIONの自習その1)
MAHOUT In Action レコメンダー事始め Chapter2 (Mahout In Action 自習その2)
集合知 in Scala (2) Jaccard係数、Tanimoto係数、マンハッタン距離、ユークリッド距離、ピアソン相関係数
Apache Mahout 機械学習Libraryを使って「魔法少女まどか☆マギカ」の台詞をテキストマイニングしてみた
金融システムへの最新技術の適用 「大量データ分析処理技術『Hadoop』」(前篇)
機械学習 はじめよう
Hadoopでレコメンドシステムを作ろう
朱鷺の杜Wiki
人口知能
協調フィルタリング
協調フィルタリング
機械学習
統計
Mahout 関連情報メモ
Apache Nutch
AppEngineでMahoutを使ったレコメンド機能を作ってみた
OSS検索エンジンLuceneとは
代表的3つのレコメンドロジック
ACKマトリクス
レコメンデーションの分類
試すのが難しい―機械学習の常識はMahoutで変わる
数理情報工学特論第一 【機械学習とデータマイニング】
MahoutとHadoopを使ったレコメンデーション(前編)
MahoutとHadoopを使ったレコメンデーション(後編)
GroupLens
m2eclipse1.0でmavenリポジトリの自動検索ができない
mahoutで簡単レコメンド
Apache Mahout の紹介
Apache Mahout: 万人のためのスケーラブルな機械学習
Apache Mahout: 拡張性の高い機械学習アルゴリズム
械学習ライブラリ:Apache Mahoutとは ? IOUGセミナーより -
レコメンデーションの虚実
Mahoutメモ
mahout/レコメンドシステムの作り方
Mahoutにパッチを送ってみた
OpenNLPにおける最大エントロピー法とパーセプトロンによる機械学習
自然言語処理における機械学習による曖昧性解消入門
Introduction to Recommender System
パターン認識と機械学習入門
Jubatusにおける大規模分散オンライン機会学習
MapReduceによる大規模データを利用した機械学習
Distributed Itembased Collaborative Filtering with Apache Mahout
Jubatusのリアルタイム分散レコメンデーション
はじめてでもわかるベイズ分類器 -基礎からMahout実装まで-
Apache Mahout Algorithms
Mahout JP
書籍
日本語入力を支える技術
Mahout in Action
パターン認識と機械学習 上
パターン認識と機械学習 下
Hadoop MapReduce デザインパターン
Hadoop Hacks――プロフェッショナルが使う実践テクニック
ソフトウェア
Jubatus
Mahout
weka
R
Rhadoop

2012年8月15日水曜日

技術評論社 『Software Design』 Mahout入門の補足


この記事は、技術評論社の『Software Design』2012年8月号、9月号で連載された『Mahout入門』の補足情報をまとめています。

前編
  • はじめに
  • 注目を集める「機会学習」
  • Mahoutによる機会学習入門
後編
  • はじめに
  • Mahoutで何をするのか?
  • Mahoutを動かす
  • Big DataをMahoutで処理する
  • Mahoutを組み込んだシステムの例
  • 最後に

参考

筆者の力量不足のため、紙面で分り易く説明ができなかった部分があるので、責任を持ってカバーしていきます。なお、『Software Design』の補足情報をまとめ終えたら、下記の記事にMahout全般の情報を掲載していく予定です。

Mahout