Mahout の協調フィルタで遊ぼ

    Karubi Namuru
    June 20th, 2010
自己紹介

●   Karubi Namuru
●   博士(理学),情報科学
●   Kauli, inc. http://kau.li
●   Twitter: @karubi
●   Facebook: http://facebook.com/karubi
●   出身:広島 , 居住:東京 , Seongnam
学生時代の話


      ●   在学中の研究
          ●   統計的手法による日常行動分析
              –   実世界:ライフログ
              –   ウェブ:閲覧, clicks

200                      200
180                      180
160                      160
140                      140

120                      120

100                      100

80                       80

60                       60

40                       40

20                       20

 0                         0
現在使っている知識

●   膨大な情報の処理
    ●   疎な分散処理
●   時系列情報を参照する情報推薦
    ●   コンテクスト抽出
    ●   状況変化型の情報推薦
        –   いつも一緒ではない,時間は刻々と進む
会社

●   広告の会社,情報推薦を応用した配信最適化
●   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" 」が出た場合は以下のリンク.
                  ● 以下のプログラムで出るエラーの意味がわかりません
まとめ


●   手軽に本格的なアイテムベースの推薦機能がつ
    くれた
    ●   ネット上のリソースを使ってみた
    ●   無料のライブラリを使ってみた
    ●   おもしろさを味わってみ
●   ご質問ございましたらメールください
        gogokarubi@gmail.com まで

協調フィルタリング with Mahout

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