実践 機械学習 〜レコメンデーションにおけるイノベーション〜

実践 機械学習 〜レコメンデーションにおけるイノベーション〜を読みました。60ページぐらいで1時間もかからず読むことが出来ます。内容は機械学習アルゴリズムの紹介ではなく、機械学習によるレコメンデーションの全体像を掴むことが出来るような内容でした。機械学習とはどういうもので、実際に構築するにはこういう要素が必要で、チューニングにはこういう手法があるといった内容です。そのため、機械学習に関する予備知識がなくともざっくり読めるのではないかと思います。

  • 機械学習とレコメンデーションとは
  • 正確さと開発コストのトレードオフを意識する必要がある。
  • 言動ではなく行動が重要。好みなどを回答するのは一部のユーザーであり、既に偏っている。そうではなくて、各ユーザーの実際の行動(参照ページ、リンクのクリック、スクロールなど)が重要であり、それらの情報を収集できるようにWebサイトを作っておく必要がある。
  • 履歴マトリクス、共起マトリクス、インジケーターマトリクス
    • インジケータマトリクスはMahoutのRowSimilarityJobを利用して作成する
  • レコメンデーションエンジンの実装にSolrを利用する。
    • ドキュメントのフィールドに共起インジケータを追加することでSolrクエリの結果をそのままレコメンデーションデータとして利用できる。
  • 音楽レコメンダーを例に実装の詳細について解説
  • ディザリングとアンチフラッド
  • マルチモーダルとクロスレコメンデーション

原書であるPractical Machine Learningも入手していたんですが、結局読まずにいたら日本語訳版も無料で公開されたので読んでみました。ありがたいはなしです。あと、先日のHadoop Conference Japan 2014でも本書に関するセッションがあったようです。動画とスライドが公開されています(このセッションも興味があったんですが、Prestoの方に参加しました)。

個人的にヒットしたのはどこまで正確さを求めるかという部分でした。

そのための重要なスキルは、「良いというの は、どのくらい良いのか?」という質問に答えることができる、というスキルです。

最近、仲間内でMahoutイン・アクションを読み合っているのですが、そこでも正確さの話が出ていて、その値はいいのか悪いのかみたいな話がありました。本書を読んで、自分自身の過去の経験も振り返り、正確さは本質ではないのだなーと思いました。結局、どれほど値が良くても、それをビジネス的に活かす部分まで繋げられていなければ、単に値がいいけどそれで?という話になるなーと(もちろん、モデルができていて、正確さを1%向上すると利益が0.5%向上するみたいなケースは絶対額にもよりますが正確さを上げることにリソースを割いた方がよいと思います)。

あと、RowSimilarityJobでインジケータマトリクスを作成するには「ログの対数尤度比検定(log likelihood ratio test = LLR)」を利用すると書いてあったのですが、これは具体的にはRowSimilarityJobクラスを実行する際の引数として--similarityClassnameオプションを指定する際にDistributedLoglikelihoodVectorSimilarityクラスを指定するということを指すようです。最初にmahout 0.5のRowSimilarityJobのJavaDocを読んだ際に--similarityClassnameオプションを見落としてて、どうやってインジケータマトリクスが作れるのか理解できずに1時間ほどググったりして悩んでましたorz(最終的にこのMLにたどり着いて複数実装がありそうなことに気づき、ローカルに入れていたmahoutのソースを確認したらDistributedVectorSimilarityインタフェースの実装が大量に見つかりました。。)

ちなみに、本書を読んで一番良かったのは、このブログを書くために色々調べたり、振り返ったことだと思います。やはりブログを書くのは重要ですねw