takuti.me ABOUT

2014-09-01

【実践 機械学習】レコメンデーションをシンプルに、賢く実現するための3か条

Amazonの商品レコメンドやTwitterのオススメユーザ表示のような、アイテムを推薦してくれるシステムは便利だ。僕らユーザは新たな興味深い商品を簡単に発見できるし、システムを提供する側は場合によっては推薦そのものが効果的なマーケティングになる。

このような推薦システムは、機械学習を応用したアプリケーションの1つ。

機械学習と聞くと、それだけで複雑な数式をイメージして「無理無理、そんなのは専門家が考えてくれ」と言いたくなるかもしれない。でもこれから挙げる3か条を知れば、きっとそんな人でも推薦システムをつくることができる。ベイズの定理なんて出てこないから安心してほしい。

1. ユーザの評価ではなく、行動を見る

Amazonで★5つとか付けている奴も案外その基準はテキトーなもんだ。自分の好みを正確に自分で理解している人なんていない。

だからレコメンデーションのためにユーザの趣味・嗜好を知りたければ、行動履歴を探るのが良い。友達のブラウザの閲覧履歴を覗けば、たぶん彼の性癖の1つくらいは読み取れる。そんな感じだ。

大切なのは、ユーザがどう思ったかではなくて、何をしたか。行動が全てを物語っている。

2. たくさんの行動履歴から傾向を見つけ出す

いくら行動が全てを物語っているとはいえ、1人の行動を熱心にウォッチし続けても意味はない。そこから何となく嗜好を予想してアイテムをオススメするなんて、そりゃ友達にマンガを貸すときの話だよ。

インターネット上のアプリケーションでそんな推薦を行うのは賢いとは言えない。せっかく日々膨大なデータが生まれているんだから、もっとたくさんのユーザの行動履歴を手に入れて、そこから有益な傾向を見つけ出すのが良い。

Amazonの この商品を見たお客様はこれも見ています みたいなアイディアがまさにそれだ。あたかもコンピュータがデータ(履歴)を学習しているかのように推薦を行うから『機械学習』というわけだ。

行動履歴から傾向を見つけ出すときはApache Mahoutが役に立つ。というか、こいつが全てをやってくれる。だから僕らは数式など気にせず、ただログを手に入れさえすればいい。それで十分。

とはいえブラックボックスのままツールを乱用するのは言語道断なので、ここはひとつ、みんな大好きなアニメを例にとって履歴から傾向を見つけ出す方法を説明しよう。

3人のアニメファンをイメージする。タカシと、ヒロキと、ケン。彼らがこれまでにBDを購入したアニメのタイトルはこんな感じ。

きんモザ ごちうさ Free!
タカシ
ヒロキ
ケン

BDの購入は、そのアニメを好んでいるが故の行動と言える。さて、このBD購入履歴から傾向を見つけて、ヒロキに新しいアニメをオススメしてみよう。

まず、タカシがきんモザごちうさを共に買っていることから、この2つのアニメは共に好まれやすいという傾向が予想できる。そこで、きんモザだけを買っているヒロキにはごちうさをオススメしよう、という話になる。これがAmazonも使っている 協調フィルタリング という考え方の基本だ。

今は3人だから微妙だけど、データが多ければ多いほどこのような 共に好まれやすい傾向 が推薦の根拠になる。以下のような状況では、もはやヒロキにごちうさを薦めない理由は無い。

きんモザ ごちうさ Free!
タカシ
ヒロキ
タロウ
ミサ
シュン
ケン

これが行動履歴から傾向を判断し、推薦につなげていく基本的なアイディアになる。そして 共に好まれやすい傾向 をログから数値的に見つけ出してくれる機能を備えたのが、Mahoutというライブラリだ。

3. 高速な検索技術を活用する

今、きんモザごちうさが共に好まれやすいという傾向がわかった。それでは、ここでもし新しい登場人物・サトシが "きんモザ BD" というキーワードでAmazonを検索していたら、Amazonのシステムはどう対応すべきだろう?

答えはシンプルだ。すかさず、ごちうさのBDも こんな商品もいかがですか? と表示すればいい。

(ここまで書いてから確かめたら案の定そうなった)

amazon

これが現実的なシーンでの推薦システムの動きになる。傾向に基づいた推薦は闇雲に広告を打つよりよっぽど賢いし、効果的だ。

ただし、「きんモザで検索していたら、すかさずごちうさも表示する」という推薦処理は高速に行う必要がある。複雑なデータベースからきんモザを見つけて、そこから更にごちうさと共に好まれやすいという傾向を引っ張ってきて、ごちうさを見つけて・・・とやっていては遅すぎる。

【Now Loading...】とかActivity Indicatorでも画面に出すか?いや、ありえない。その間にサトシはcookpadへ移動してお昼ごはんのことを考え始めてしまう。

そんなときにはApache Solrを活用したい。こいつはインデックスを利用した高速な検索を実現する検索エンジンだ。これによって、きんモザごちうさが共に好まれやすいという傾向を予め明示的に記憶した検索システムが構築できる。すると、きんモザが検索された時に即座にごちうさという関連ワードを引くことができて、高速に推薦ができるというわけだ。

 

そんなわけで

  • ユーザの評価ではなく、行動を見る
  • たくさんの行動履歴から傾向を見つけ出す
  • 高速な検索技術を活用する

この3か条が、たとえ数式が理解できなくても、強力な推薦システムを構築・運用することができるエッセンスになる。

まずはユーザの行動履歴を集めて、そこからMahoutを使って傾向を見つけ出す。そして検索エンジンSolrにその傾向を反映する。(こういうデータ処理は一日一回、夜中にまとめてやるのがいい)

あとはシステムを走らせておけば、ユーザが検索を行う度に関連する情報が素早く引き出され、レコメンドされるという流れだ。おめでとう、それは立派な推薦システムだよ。


さて、無料で公開されている電子書籍『実践 機械学習』の原著のほうを読みました。ここまでに書いたものは一応その要点。

O'Reilly Village/オラの村 - 電子書籍『実践 機械学習』の無料ダウンロードが可能に!

著者は『Mahoutイン・アクション』の著作でもお馴染みのTed DunningとEllen Friedman。Apache Mahoutプロジェクトでプロジェクトマネジメント委員やコミッタとして活躍しながら、MapR社でチーフアプリケーションアーキテクトやコンサルタントを務めている両氏が、機械学習の初学者のために書き下ろしたの一冊です。50ページほどの手軽なボリュームながら、レコメンデーションを洗練させるための重要なエッセンスが詰まっています。

とのこと。

なお原著は以下から。

Practical Machine Learning - MapR

『実践』だから回帰とかニューラルネットとか、機械学習の基礎を学んだ人のための本・・・ではない。誰でもすぐにパワフルな推薦システムが作れるよ、という意味で『実践』。

確かにもっと複雑で凄そうな推薦システムもたくさん提案されているけど、本当にそれが『実践』的なのかという点は重要。Amazonの推薦にも、毎回同じ商品をオススメしてきてしつこいみたいな欠点はある。でも、なんだかんだでそれなりに上手く動いてるじゃないか。それでいいんだよ、それで。

『実践 機械学習』では、上に書いた3か条(かなり脚色してるけど大筋は外していないはず)を説明した上で、仮想の音楽視聴サービスを題材にして実際的な推薦システムの作り方を解説している。このとき、Map Reduce云々とかPython使うとか、かなり細部の構成や手段まで言及している印象。

さらに最後には、レコメンデーションのクオリティを上げるためのTipsも紹介している。

たとえば、もっと多様な行動履歴(動画見たり、商品買ったり、音楽聞いたりetc)を考慮して嗜好を判断してみましょう、とか。

50ページほどなので、読んですぐに推薦システムを作るのはさすがに難しいかもしれない。でも、次に学ぶべきことの指針になるし、実際にアプリケーションを作るときに考慮すべきこともクリアになる。

機械学習に興味を持った人が集合知プログラミングの前に読むとちょうど良さそうな、そんな感じ。

無料にしてはなかなか濃い内容だっと思う。あと、原著で読むと読解力が足りなくて自然と細部が削ぎ落とされるので、内容を整理しやすいですね。(決して良いことではない)

※3か条の話は原著を一読しただけの理解で書いたので、間違いがあるかもしれません。特にMahoutやSolrは使ったことがないので、何かあればご指摘下さい。

僕もせっかく読んだので何か実際に推薦システム作ってみなきゃですね。