協調フィルタリング with mahout

22
Mahout の協調フィルタで遊ぼ Karubi Namuru June 20th, 2010

Upload: katsuhiro-takata

Post on 13-Apr-2017

14.573 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: 協調フィルタリング with Mahout

Mahoutの協調フィルタで遊ぼ

Karubi NamuruJune 20th, 2010

Page 2: 協調フィルタリング with Mahout

自己紹介

● Karubi Namuru

● 博士(理学),情報科学 ● Kauli, inc. http://kau.li● Twitter: @karubi● Facebook: http://facebook.com/karubi

● 出身:広島 , 居住:東京 , Seongnam

Page 3: 協調フィルタリング with Mahout

学生時代の話

● 在学中の研究● 統計的手法による日常行動分析

– 実世界:ライフログ– ウェブ:閲覧, clicks

0

20

40

60

80

100

120

140

160

180

200

0

20

40

60

80

100

120

140

160

180

200

Page 4: 協調フィルタリング with Mahout

現在使っている知識

● 膨大な情報の処理● 疎な分散処理

● 時系列情報を参照する情報推薦● コンテクスト抽出● 状況変化型の情報推薦

– いつも一緒ではない,時間は刻々と進む

Page 5: 協調フィルタリング with Mahout

会社

● 広告の会社,情報推薦を応用した配信最適化● Mahout を利用した商用システムも稼働中

● 2009 年 09 月から,(自称)世界初の商用利用● 規模

● 2010 年 02 月 2200 万 UBs (ユニークブラウザ)● 2010 年 03 月 2840 万 UBs● 2010 月 04 月 3208 万 UBs● 2010 月 05 月 3816 万 UBs

Page 6: 協調フィルタリング with Mahout

今日の内容

● ネット上の資源で遊ぶ● 前回のおさらい● ネット上の情報源

– 映画の推薦情報● ネット上のライブラリ

– Mahout● 動かしてみる

– 本日はアイテムベース● 検証

Page 7: 協調フィルタリング with Mahout

推薦(レコメンデーション)

● 概要● 潜在的な顧客にその人が欲しい商品を勧める● ウェブ閲覧者のサイト閲覧履歴やクリック履歴などをもとにユーザの嗜好パターンを学習する

● アプローチ● コンテンツベース● ルールベース● 協調フィルタリング

Page 8: 協調フィルタリング with Mahout

協調フィルタリング

● 似た人が与えた評価を利用して,アイテムの評価を予測する● 多くの利用者の嗜好情報を蓄積すること● ある人と嗜好の類似する他の人の情報● クチコミの原理と例えられる

– 趣味の似た人からの意見を参考にする

Page 9: 協調フィルタリング with Mahout

考え方

● ユーザ A がアイテム X を好む● アイテム X を好む別のユーザ B が好むアイテム

Y が存在する● ユーザ A もアイテム Y を好むのではないか

● 実装で利用するのはユーザ同士の類似度– たとえば,同じアイテムにつけた評価の相関係数

Page 10: 協調フィルタリング with Mahout

対象する情報

● 明示的な情報源● ユーザの評価がついているもの

– レビュー● 明示的に選択したもの

– 評価ポイント● 暗示的な情報源

● システムの操作履歴– ブラウザの閲覧履歴

Page 11: 協調フィルタリング with Mahout

明示的な情報の具体例

● 評価の内容● 例えば映画の場合

– この映画は面白かった,つまらなかった– ◯◯ 点 や ☆の数– 評価を与えた映画の組み合わせ

● レビューリスト

Page 12: 協調フィルタリング with Mahout

ネット上の情報源

● 公開されている明示的な情報源(一部)● The Netflix prize datasets

– Netflix :アメリカのオンライン DVD レンタルサービス– 1 億レコード以上– 480,189 人が 17,770 タイトルについて評価

● Grouplens Research– ミネソタ大の研究チーム, MovieLens プロジェクト– 10 万, 100万, 1000 万レコードの 3 つのデータ– 71,567 人が 10,681 タイトルについて評価( 1000 万)

Page 13: 協調フィルタリング with Mahout

無料のライブラリで作ってみる

● STEP 1. Java の開発環境の設定をします● 今回は JRE 6 と Eclipse を使います● 実際にやってみたいという方は,以下のページでも見てやってみてください

● Javaの道,Eclipse -1.インストール – この記事はわかりやすいのですが,ソフトウェアのバージョンが古いままです.最新版をダウンロードしても多分大丈夫だと思います.

Page 14: 協調フィルタリング with Mahout

動作環境を整える

● STEP 2. Mahout ライブラリをダウンロード● Apache Mahout - Downloads and Releases

– 最新版は 0.3  ( 2010 年 6 月現在)● 解凍する

Page 15: 協調フィルタリング with Mahout

動作環境を整える

● STEP 3. 開発環境に登録する● ライブラリを Eclipse に登録する

– Mahout-**-0.3.jar を使う– Javaの道, Eclipse-3.便利な機能(環境設定)– 「クラスパスの設定」の「4」参照

● 依存するライブラリも登録しておく– 「 lib」から, commons-logging-1.1.1.jar , slf4j-api-

1.5.8.jar , slf4j-jcl-1.5.8.jar , commons-cli-2.0-mahout.jar , uncommons-maths-1.2.jar

– 「 lib」全部登録しておいて問題ない

Page 16: 協調フィルタリング with Mahout

データダウンロード

● Step 4. 情報源をダウンロードするhttp://www.grouplens.org/node/73● 今回は 100 万レコードのデータを使う

Page 17: 協調フィルタリング with Mahout

データの中身

● 映画情報● 1270::Back to the Future (1985):: Comedy|Sci-Fi

● MovieID::Title::Genres

● それぞれ 1 本づつ● 評価情報

● 1::1270::5::978300055● UserID::MovieID::Rating::Timestamp

● 一人あたり 20 本分の評価

Page 18: 協調フィルタリング with Mahout

データを整形する(1)

● Step 5. Mahout で扱えるように整形● 解凍する● 評価情報のみ切り抜く

– テキストエディタなどでもなんとかできる量なので,切り取っちゃう

– タイトル情報を出力したいときは,タイトル情報やユーザ情報部分も切り取る

Page 19: 協調フィルタリング with Mahout

データを整形する(2)

● Mahout 用に整形– Mahout で使うデータ形式は「 UserId, MovieId,

Rating」– Perlや Pythonや Excelなどで「,」と TimeStamp

の列を消す.

Page 20: 協調フィルタリング with Mahout

プログラミング

● Step 6. アイテムベース推薦のプログラム● 説明します

Page 21: 協調フィルタリング with Mahout

実行

● Step 7. 推薦を動かす● UserID: 1 について 5 タイトルが出力できた

557::Mamma Roma (1962)::Drama

53::Lamerica (1994)::Drama

1149::JLG/JLG - autoportrait de d馗 embre (1994)::Documentary|Drama

1039::Synthetic Pleasures (1995)::Documentary

572::Foreign Student (1994)::Drama

● 自分のデータを登録しても推薦できる– 「 java.lang.OutOfMemoryError: Java heap space Exception

in thread "main"」が出た場合は以下のリンク.● 以下のプログラムで出るエラーの意味がわかりません

Page 22: 協調フィルタリング with Mahout

まとめ

● 手軽に本格的なアイテムベースの推薦機能がつくれた● ネット上のリソースを使ってみた● 無料のライブラリを使ってみた● おもしろさを味わってみ

● ご質問ございましたらメールください[email protected] まで