Save 37% off PRO during our Black Friday Sale! »

機械学習輪講会資料

 機械学習輪講会資料

Wantedly機械学習輪講会での発表資料です。

9a18f43cea38f204f59451b0b83430d1?s=128

mahiguch

August 01, 2019
Tweet

Transcript

  1. 機械学習輪講会資料

  2. Masahiro Higuchi / 樋口雅拓 • グリーグループのリミア株式会社で、LIMIA という住まい領域のメディアを 作っています。ゲーム会社ですが、最近はメディアに力を入れています。 • 機械学習のエンジニアですが、iOS,

    Android,JSなどもやっている何でも屋 です。4歳の娘のパパ。twitter: @mahiguch1 • https://limia.jp/ • https://arine.jp/ • https://aumo.jp/ • https://www.mine-3m.com/mine/
  3. 背景と目的: LIMIAとは? • メディアサービス。記事一覧を表示し、タップ すると記事詳細を閲覧できる。 • 記事詳細の最下部に別の記事への回遊導 線が付いている • 記事一覧:

    k-meansでユーザを分類し、それ ぞれの中でCTRが高い順に表示 • 記事下: トピックモデルで関連記事、協調フィ ルタでオススメ記事を表示。 → 教科書に書いてあるレベルは対応したため、 更に向上させるには論文調査が必要!
  4. 今月読んだ論文 社内で論文輪読会を開催し、まず次の 2つを読んで発表した。 • Personalized News Recommendation Based on Click

    Behavior: https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/3559 9.pdf • k-means++: The Advantages of Careful Seeding: http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf 今回は社内で行った発表と同様に、上記 2つの論文について説明します。他社さんの論文輪読会の 雰囲気を知りたいため、普段通りに行っていただけると助かります。
  5. Personalized News Recommendation Based on Click Behavior

  6. introduction 推薦を実現する主要な方法として、情報フィルタリングと協調フィルタがある。 情報フィルタリングは、ユーザの興味や属性をもとに推薦を行う。 協調フィルタは、類似ユーザの行動をもとに推薦を行う。 Google Newsでは2009年以前、協調フィルタを利用していた。 情報フィルタリングと協調フィルタを混ぜて利用することで、改善が出来た この論文では、次の3点について述べる。 * ログ集計

    * ユーザ興味予測 * 協調フィルタにフィルタリングを混ぜた結果
  7. GoogleNewsにおけるpersonalization 協調フィルタには、次の2点の問題があった。 * Cold Start * エンターテイメントだらけになってしまう これらの問題を解決するために、情報フィルタを利用した。 提案方式では、ユーザ興味変化に追随し、少ない情報量でも対応できる。

  8. 関連研究 推薦は一般的に情報フィルタと協調フィルタを使っている。 情報フィルタはユーザ属性を用いる手法で、ユーザ属性はユーザがアクセスした記事の属性を使っ て求める。協調フィルタは類似ユーザ行動を使って求める。 これまでの研究では、 dislikeを特徴に使っていたが、クリックログだけを特徴として使っている GoogleNewsには適用出来ない。 ユーザの興味は短期と長期に分けられる。 短期興味は人気のあるトピックで、頻繁に変化する。 長期興味はユーザの本質的な興味で、あまり変化しない。

    従来の研究では短期長期をそれぞれ予測していたが、提案方式では短期興味から長期興味を予測 する。
  9. ユーザ興味の時間経過による変化 ユーザ毎カテゴリー毎の月別クリック数を調べてみた。 実際のデータを使ってユーザの興味を予測してみた結果、時間が経過するにつれ誤差が大きくなっ た。

  10. ニュースの傾向 国別の傾向を調べてみた。 アメリカでは、大統領選挙があったとき政治のカテゴリーの CTRが増加した。 EUでは、EuroCupがあったときスポーツカテゴリーの CTRが増加した。

  11. 一般的なニューストレンドが個人の興味に与える影響 * 興味は時間が経つと変化する * カテゴリー毎のクリック分布は、大きなニュースがあると変化する。 * 地域毎にニュースのトレンドは異なる * ユーザの興味は、地域のニューストレンドに関係している。

  12. ベイズを使ってユーザの興味を予測する ユーザの興味は、「本質的なもの」と「地域のトレンド」に分類できる。 本質的なものは、性別年齢専門性などによって形成され、あまり変化しない。 地域のトレンドは頻繁に変化する。 まず、ユーザの本質的な興味を予測する。 次にこれを時系列で足し上げる。 最後に地域のトレンドを混ぜることで、ユーザの今の興味を予測する 。

  13. 本質的な興味予測 p(click | category=ci) = p(category = ci|click) p(click) /

    p(category = ci) これを「ユーザ毎」と「地域全体」の 2つを取得する。 地域全体と同じ動きをしていれば短期的な興味、違う動きをしていれば本質的な興味とわかる。 # 過去分の足し上げ これで特定の期間(1ヶ月とか)のユーザの興味が分かったので、過去分を足し上げる。 クリック数による加重平均を取る。
  14. 現在の興味を予測 地域の過去1時間のカテゴリー毎のクリック数を取得し、これを地域のトレンドとする。 合計クリック数の部分を地域のトレンドにすることで両方を混ぜたことにする???おかしくな い??? 加重平均を取っており分母が合計クリック数となっている。 合計クリック数が0だと計算できないので、 10回クリックされたものとして計算を始める。 これにより、最初は地域のトレンドが強く、クリックするに従って本質的な興味が強くなっていく。

  15. 記事推薦 記事は、推薦スコア順に並べ替える。 推薦スコアは、「上記で示した情報フィルタスコア」に「参考文献 7の協調フィルタスコア」を掛け合わ せたものを使う。 Rec(article) = IF(article) x CF(article)

    これにより、両方の良いとこどりができる。
  16. 結論 # 結果 推薦枠のCTRは30%増加したが、GoogleNewsTop全体のCTRは変わらなかった。 つまり、その他の枠からクリックを奪った形になる。 また、1日あたりの訪問回数は 14%増加した。 # まとめと今後 分析したところ、ユーザの興味は短期と長期に分けられることが分かった。

    それをベイズで表現して組み込んだ結果、より良い成果を獲得できた。 枠位置補正が必要。 情報フィルタと協調フィルタを混ぜる方法を洗練させる。 ユーザ行動分析を通じて、さらに理解を深めたい。
  17. k-means++: The Advantages of Careful Seeding

  18. introduction k-means++を実装することになったので、せっかくなので原典論文を読んでみた。 # Introduction k-meansは初期値をランダムで決めるが、そこを改良して k-means++と名付けた。 # Related Work もっと誤差が少ないものは存在するが、遅くて使い物にならなかった。

    # Definitions k-meansは誤差の二乗和の最小化を目指す。
  19. K-means algorithm 1. クラスタ中心点をランダムに選択する。 2. 全てのデータについて、最近傍中心点 (所属するクラスタ)を決める。 3. クラスタに所属する全てのデータを中心点として再設定する。 4.

    (2)(3)を変化がなくなるまで繰り返す
  20. K-means++ algorithm k-meansの(1)の初期値選択を次のように変更する。 1a. 1つ目の中心点をランダムに選択する。 1b. 次の中心点を選択するとき、他の中心点から遠いものが選ばれ易くする。 1c. (1b)を繰り返して、必要な中心点を作る。 2-4.

    標準的なk-meansと同じ # 結果 k-meansだと稀に大きな誤差になることがあるが、 k-means++だと安定した結果を得られる。 誤差が20%減少し、速度が70%速くなった。
  21. // kmeans++の初期値を返す。入力のnumClusterはクラスタ数、dataは分類対象データ。 // 初期値同士を遠ざけることで、局所解を防ぐと共に収束を早くする。 // SEE ALSO: http://ilpubs.stanford.edu:8090/778/1/2006-13.pdf func seeds(numCluster

    uint64, data []*entityIdeaVector.Entity) ([][]float64, error) { seeds := make([][]float64, numCluster) e := data[rand.Intn(len(data))] seeds[0] = e.Vector for i := uint64(1); i < numCluster; i++ { dist := make([]float64, len(data)) var sum float64 for k, v := range data { _, dist[k] = nearest(seeds, v.Vector) sum += dist[k] } threshold := rand.Float64() * sum var stack float64 var dataNum int for k, v := range dist { stack += v if threshold < stack { dataNum = k break } } seeds[i] = data[dataNum].Vector } return seeds, nil }
  22. 最後に

  23. これから読みたい論文や書籍 • * Google news personalization: scalable online collaborative filtering:

    https://www2007.org/papers/paper570.pdf • * Amazon amazon-all-the-research-you-need-about-its-algorithm-and-innovation: https://www.cs.umd.edu/~samir/498/Amazon-Recommendations.pdf • * Netflix The Netflix Recommender System: Algorithms, Business Value, and Innovation: https://beta.vu.nl/nl/Images/werkstuk-fernandez_tcm235-874624.pdf • * Gunosy Greedy Optimized Multileaving for Personalization: https://arxiv.org/pdf/1907.08346.pdf • * Yahoo! News Embedding-based News Recommendation for Millions of Users: https://www.kdd.org/kdd2017/papers/view/bridging-collaborative-filtering-and-semi-supervised -learning-a-neural-appr • * 書籍 推薦システム―統計的機械学習の理論と実践 ― https://www.kyoritsu-pub.co.jp/bookdetail/9784320124301 • * 書籍 これからの強化学習: https://www.morikita.co.jp/books/book/3034
  24. まとめ • 今月読んだ論文2本について説明した • 推薦を改善することで回遊性と再訪頻度の向上を目指しており、今月から 有名論文を読み始めたところ。毎週1本読みたい。 • 一人だと遅いので、社内で論文輪読会を立ち上げた。社外にも積極的に 参加していきたい。 •

    システム的にはオフライン検証基盤構築が急務。 • アドバイスやご意見等ありましたら、教えて欲しい。 ご静聴、ありがとうございました!