協調フィルタリング with Mahout
-
Upload
katsuhiro-takata -
Category
Technology
-
view
14.573 -
download
0
Transcript of 協調フィルタリング with Mahout
Mahoutの協調フィルタで遊ぼ
Karubi NamuruJune 20th, 2010
自己紹介
● Karubi Namuru
● 博士(理学),情報科学 ● Kauli, inc. http://kau.li● Twitter: @karubi● Facebook: http://facebook.com/karubi
● 出身:広島 , 居住:東京 , Seongnam
学生時代の話
● 在学中の研究● 統計的手法による日常行動分析
– 実世界:ライフログ– ウェブ:閲覧, clicks
0
20
40
60
80
100
120
140
160
180
200
0
20
40
60
80
100
120
140
160
180
200
現在使っている知識
● 膨大な情報の処理● 疎な分散処理
● 時系列情報を参照する情報推薦● コンテクスト抽出● 状況変化型の情報推薦
– いつも一緒ではない,時間は刻々と進む
会社
● 広告の会社,情報推薦を応用した配信最適化● Mahout を利用した商用システムも稼働中
● 2009 年 09 月から,(自称)世界初の商用利用● 規模
● 2010 年 02 月 2200 万 UBs (ユニークブラウザ)● 2010 年 03 月 2840 万 UBs● 2010 月 04 月 3208 万 UBs● 2010 月 05 月 3816 万 UBs
今日の内容
● ネット上の資源で遊ぶ● 前回のおさらい● ネット上の情報源
– 映画の推薦情報● ネット上のライブラリ
– Mahout● 動かしてみる
– 本日はアイテムベース● 検証
推薦(レコメンデーション)
● 概要● 潜在的な顧客にその人が欲しい商品を勧める● ウェブ閲覧者のサイト閲覧履歴やクリック履歴などをもとにユーザの嗜好パターンを学習する
● アプローチ● コンテンツベース● ルールベース● 協調フィルタリング
協調フィルタリング
● 似た人が与えた評価を利用して,アイテムの評価を予測する● 多くの利用者の嗜好情報を蓄積すること● ある人と嗜好の類似する他の人の情報● クチコミの原理と例えられる
– 趣味の似た人からの意見を参考にする
考え方
● ユーザ A がアイテム X を好む● アイテム X を好む別のユーザ B が好むアイテム
Y が存在する● ユーザ A もアイテム Y を好むのではないか
● 実装で利用するのはユーザ同士の類似度– たとえば,同じアイテムにつけた評価の相関係数
対象する情報
● 明示的な情報源● ユーザの評価がついているもの
– レビュー● 明示的に選択したもの
– 評価ポイント● 暗示的な情報源
● システムの操作履歴– ブラウザの閲覧履歴
明示的な情報の具体例
● 評価の内容● 例えば映画の場合
– この映画は面白かった,つまらなかった– ◯◯ 点 や ☆の数– 評価を与えた映画の組み合わせ
● レビューリスト
ネット上の情報源
● 公開されている明示的な情報源(一部)● The Netflix prize datasets
– Netflix :アメリカのオンライン DVD レンタルサービス– 1 億レコード以上– 480,189 人が 17,770 タイトルについて評価
● Grouplens Research– ミネソタ大の研究チーム, MovieLens プロジェクト– 10 万, 100万, 1000 万レコードの 3 つのデータ– 71,567 人が 10,681 タイトルについて評価( 1000 万)
無料のライブラリで作ってみる
● STEP 1. Java の開発環境の設定をします● 今回は JRE 6 と Eclipse を使います● 実際にやってみたいという方は,以下のページでも見てやってみてください
● Javaの道,Eclipse -1.インストール – この記事はわかりやすいのですが,ソフトウェアのバージョンが古いままです.最新版をダウンロードしても多分大丈夫だと思います.
動作環境を整える
● STEP 2. Mahout ライブラリをダウンロード● Apache Mahout - Downloads and Releases
– 最新版は 0.3 ( 2010 年 6 月現在)● 解凍する
動作環境を整える
● 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」全部登録しておいて問題ない
データダウンロード
● Step 4. 情報源をダウンロードするhttp://www.grouplens.org/node/73● 今回は 100 万レコードのデータを使う
データの中身
● 映画情報● 1270::Back to the Future (1985):: Comedy|Sci-Fi
● MovieID::Title::Genres
● それぞれ 1 本づつ● 評価情報
● 1::1270::5::978300055● UserID::MovieID::Rating::Timestamp
● 一人あたり 20 本分の評価
データを整形する(1)
● Step 5. Mahout で扱えるように整形● 解凍する● 評価情報のみ切り抜く
– テキストエディタなどでもなんとかできる量なので,切り取っちゃう
– タイトル情報を出力したいときは,タイトル情報やユーザ情報部分も切り取る
データを整形する(2)
● Mahout 用に整形– Mahout で使うデータ形式は「 UserId, MovieId,
Rating」– Perlや Pythonや Excelなどで「,」と TimeStamp
の列を消す.
プログラミング
● Step 6. アイテムベース推薦のプログラム● 説明します
実行
● 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"」が出た場合は以下のリンク.● 以下のプログラムで出るエラーの意味がわかりません
まとめ
● 手軽に本格的なアイテムベースの推薦機能がつくれた● ネット上のリソースを使ってみた● 無料のライブラリを使ってみた● おもしろさを味わってみ
● ご質問ございましたらメールください[email protected] まで