Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

btech lab. #2_anish

6 views

Published on

b→tech lab. #2 LT資料
「レコメンドシステム」
デー アニシュ

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

btech lab. #2_anish

  1. 1. レコメンドシステム ー デーアニシュ
  2. 2. © 2018 from scratch Co.Ltd. bdashのレコメンドアプリを使ってできること
  3. 3. 3 レコメンドアプリでできること bdashを活用してエンドユーザーに対してエンドユーザーごとに適した情報を提供することができる。 サイトレコメンド レコメンドメール ピンクの枠の部分がレコメンドにより出し分けされる
  4. 4. © 2018 from scratch Co.Ltd. アジェンダ
  5. 5. 5 アジェンダ 1. レコメンド全体の流れ 2. システムアーキテクチャ 3. レコメンドデータパイプライン 4. レコメンド計算
  6. 6. © 2018 from scratch Co.Ltd. レコメンド全体の流れ
  7. 7. 7 レコメンド全体の流れ *:サイトレコメンドを実施する際には、サイト側にb→dashレコメンドで生成したタグを実装いただく必要がある→P47参照 活用取得 取込 統合 変換 計測タグ レコメンドタグ サイトアクセスデータ
  8. 8. 8 レコメンド全体の流れ データセット設定 レコメンド設定 レコメンドデータ セット設定 レコメンドロジックの設定 レコメンドパターンの設定 レコメンド運用 ア ル ゴ リ ズ ム の 選 択 イ ン プ ッ ト デ ー タ の 選 択 ロ ジ ッ ク フ ィ ル タ の 選 択 メールでの活用 サイトでの活用 ロ ジ ッ ク フ ィ ル タ の 選 択 ア ウ ト プ ッ ト の 選 択 ア ル ゴ リ ズ ム の 組 み 合 わ せ
  9. 9. レコメンドデータセットの設定
  10. 10. 10 レコメンドデータセット設定とは bdashに取込を行ったデータの中から、レコメンドに使うテーブルと項目を選択する。 選択できるテーブルは履歴データ(基本的には受注明細テーブル)と商品データ(基本的には商品マスタ)である。 受注明細データ 受注データ 顧客データ 商品マスタ ・・・ 受注明細データ 商品マスタ 受注データ 履歴データ 商品データ 項目 項目の選択 受注ID - 受注日時 必須 顧客ID 必須 商品名 ○ 商品ID 必須 受注金額 ○ ・・・ ・・・ 項目 要否 マスタID - 商品ID 必須 商品名 必須 発売日 ○ Web公開日 - 在庫数 ○ ・・・ • 必須:データセットを 構築するにあたり必ず 選択する必要のある 項目 • ○:履歴データでは 売上金額ランキングに、 商品データではフィル タリングやレコメンドの 差込に利用する項目 • -:レコメンドのランキ ングや差込に特に利 用しない項目 凡例
  11. 11. 11 レコメンドデータセットのマッピングの例 レコメンドデータセットを作成する際には、履歴データからリレーションを張られたテーブルも選択可能である。 受注明細データ 会員ID 氏名 住所 ・・・ ・・・ 受注データ 受注ID 受注日 会員ID 商品ID
  12. 12. レコメンドロジックの設定
  13. 13. 13 レコメンドロジックとは レコメンドロジックとはレコメンド計算を行うために用いる計算方法である。(※機械学習アルゴリズム) ロジック ランキング ※ユーザー相関 ※アイテム相関 概要 受注データから売上件数あるいは売上金額のランキングを生し 上位のアイテムを、メール又はサイト上にレコメンドします 表示対象ユーザーと相関性の高いユーザーが購入しているアイテムを メール又はサイト上にレコメンドします 表示対象ユーザーが購入したアイテムと相関性の高いアイテムをサイト 上にレコメンドします 閲覧履歴 表示対象ユーザーの閲覧履歴を基に、閲覧したアイテムをサイト上に 表示します。 この他、7月より固定idのレコメンド(常に同じ商品を表示させるレコメンド)がリリースされる予定 アイテムID指定 商品マスタ内の特定のアイテムIDを指定して、メール又はサイト上にレ コメンドします。 ランダム 商品マスタ内のアイテムをランダムで抽出しメール又はサイト上にレコメ ンドします。
  14. 14. レコメンドデータパターンの設定
  15. 15. 15 レコメンドパターンの設定(概要) レコメンドパターンの設定ではこれまで作成したレコメンドロジックを、実際にどのように表示するのかを決定する。 そのために下記の項目を設定する。 アウトプットタイプ レコメンドロジック サブロジック どこにレコメンドを表示するのかを メールかサイトかで選択 前章で説明したレコメンドロジックのうちどのロジックを使用してアイテム を表示するかを選択 仮に「レコメンドロジック」で表示可能なアイテム数がレコメンド表示数 より少ない場合に使うロジックを選択 レコメンド表示数 メール又はサイトに幾つアイテムを表示するかを設定 パターンフィルタ レコメンドロジック・サブロジックを横断して、表示しないアイテムを設定 する
  16. 16. レコメンドの運用
  17. 17. © 2018 from scratch Co.Ltd. システムアーキテクチャ
  18. 18. 18 システムのプロジェクトの概要 プロジェクト ドメインとframework 役割 インフラ レコメンドアプリ Ruby/Rails (front end uses vue.js) レコメンドの設定 webサーバ レコメンドバッチ Ruby/Rails (back end also uses 3rd party applications like embulk) レコメンドのデータパイプライ ン バッチサーバ レコメンド計算 Scala (Apache Spark) レコメンド計算 Jarデプロイ レコメンドメール Java (Gradle project) メール配信のためのレコメン ド結果抽出 サーバ サイトレコメンド Java MVC (Spring Boot) サイト側で表示するためのレ コメンド結果抽出 webサーバ
  19. 19. © 2018 from scratch Co.Ltd. レコメンドデータパイプライン
  20. 20. 20 バッチ処理のインフラの図
  21. 21. 21 バッチ処理のインフラの図 プロセス名・ジョブ名 Redisのキュー SQSメッセージサービス 青いはキューに入れる方 赤いはキューから出す方
  22. 22. 22 Redisのキューの種類 1. batch_kickerキュー 2. job_execキュー 3. job_resultキュー 4. mail_batch_kickerキュー(スコープ外)
  23. 23. 23 バッチ処理の構成 Producer Worker1 Worker3 Worker2 ッ Producerが基本ジョブの管理を行う Workerが基本ジョブの実行を行う
  24. 24. 24 バッチ処理のインフラの図 Workerの領域 Producerの領域
  25. 25. 25 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling Producer Jobs 開始状態 キュー送信 キュー受信 キューに存在
  26. 26. 26 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling Producer Jobs Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling 開始状態 キュー送信 キュー受信 キューに存在
  27. 27. 27 バッチ処理の詳細~Producer~ Job① SQS polling Producer Jobs Job② Launch batch Job③ Start Batch Flow Job Manage Job Result 開始状態 キュー送信 キュー受信 キューに存在
  28. 28. 28 バッチ処理の詳細~Producer~ Job① SQS polling Producer Jobs Job② Launch batch Job③ Start Batch Flow Job Manage Job Result 開始状態 キュー送信 キュー受信 キューに存在
  29. 29. 29 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling Producer Jobs 開始状態 キュー送信 キュー受信 キューに存在
  30. 30. 30 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling Producer Jobs 開始状態 キュー送信 キュー受信 キューに存在
  31. 31. 31 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling Producer Jobs 開始状態 キュー送信 キュー受信 キューに存在
  32. 32. 32 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Job① SQS polling Producer Jobs 開始状態 キュー送信 キュー受信 キューに存在
  33. 33. 33 バッチ処理の詳細~Producer~ Producer Jobs Job① SQS polling Job② Launch batch Job③ Start Batch Flow Job Manage Job Result 開始状態 キュー送信 キュー受信 キューに存在
  34. 34. 34 バッチ処理の詳細~Worker~ Job② Calculation process Job③ Recommend result export Worker Jobs Job① Import data Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  35. 35. 35 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  36. 36. 36 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  37. 37. 37 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  38. 38. 38 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  39. 39. 39 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  40. 40. 40 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Producer Jobs Job① SQS polling 開始状態 キュー送信 キュー受信 キューに存在
  41. 41. 41 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Producer Jobs Job① SQS polling 開始状態 キュー送信 キュー受信 キューに存在
  42. 42. 42 バッチ処理の詳細~Producer~ Job② Launch batch Job③ Start Batch Flow Job Manage Job Result Producer Jobs Job① SQS polling 開始状態 キュー送信 キュー受信 キューに存在
  43. 43. 43 バッチ処理の詳細~Producer~ Producer Jobs Job① SQS polling Job② Launch batch Job③ Start Batch Flow Job Manage Job Result 開始状態 キュー送信 キュー受信 キューに存在
  44. 44. 44 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  45. 45. 45 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  46. 46. 46 バッチ処理の詳細~Worker~ Job① Import data Job② Calculation process Job③ Recommend result export Worker Jobs Job Run Batch Job 開始状態 キュー送信 キュー受信 キューに存在
  47. 47. 47 Producerのジョブの種類のサマリー ジョブ名 詳細 実行頻度 SQS polling 外部データ通知を受け付(dequeue)、 batch_kickerキューに該当するアカウントIDと バッチフローIDのメッセージを入れる(enqueue) daemon化 Launch batch batch_kickerキューからメッセージを受け付け(dequeue)、 start_batch_flowを実行 daemon化 Start Batch Flow バッチフローの最初のジョブのみを job_execキューに入れる(enqueue) 非同期 Manage Job Result Worker側実行されたジョブの完了情報を job_resultキューから受け付け(dequeue)、 次のジョブをjob_execキューに入れる(enqueue) cron管理 一分ごと
  48. 48. 48 Workerのジョブの種類のサマリー ジョブ名 Run batch job Import data Calculation process Recommend result export 詳細 job_execキューからジョブを受け付け(dequeue)、 ジョブ実行完了通知を job_resultキューに入れる(enqueue) レコメンド側データ取り込みジョブの種類、 job_execキューから受け付く(dequeue) レコメンドのロジックの計算ジョブの種類、 job_execキューから受け付ける(dequeue) レコメンドの結果と商品データをRDSへ転送する、 job_execキューから受け付ける(dequeue) リソース - Hive (Map-Reduce ジョブ for CTAS) Apache Spark (spark-submit ジョブ) Embulk (bulk insert ジョブ) 実行頻度 daemon化 daemon化 非同期 cron管理 一分ごと
  49. 49. 49 バッチの種類 1. 通常バッチ – 有効のデータセット、ロジックを全て実行するバッチ 2. 復帰バッチ – ステータスから判断を行い、失敗したデータセット、ロジックのみを実行するバッチ 3. 更新バッチ – 外部データの更新に関係するデータセット、ロジックのみを実行するバッチ
  50. 50. 50 Worker側でアカウントごと並列で実行するジョブの例
  51. 51. © 2018 from scratch Co.Ltd. レコメンド計算
  52. 52. 52 レコメンドロジック一覧 ロジック 機械学習アルゴリズム ランキング ❌ ユーザ相関 ⭕️ アイテム相関 ⭕️ 閲覧履歴 ❌ アイテムID指定 ❌ ランダム ❌
  53. 53. ユーザ相関
  54. 54. 54 ユーザ行動データによるレコメンドの手法の1 協調型(collaborative filtering)
  55. 55. 55 ユーザ行動データによるレコメンドの手法の2 内容ベース型(content based filtering)
  56. 56. 56 協調フィルタリングの種類 詳細 Model based CF Memory based CF 内容 教師なし学習方法、ユーザや アイテムの潜在力(latent features)を生かす user-itemとitem-itemの フィルタリングで利用される アリゴリズムの例 Matrix Factorization(FunkSVD, SVD++, NMF) Deep Learning コサイン類似度 (CosineSimilarity) , ピアソン相関関数 (Pearson correlation coefficients) 違い 最適化できる(Gradient descent, ALS)、data sparsity,scalabalityの問 題に対応できる 最適化の考えがない、データ が少ない(sparse data)場 合パフォマンスが劣化する
  57. 57. 57 協調フィルタリングMF(Matrix Factorization)によるユーザ相関 1)Matrix Factorizationのコンセプト(理想のデータを使って図で説明) 2)数学の話(方定期式など) 3)最適化を行う為に使っているALSアルゴリズムについて 4)ショッピングデータの場合、implicit ratingsによって計算 5)Sparkでデータフローとモデル 6)実装でわかったこと、注意点など
  58. 58. 58 Matrix Factorizationのコンセプト(理想なデータ) お客さんが買い物をした後にレビューやratingをくれた理想なデータ(explicit ratings) Users/Ite ms 6x5 A B C D E 1 ? 2.0 3.0 2.5 ? 2 3.5 4.5 ? ? 4.0 3 ? ? 3.0 2.5 ? 4 3.5 ? ? ? ? 5 4.5 2.0 ? ? ? 6 ? 1.0 1.5 1.5 ? Item User
  59. 59. 59 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ? 2.0 3.0 2.5 ? 2 3.5 4.5 ? ? 4.0 3 ? ? 3.0 2.5 ? 4 3.5 ? ? ? ? 5 4.5 2.0 ? ? ? 6 ? 1.0 1.5 1.5 ? Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 2.0 3.0 2 1.0 2.5 2.9 3 2.0 1.5 2.5 4 2.0 1.4 2.3 5 1.0 1.9 2.7 6 1.0 2.0 3.0 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 2.0 1.2 1.3 特徴2 2.1 2.3 1.3 2.3 3.0 特徴3 1.2 2.3 2.9 1.1 1.5
  60. 60. 60 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ? 2.0 3.0 2.5 ? 2 3.5 4.5 ? ? 4.0 3 ? ? 3.0 2.5 ? 4 3.5 ? ? ? ? 5 4.5 2.0 ? ? ? 6 ? 1.0 1.5 1.5 ? Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 2.0 3.0 2 1.0 2.5 2.9 3 2.0 1.5 2.5 4 2.0 1.4 2.3 5 1.0 1.9 2.7 6 1.0 2.0 3.0 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 2.0 1.2 1.3 特徴2 2.1 2.3 1.3 2.3 3.0 特徴3 1.2 2.3 2.9 1.1 1.5
  61. 61. 61 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ? 2.0 3.0 2.5 ? 2 3.5 4.5 ? ? 4.0 3 ? ? 3.0 2.5 ? 4 3.5 ? ? ? ? 5 4.5 2.0 ? ? ? 6 ? 1.0 1.5 1.5 ? Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 2.0 3.0 2 1.0 2.5 2.9 3 2.0 1.5 2.5 4 2.0 1.4 2.3 5 1.0 1.9 2.7 6 1.0 2.0 3.0 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 2.0 1.2 1.3 特徴2 2.1 2.3 1.3 2.3 3.0 特徴3 1.2 2.3 2.9 1.1 1.5
  62. 62. 62 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ? 2.0 3.0 2.5 ? 2 3.5 4.5 ? ? 4.0 3 ? ? 3.0 2.5 ? 4 3.5 ? ? ? ? 5 4.5 2.0 ? ? ? 6 ? 1.0 1.5 1.5 ? Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 2.0 3.0 2 1.0 2.5 2.9 3 2.0 1.5 2.5 4 2.0 1.4 2.3 5 1.0 1.9 2.7 6 1.0 2.0 3.0 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 2.0 1.2 1.3 特徴2 2.1 2.3 1.3 2.3 3.0 特徴3 1.2 2.3 2.9 1.1 1.5
  63. 63. 63 User-ItemのRatings matrixを分解する前のUserとItemのマッピング 😐 😬 🙁 😂 😥 🙁 A B C D E
  64. 64. 64 User-ItemのRatings matrixを分解した後のUserとItemのマッピング 😐 😬 🙁 😂 😥 🙁 特徴1 特徴2 特徴3 s A B C D E
  65. 65. 65 特徴(latent factors)を考えると何が想像できるか Usersの場合 Users/Factors 6x3 性別 女:1 男:2 年齢 20~30:1 30~40:2 40~50:3 ブランドの頃み 高ブランド:3 中ブランド:2 安ブランド:1 1 1.0 2.0 3.0 2 1.0 2.5 2.9 3 2.0 1.5 2.5 4 2.0 1.4 2.3 5 1.0 1.9 2.7
  66. 66. 66 特徴(latent factors)を考えると何が想像できるか Items/Factors 5x3 性別ごとの人気度 女:1 男:2 対象年齢 20~30:1 30~40:2 40~50:3 ブランドの評価 高:3 中:2 安:1 1 1.1 2.1 1.2 2 1.9 2.3 2.3 3 2.0 1.3 2.9 4 1.2 2.3 1.1 5 1.3 3.0 1.5 Itemsの場合
  67. 67. 67 Ratings MatrixをUsers特徴MatrixとItems特徴matrixで表現 R(n* m) 1 2 .. m 1 2 .. n X(k*n ) 1 2 .. n 1 2 .. k X(n*k ) 1 2 .. m 1 2 .. k n*m ratings matrix R Users u ≤ n Items i ≤ m k << min(n,m) users matrix k*n X items matrix k*m Y R » ¢XY
  68. 68. 68 あるユーザ(u)のアイテム(i)に対してrating値をuserベクトルとitemベクトルで表現 R(n* m) 1 2 i m 1 2 u n n*m ratings matrix R ru,i
  69. 69. 69 あるユーザ(u)のアイテム(i)に対してrating値をuserベクトルとitemベクトルで表現 R(n* m) 1 2 i m 1 2 u n n*m ratings matrix R ru,i users matrix k*n X xu = x1u x2u .. xku é ë ê ê ê ê ê ù û ú ú ú ú ú X(k*n ) 1 2 u n 1 2 .. k
  70. 70. 70 あるユーザ(u)のアイテム(i)に対してrating値をuserベクトルとitemベクトルで表現 R(n* m) 1 2 i m 1 2 u n Y(k*m ) 1 2 i m 1 2 .. k n*m ratings matrix R ru,i items matrix k*m Y yi = y1i y2i .. yki é ë ê ê ê ê ê ù û ú ú ú ú ú
  71. 71. 71 あるユーザ(u)のアイテム(i)に対してrating値をuserベクトルとitemベクトルで表現 R(n* m) 1 2 i m 1 2 u n n*m ratings matrix R ru,i NGxu = x1u x2u .. xku é ë ê ê ê ê ê ù û ú ú ú ú ú yi = y1i y2i .. yki é ë ê ê ê ê ê ù û ú ú ú ú ú
  72. 72. 72 あるユーザ(u)のアイテム(i)に対してrating値をuserベクトルとitemベクトルで表現 R(n* m) 1 2 i m 1 2 u n n*m ratings matrix R ru,i OKxu ¢ = xu1 xu2 .. xuk é ë ù û yi = y1i y2i .. yki é ë ê ê ê ê ê ù û ú ú ú ú ú
  73. 73. 73 あるユーザ(u)のアイテム(i)に対してrating値をuserベクトルとitemベクトルで表現 ru,i » ¢xuyi xu Î Rk = x1u x2u .. xku é ë ê ê ê ê ê ù û ú ú ú ú ú yi Î Rk = y1i y2i .. yki é ë ê ê ê ê ê ù û ú ú ú ú ú
  74. 74. 74 推測されたrating値と実際のrating値の関係 ˆru,i = ¢xuyi ru,i » ˆru,i
  75. 75. 75 通常(normal equation)のコスト関数(Cost function/Loss function) (ru,i - ˆru,i ru,i observed å )2
  76. 76. 76 線形解析のmatrixの方程式 Y =b0 +b1X1 +b2X2 +...+bpXp +e Y = Xb+e
  77. 77. 77 最小二乗方法によってモデルが有効かどうかを決定する Y = Xb +e e =Y -Xb
  78. 78. 78 最小二乗方法によってモデルが有効かどうかを決定する
  79. 79. 79 最小二乗方法によってモデルが有効かどうかを決定する
  80. 80. 80 線形解析の二乗方法よりratingsのコスト関数も最小化したい min (ru,i ru,i observed å - ˆru,i )2 min (ru,i ru,i observed å - ¢xuyi )2
  81. 81. 81 実際のratings値のコスト関数(L) L = (ru,i u,i å - ¢xuyi )2 + l( xu 2 + yi i å u å 2 ) Cost/Loss function (コスト関数)
  82. 82. 82 実際のratings値のコスト関数(L) L = (ru,i u,i å - ¢xuyi )2 + l( xu 2 + yi i å u å 2 ) 1st term sum of squared errors(残差平方和) 2nd term Regularization term (正則化)
  83. 83. 83 実際のratings値のコスト関数(L)の最小化を行うために偏微分を行う L = (ru,i u,i å - ¢xuyi )2 + l( xu 2 + yi i å u å 2 )
  84. 84. 84 実際のratings値のコスト関数(L)の最小化をuserベクトルで偏微分する L = (ru,i u,i å - ¢xuyi )2 + l( xu 2 + yi i å u å 2 ) ¶L ¶xu = 0 ¶ ¶xu (ru,i i å - ¢xuyi )2 + ¶ ¶xu l( xu 2 + yi i å u å 2 ) = 0
  85. 85. 85 1st termの残差平方和部分をuserベクトルで偏微分する 記号 処理の意味 展開 User uの全てのitemに対しての ratingsのベクトル Item特徴matrixの掛け算 R(n*m) 1 2 i m 1 2 u n ¶ ¶xu (ru,i i å - ¢xuyi )2 y11 y12 .. y1m y21 y22 .. y2m .. .. .. .. yk1 yk2 .. ykm é ë ê ê ê ê ê ù û ú ú ú ú ú y11 y12 .. y1k y21 y22 .. y2k .. .. .. .. ym1 ym2 .. ymk é ë ê ê ê ê ê ù û ú ú ú ú ú Items特徴 Items 特徴 yi i å yi ¢ ru,i i å ru = ru1 ru2 .. rum[ ] Y ¢Y k by m matrix m by k matrix
  86. 86. 86 1st termの残差平方和部分をuserベクトルで偏微分する 記号 処理の意味 展開 User uのベクトルの転置かける 固定値の偏微分 1 by k matrix ¶ ¶xu (ru,i i å - ¢xuyi )2 ¶ ¶xu xu ¢yi yi ¢ = yi1 yi2 .. yik é ë ù û k by 1 matrix ¢xu yi = xu1 xu2 .. xuk é ë ù û y1i y2i .. yk1 é ë ê ê ê ê ê ù û ú ú ú ú ú = xu1 * yi1 + xu2 * yi2..
  87. 87. 87 実際のratings値のコスト関数(L)の最小化をuserベクトルで偏微分する L = (ru,i u,i å - ¢xuyi )2 + l( xu 2 + yi i å u å 2 ) ¶L ¶xu = 0 ¶ ¶xu (ru,i i å - ¢xuyi )2 + ¶ ¶xu l( xu 2 + yi i å u å 2 ) = 0 -2(ru - xu ¢Y) ¢Y +
  88. 88. 88 2nd termの正則化部分をuserベクトルで偏微分する 記号 処理の意味 展開 User uのベクトルのl2ノルムの二 乗 1 by k matrix ¶ ¶xu l( xu 2 + yi i å u å 2 ) xu 2 u å k by 1 matrix xu =( xu1 xuu2 .. xuk é ë ù û x1u x2u .. xku é ë ê ê ê ê ê ù û ú ú ú ú ú ) 1 2 where xju = xuj (( xu 2 u å ) 1 2 )2 = xu 2 u å ¶ ¶xu=1..n xu 2 = u å ¶ ¶xu=1..n x1 2 u å + x2 2 + x3 2 ..+ xn 2
  89. 89. 89 実際のratings値のコスト関数(L)の最小化をuserベクトルで偏微分する L = (ru,i u,i å - ¢xuyi )2 + l( xu 2 + yi i å u å 2 ) ¶L ¶xu = 0 ¶ ¶xu (ru,i i å - ¢xuyi )2 + ¶ ¶xu l( xu 2 + yi i å u å 2 ) = 0 -2(ru - xu ¢Y) ¢Y +2lxu ¢ = 0
  90. 90. 90 Users特徴matrixのUser(u)の解答 ¶L ¶xu = 0 ¶ ¶xu (ru,i i å - ¢xu yi )2 + ¶ ¶xu l( xu 2 + yi i å u å 2 ) = 0 -2(ru - xu ¢Y) ¢Y +2lxu ¢ = 0 -2ru ¢Y + 2xu ¢Y ¢Y + 2lxu ¢ = 0 xu ¢(Y ¢Y + lI) = ru ¢Y (xu ¢(Y ¢Y + lI) ¢) = (ru ¢Y ¢) (Y ¢Y + lI)xu = Yru ¢ xu = (Y ¢Y + lI)-1 Yru ¢
  91. 91. 91 Users特徴matrixのUser(u)になっているかのバリデーション k by k matrix k by i matrix (where i=1..m) i by 1 matrix (for 1 user u where i=1..m) k by 1 matrix (for user u) X(k*n ) 1 2 u n 1 2 .. k Y ¢Y +lI Y xu xu = (Y ¢Y +lI)-1 Yru ¢ users matrix k*n X ¢ruÎ observed
  92. 92. 92 Items特徴matrixのItem(i)の解答 ¶L ¶yi = 0 ¶ ¶yi (ru,i i å - ¢xuyi )2 + ¶ ¶yi l( xu 2 + yi i å u å 2 ) yi = (X ¢X + lI)-1 Xri ¢
  93. 93. 93 Items特徴matrixのItem(i)になっているかのバリデーション k by k matrix k by u matrix (where u=1..n) u by 1 matrix (for 1 item i Where u=1..n) k by 1 matrix (for item i) yi =(X ¢X +lI)-1 Xri ¢ X ¢X + lI X ri ¢Î observed yi items matrix k*m Y X(n*k ) 1 2 i m 1 2 .. k
  94. 94. 94 ALS(交互最小二乗方法)について ALSのアリゴリズム Initialize Y→ランダム値(normal distribution)から初期化を行う repeat for u = 1 to n do end for for i = 1 to m do end for until covergence yi =(X ¢X +lI)-1 Xri ¢xu = (Y ¢Y +lI)-1 Yru ¢ xu = (Y ¢Y +lI)-1 Yru ¢ yi =(X ¢X +lI)-1 Xri ¢
  95. 95. 95 ALS(交互最小二乗方法)について ALSのアリゴリズム Initialize Y→ランダム値(normal distribution)から初期化を行う repeat for u = 1 to n do end for for i = 1 to m do end for until covergence // for // distributed computing/massive parallelization is possible // for // distributed computing/massive parallelization is possible yi =(X ¢X +lI)-1 Xri ¢xu = (Y ¢Y +lI)-1 Yru ¢ xu = (Y ¢Y +lI)-1 Yru ¢ yi =(X ¢X +lI)-1 Xri ¢ ua¹b ia¹b
  96. 96. 96 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ? 2.0 3.0 2.5 ? 2 3.5 4.5 ? ? 4.0 3 ? ? 3.0 2.5 ? 4 3.5 ? ? ? ? 5 4.5 2.0 ? ? ? 6 ? 1.0 1.5 1.5 ? Users/ Factors 6x3 特徴1 特徴2 特徴3 1 2 3 4 5 6 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 1.4 1.4 1.7 特徴2 2.1 2.3 1.1 1.5 2.1 特徴3 2.3 2.1 3.1 1.7 2.2
  97. 97. 97 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 2 3 4 5 6 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 1.4 1.4 1.7 特徴2 2.1 2.3 1.1 1.5 2.1 特徴3 2.3 2.1 3.1 1.7 2.2
  98. 98. 98 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 3 4 5 6 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 1.4 1.4 1.7 特徴2 2.1 2.3 1.1 1.5 2.1 特徴3 2.3 2.1 3.1 1.7 2.2
  99. 99. 99 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 3 4 5 6 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 1.4 1.4 1.7 特徴2 2.1 2.3 1.1 1.5 2.1 特徴3 2.3 2.1 3.1 1.7 2.2
  100. 100. 100 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 3 4 5 1.2 2.3 1.9 6 Factors/I tems 3x5 A B C D E 特徴1 1.1 1.9 1.4 1.4 1.7 特徴2 2.1 2.3 1.1 1.5 2.1 特徴3 2.3 2.1 3.1 1.7 2.2
  101. 101. 101 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 2.1 1.2 1.3 3 1.3 2.0 2.1 4 1.2 2.3 1.3 5 1.2 2.3 1.9 6 1.2 1.2 1.3 Factors/I tems 3x5 A B C D E 特徴1 特徴2 特徴3
  102. 102. 102 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 2.1 1.2 1.3 3 1.3 2.0 2.1 4 1.2 2.3 1.3 5 1.2 2.3 1.9 6 1.2 1.2 1.3 Factors/I tems 3x5 A B C D E 特徴1 特徴2 特徴3
  103. 103. 103 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 2.1 1.2 1.3 3 1.3 2.0 2.1 4 1.2 2.3 1.3 5 1.2 2.3 1.9 6 1.2 1.2 1.3 Factors/I tems 3x5 A B C D E 特徴1 1.2 特徴2 2.1 特徴3 1.3
  104. 104. 104 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 2.1 1.2 1.3 3 1.3 2.0 2.1 4 1.2 2.3 1.3 5 1.2 2.3 1.9 6 1.2 1.2 1.3 Factors/I tems 3x5 A B C D E 特徴1 1.2 特徴2 2.1 特徴3 1.3
  105. 105. 105 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 2.1 1.2 1.3 3 1.3 2.0 2.1 4 1.2 2.3 1.3 5 1.2 2.3 1.9 6 1.2 1.2 1.3 Factors/I tems 3x5 A B C D E 特徴1 1.2 1.3 特徴2 2.1 2.2 特徴3 1.3 1.1
  106. 106. 106 User-Item Ratings Matrixをlow-rank 特徴(latent factors)matrixに分解する Users/Items 6x5 A B C D E 1 ?/0 2.0 3.0 2.5 ?/0 2 3.5 4.5 ?/0 ?/0 4.0 3 ?/0 ?/0 3.0 2.5 ?/0 4 3.5 ?/0 ?/0 ?/0 ?/0 5 4.5 2.0 ?/0 ?/0 ?/0 6 ?/0 1.0 1.5 1.5 ?/0 Users/ Factors 6x3 特徴1 特徴2 特徴3 1 1.0 1.1 2.1 2 2.1 1.2 1.3 3 1.3 2.0 2.1 4 1.2 2.3 1.3 5 1.2 2.3 1.9 6 1.2 1.2 1.3 Factors/I tems 3x5 A B C D E 特徴1 1.2 1.2 1.3 4.1 1.9 特徴2 2.1 2.1 2.2 1.2 2.1 特徴3 1.3 1.3 1.1 2.3 1.3
  107. 107. 107 Matrix Factorizationのコンセプト(通常のデータ) お客さんが買い物をしてレビューをあげないのが通常のショッピングデータ Users/Ite ms 6x5 A B C D E 1 ? 1 1 1 ? 2 1 1 ? ? 1 3 ? ? 1 1 ? 4 1 1 1 1 ? 5 1 1 ? 1 ? 6 ? 1 1 1 ? Items Users
  108. 108. 108 オリジナル研究のreference (1)Collaborative Filtering for Implicit Datasets -Yifan Hu,Yehuda Koren,Chris Volinksy http://yifanhu.net/PUB/cf.pdf
  109. 109. 109 User-Item Ratings MatrixをPreference Matrixに変換する Users/Ite ms 6x5 A B C D E 1 0 1 1 1 0 2 1 1 0 0 1 3 0 0 1 1 0 4 1 1 1 1 0 5 1 1 0 1 0 6 0 1 1 1 0 pui = 1 when ru,i > 0 0 when ru,i = 0 ì í ï îï
  110. 110. 110 0と1の区別が曖昧のでConfidenceパラーメタをつかう ratingsの値がないないものに対して0を使う cu,i = 1+a*ru,i
  111. 111. 111 実際のPreference matrixのコスト関数(Cost/Loss function) min cui u,i å (pui - xu ¢yi)2 +l( xu 2 u å + yi i å 2 )
  112. 112. 112 コスタ関数を最小化によりuser ベクトルとitemベクトルの解答 min cui u,i å (pui - xu ¢yi)2 + l( xu 2 u å + yi i å 2 ) xu = (YCu ¢Y + lI)-1 YCu pu ¢ yi = (XCi ¢Y + lI)-1 XCi pi ¢
  113. 113. 113 Sparkでデータフローとモデル作成 1. Input data • tuples(user_id,item_id,ratings)がsparseデータ user_id item_id ratings 1 1 1 2 5 1 3 102 1 .. ..
  114. 114. 114 Sparkでデータフローとモデル作成 1. Input data 2. modelling(training data)+parameter tuning • 下記のパラーメタをtuneできる • k:特徴数(default=10) • λ:正則化固定値(default=0.01) • α:Confidenceパラメターに関係すもの(for implicit ratingsデータ、 default=1.0) • maxIteration数(default=10) • implicitPrefs(default=false) • userBlocks(並列処理で使う値>0) • productBlocks(並列処理で使う値>0)
  115. 115. 115 Sparkでデータフローとモデル作成 1. Input data 2. modelling(training data)+parameter tuning 3. model test • モデルのバリデーションのためにtestデータとテスト 4. RMSE比較 • TrainingデータとtestデータのRoot Mean Squared Error比較
  116. 116. 116 Sparkでデータフローとモデル作成 1. Input data 2. modelling(training data)+parameter tuning 3. model test 4. RMSE比較 5. recommendForUsers • Top10、Top20かForAll(処理が重たい O(nmk))
  117. 117. 117 実装でわかったこと、注意点など 1. Sparkのバージョン依存(ALSの実装がSpark 2.2.0以後) • システムで使っているEMRのバージョンによりSparkが2.1.1パッケージ化さ れていた • FullにALSの実装がそのsparkバージョンに入っていない • 必要な部分を新バージョンからcopyを行なって実装(spark 2.2.0)
  118. 118. 118 実装でわかったこと、注意点など 1. Sparkのバージョン依存(ALSの実装がSpark 2.2.0以後) 2. ALSの機能が未実装(cold-start,non-negative matrix) • TrainingデータとTestデータのsplitでモデルで使っていないitemがtest データに入っている場合の考慮がない • Trainingデータのセットをほぼ9.8割使った • Non-negative値をTop10レコメンド抽出で防ぐことができた
  119. 119. 119 実装でわかったこと、注意点など 1. Sparkのバージョン依存(ALSの実装がSpark 2.2.0以後) 2. ALSの機能が未実装(cold-start,non-negative matrix) 3. わかったこと (入力データの制限) • user_idとitem_idをInteger型に変換する • 入力データでどちらがstringできてもuniqueして数字化した
  120. 120. 120 実装でわかったこと、注意点など 1. Sparkのバージョン依存(ALSの実装がSpark 2.2.0以後) 2. ALSの機能が未実装(cold-start,non-negative matrix) 3. わかったこと (入力データの制限) 4. 進められる実装(sparkとEMRのバージョンなど) • sparkのバージョン2.2.0以後、emrの新バージョン
  121. 121. アイテム相関
  122. 122. 122 強調フィルタリング(CF)アイテム相関 (1)アイテムベースの協調フィルタリングのイメージ (2)コサイン類似度(CosineSimilarity)について (3)DIMSUMアルゴリズム (4)実際の実装
  123. 123. 123 アイテムベースの協調フィルタリングのイメージ 台北 バンコク ホノルル グァム 対象ユーザ 0 1 0 0 旅行者1 2 1 0 0 旅行者2 1 0 0 0 旅行者3 0 0 3 2 旅行者4 2 3 1 0 旅行者5 1 0 2 5
  124. 124. 124 アイテムベースの協調フィルタリングのイメージのReference レコメンドアルゴリズムの基本と周辺知識と実装方法 -Takeshi Mikami https://www.slideshare.net/takemikami/ss-76817490
  125. 125. 125 アイテムベースの協調フィルタリングのイメージ 台北 バンコク ホノルル グァム 対象ユーザ 0 1 0 0 旅行者1 2 1 0 0 旅行者2 1 0 0 0 旅行者3 0 0 3 2 旅行者4 2 3 1 0 旅行者5 1 0 2 5
  126. 126. 126 アイテムベースの協調フィルタリングのイメージ 台北 バンコク ホノルル グァム 対象ユーザ 0 1 0 0 旅行者1 2 1 0 0 旅行者2 1 0 0 0 旅行者3 0 0 3 2 旅行者4 2 3 1 0 旅行者5 1 0 2 5 台北との類似 度 1 0.8 0.34 0.29
  127. 127. 127 アイテムベースの協調フィルタリングのイメージ 台北 バンコク ホノルル グァム 対象ユーザ 0 1 0 0 旅行者1 2 1 0 0 旅行者2 1 0 0 0 旅行者3 0 0 3 2 旅行者4 2 3 1 0 旅行者5 1 0 2 5 台北 1 0.8 0.34 0.29 バンコク 0.8 1 0.25 0.25 ホノルル 0.34 0.25 1 0.79 グァム 0.29 0.0 0.79 1 類似度matrix
  128. 128. 128 アイテムベースの協調フィルタリングのイメージ 台北 バンコク ホノルル グァム 台北 1 0.8 0.34 0.29 バンコク 0.8 1 0.25 0.25 ホノルル 0.34 0.25 1 × グァム 0.29 0.0 0.79 1 台北 1 0.8 0.34 0.29 バンコク 0.8 1 0.25 0.25 台北 バンコク ホノルル グァム 対象のユーザ 0 1 0 0 台北 0.8 バンコク 1 ホノルル 0.25 グァム 0.0 対象ユーザの訪問回数と 類似度matrixの積
  129. 129. 129 コサイン類似度(Cosine Similarity)について ベクトル同士の類似度の関数である、aとbベクトルのコサインをこちらの方程式で表せる Projection
  130. 130. 130 コサイン類似度(Cosine Similarity)について 先の例だと各ユーザの旅先行回数が国名のベクトルのコンポーネントとして考えてよい 台北 バンコク ホノルル グァム 対象ユーザ 0 1 0 0 旅行者1 2 1 0 0 旅行者2 1 0 0 0 旅行者3 0 0 3 2 旅行者4 2 3 1 0 旅行者5 1 0 2 5
  131. 131. 131 DIMSUMアルゴリズム DIMSUMアルゴリズムを使って大体のコサイン類似度(approximate cosines)の値を出力できる 下記の場合はが有利 Users/Item s 1 2 .. n 1 1 0 0 1 2 0 0 0 1 3 1 0 0 0 4 .. .. .. .. .. .. .. .. .. .. .. .. .. .. m 1 0 0 1 mが結構大きい ~ 10^12 n<<m ~ 10^6 Lが各ユーザの最大のノンー ゼロ値 User Item
  132. 132. 132 オリジナル研究のreference (1)Dimension Independent Matrix Square using MapReduce(DIMSUM) -Reza Bosagh Zadeh https://stanford.edu/~rezab/papers/dimsum.pdf https://stanford.edu/~rezab/papers/dimsumslides.pdf http://www.jmlr.org/papers/volume14/bosagh-zadeh13a/bosagh-zadeh13a.pdf
  133. 133. 133 通常のmapreduceでベクトル同士の内積を求める 通常のmap reduceでitemのコラムの内積の実装
  134. 134. 134 通常のmapreduceでベクトル同士の内積を求めるイメージ 1 2 3 1 1 1 0 2 1 1 0 … 1 1 0 … 1 0 1 m 0 1 1 Item User User 1→ Item1,1 ; Item2,1 User 2→ Item1,1 ; Item2, 1 … … User m→Item2,1 ; Item3, 1 Mapper User 1(Key,Value) User 2(Key,Value) .. User m(Key,Value) (<Item1,Item1>, <1,1>) (<Item1,Item1>,<1,1 >) .. (<Item2,Item2>,<1, 1>) (<Item1,Item2)>,< 1,1>) (<Item1,Item2>,<1,1 >) .. (<Item2,Item3>,<1, 1>) (<Item2, Item1>,<1,1>) (<Item2, Item1>,<1,1>) .. (<Item3, Item2>,<1,1>) (<Item2, Item2>,<1,1>) (<Item2, Item2>,<1,1>) .. (<Item3, Item3>,<1,1>) Key Value (Item1,Item2) (1,1);(1,1) (Item2,Item3) (1,1) .. .. Reducer
  135. 135. 135 DIMSUMアルゴリズム 全てのItemのカラム同士のペアをmapperに渡せずにサンンプリングをする
  136. 136. 136 DIMSUMアルゴリズム 1. 結構人気のItemのサンプリング率を低くする(赤) 2. サンプリングの確率1のものの通常のコサイン類似度を行う(青) 3. サンプリング通っているものに対してγでわる、代替のコサイン類似度を算出(緑)
  137. 137. 137 Complexityが減る Userの最大数mに依存しないから次元減らすmapreduceアルゴリズムになる
  138. 138. 138 実際の実装 1. InputデータがRow matrix形式 2. Brute Forceメソッドが選択されたら各Itemペアの類似度を通常通り算出する 3. DIMSUM with threshold値(s)のメソッドが選択されたらDIMSUMで代替のコサイン類似度を算出 1. S値が類似度の制限(例→0.1より高い類似度の算出希望) 2. ϒの値が求めらる 4. SparkのmlのCosineSimilarityライブラリと似たような実装を行なった 5. Transform処理を除いた 1. 類似度行列算出のみ(Similarity Matrix) 2. 未知のユーザの履歴から推測する部分のtransform処理を行なっていない(負荷が超高い) g =10*log(m)/ s

×