Speeeエンジニアの義田@yoppiblogです。
前回、UZOUというアドネットワークのプロダクトで運用しているECSの使い方を紹介しました。 今回は、ECSを基盤として構築している記事レコメンドシステムを紹介したいと思います。 また、SpeeeKaigi#3で発表した内容になります。 スライド内で言及できていない部分や補足などをこの記事で紹介します。
背景と問題
UZOUが提供するレコメンドウィジェットと呼ばれるものは、メディアの記事内に枠をいただきそこに表示します。 ウィジェットには、メディア内の記事とUZOUに出稿された広告をそれぞれユーザに対して適切だと考えられるものをレコメンドしています。 しかし、特に記事レコメンドの精度が悪く指標値である記事CTR(Click Through Rate)がとても低い状態でした。 そこで、記事レコメンドの精度改善に取り組んだというわけです。
レコメンドと文書間類似度
スライド中でも言及していますが、レコメンドシステムは
- 協調フィルタリング
- コンテンツベース
の2つに大別できます。 UZOUでは相性のいいコンテンツベースのレコメンドシステムを採用し、文書間類似度を測る尺度としてのモデルとしてベクトル空間モデルを採用しました。
協調フィルタリングは、ユーザがある程度コンテンツを巡回する状態でないとレコメンドしにくく、UZOUのような広告だと再訪するユーザはECやCMS系サービスと比べて低いということがあるからです。 また、UZOUは冒頭でも述べた通りメディア自身が保持している記事を大量にクロールしています。こういったコンテンツをレコメンドする場合、コンテンツ自身のデータを使用したほうが精度の良いレコメンドを提供しやすいということも理由一つです。
あるユーザがメディア内の記事にアクセスしたときに、記事をレコメンドするためにはその記事間で何らかの尺度をもってレコメンドしてよいかどうかを判断しなければなりません。 ここでは、「記事同士がなんとなく似ている」と「クリックされやすい(読まれやすい)」ということを前提としています。 「なんとなく似ている」尺度を測る方法はこれまでいくつか提唱されてきており、有名なものはベクトル空間モデル、情報検索(IR)、確率的言語モデル、などといった分類があります*1。
構築したモデルやチューニングポイント
採用したベクトル空間モデルは、ベクトル成分として文書における TF・IDF
を使います*2
TF、IDFのそれぞれは正規化や平滑化など細かく定義できます。UZOUでは、次のような計算をしています。
TF
IDF
TF・IDFをベクトル成分とする、モデルの導出方法もいくつか良く知られているものがあります。 たとえば、コサイン距離やJaccard(ジャッカール)距離などを計算して記事同士の「近さ」を測ります。 UZOUの場合、記事数が膨大であり計算量が多くなるので、計算量を抑えるべくシンプルに導出する方法を採用しました。
また、モデル計算において使用する記事本文に対しても一工夫加えています。 単純に、記事内に含まれるテキストすべてを採用することも考えられますが、多くの場合、その記事を適切に表現している単語に比べてノイズが多くなります。
そこで、今回のモデル計算では、記事のタイトル及び本文の1行目を採用しています。 これは本文要約の問題において記事の1行目に対して重みを多くして学習する手法などが知られています。ニュース系の記事に対して特に有用であることが知られています。
モデルの適用結果
このモデルをUZOUが導入されている全メディアに適用したところ、全体の記事CTRを180%ほど向上させることができました。 効果が顕著なものだと700%ほどCTRが向上しているメディアもあります。
今後
モデル作成時に固定長のものを採用しているので、より特徴量を捉えつつ効率よくベクトル空間を作れるような本文抽出や、 ノイズベクトルに対してロバストなBM25など異なるモデルも採用したいと考えています。
また、記事や広告は「クリックされた」「クリックされなかった」という単純な2値に分類されるのでベルヌーイ分布にしたがうところから、多腕バンディット問題として捉えることもできます。
まとめ
今回は、UZOUで構築・運用している文書間レコメンドシステムについて紹介しました。 作成した記事レコメンドシステムを適用した結果として、飛躍的に記事CTRを上げられました。
*1:わかりやすい論文ですA novel document similarity measure based on earth mover’s distance
*2:TF・IDFについて詳しくは情報検索の基礎、情報検索アルゴリズムといった参考文献をあたってください