どんな本?
最近出た日本語のレコメンド本。
界隈で話題になっていたので読んでみた。
この記事では本の内容に触れつつ感想を書いていく。
GitHub: https://github.com/oreilly-japan/RecommenderSystems
どのへんが良い本なのか
まず、日本語で書かれたレコメンドの本には初学者にちょうどいい本がなかった。
(難しすぎたり、やや内容が古かったり。。)
この本はレコメンドに関連する技術や活用方法が網羅的に説明されているのがとても良い。
実際自分は新卒の時にこの本があれば良かったなぁと思う。
一言で言えば「近年のレコメンド界隈の全体像を把握するにはちょうどいい本」
逆に細かい部分の詳細には立ち入っていないので、各分野について詳しく知りたければ他の本やドキュメントを漁る必要がありそう。
構成
この本はざっくり以下の3パートに分割できる。
-
1~4章 レコメンドの導入、活用方法
- サクッと読める
-
5章 レコメンドで使われる手法の紹介
- ボリュームがでかい
- GitHubにコードが置いてある
-
6~8章 実サービスでの運用
- オンライン/オフラインでの検証方法など
- 7章は評価指標(メトリクス)について
それぞれ感想を書いていく。
1~4章 レコメンドの導入、活用方法
「レコメンドとはなんぞや? なぜ重要なのか?」
の部分。
数式がほとんど出てこないので、ビジネスに興味はあるけど数式が苦手な人でもサクッと読めると思う。
僕はエンジニアなので、レコメンドシステムと聞くとどうしても具体的な手法にばかり興味がいってしまう。
一方で1-4章では多角的な視点からレコメンドの役割について考えていて、勉強になった。
例えば
- 検索システムとの比較、役割の違い
- UIの重要性
- どのような課題を解決できるのか
などなど。
「トンカチを持つと全てが釘に見える」
とはよく言われるけど、それはレコメンドについても同様だと思う。
何か課題があって、その課題を解決するための手段としてレコメンドが存在するんだということを僕たちは肝に銘じておかなければならない。
とまぁ俯瞰的な内容が1-3章。
4章はもう少し技術的な部分に立ち入ってて、レコメンドにおいて重要な
- コンテンツベースの手法
- 協調フィルタリング
が説明される。
5章 レコメンドで使われる手法の紹介
この5章では雰囲気がガラリと変わる。
Pythonのコードを添えて具体的な実装方法の説明に入る。
検証に使われるデータはこの分野ではおなじみの "Movie Lens"。
コードは本にも載っているがこれだけ見ていてもわかりづらいので、必要に応じてGitHubに置いてあるnotebookを動かしてみると理解が深まると思う。
自分はGoogle Colabでいくつか回してみた。
ちなみにAmazonのレビューで「コードが読みにくい」という意見があったが、GitHubのコードを見に行けば済む話なので自分はそんなに気にならなかった。
紹介されている手法は以下
-
ランダム推薦
- ランダムに推薦した場合
- 他の手法と比べる時のbaselineとしての意味しか持たない
-
統計情報などのルールベースの推薦
- 売り上げ順に推薦したり、ユーザーの年齢などのデモグラ情報使ったり
-
アソシエーションルール
- 同時に買われる商品の共起を数え上げたりするやつ
- 「おむつとビールが同時に購入される」みたいな逸話
-
ユーザー間型メモリベース協調フィルタリング
- バッチではなくリアルタイムに類似度を計算する
-
行列分解
- ユーザー✖️商品のmatrixがスパースな場合にどうやって分解するか
- MF (Matrix Factorization)
- BPR (Bayesian Personalized Ranking)
- FM (Factorization Machine)
- etc.
-
自然言語処理手法の推薦システム応用
- 自然言語処理の手法をどうやって推薦処理に活かすか
- word2vecとかその辺の話
- ユーザーの購入遷移を時系列データとして扱う
-
深層学習 (Deep Learning)
- 深層学習を用いたレコメンド
- 特徴量生成に使う or モデリングに使う
-
バンディットアルゴリズム
- 強化学習の文脈
- A/Bテストに比べて利益最大化しやすいが、知見を得づらい
見てわかる通り、多岐に渡っているので辞書的に読むのでもいいかもしれない。
全体をざっと読んで気になる手法があればコードを動かしてみるといいと思う。
6~8章 実サービスでの運用
実際にどういう仕組みで運用するのかについての話。
例えば近年多くの企業では
- candidateとなる商品をざっくり選ぶ(recall重視)
- GBDTなどでrerankする
などの複数のステージにまたがってシステムを構成することが多い。
他にもオンライン/オフラインでそれぞれ
-
オンライン
- どのようにログを落とすか
- どのようにA/Bテストを行うか
-
オフライン
- どのようなメトリクスを採用すべきか
- MRR, MAP, nDCG, etc.
- メトリクスごとの違い
などについて説明されている。
感想
A/Bテストの他にインターリービングの話も載ってたり、深層学習や強化学習にも触れられていたり、とにかく幅広いなーと思った。
参考文献も比較的最近のものが多く、良かった。
例えばDeep Learningの章ではRecSys 2019のベストペーパーで提言された
「近年提案された深層学習の推薦システムのほとんどがちゃんとチューニングしたk近傍システムよりも精度が悪かった」
という身も蓋もない話が載ってたりとか。
コードが全部GitHubに載ってるのも嬉しいところ。
まとめ
- 初学者がレコメンドについて網羅的に理解するには最適
- 各トピックの詳細については他の資料をあたる必要がありそう