こんにちは、サイエンス統括本部で検索サービスの改善を担当している鈴木です。
ヤフーが運営するECサイトであるYahoo!ショッピングでは、ユーザーが探している商品をキーワードで検索できる仕組みを提供しています。
検索結果には下図のようにキーワードに合致した商品が掲出されますが、その並び順はいったいどのように決まるのでしょうか?
Yahoo!ショッピングでは、機械学習を用いて検索結果中の商品を並び替えています。この記事ではYahoo!ショッピングの検索を例に、検索サービスにおける機械学習の活用事例を紹介したいと思います。
※本記事はSearch Engineering Tech Talk 2019 Autumnでの発表「ヤフーにおける機械学習検索ランキングの取り組み」をベースとした資料となっています。興味のある方は、以下発表資料もご覧ください。
検索エンジンと商品の順位付け
まずは検索エンジンの処理を簡単に紹介します。
下の図は、検索エンジンにキーワードが投げられてから、検索結果を返すまでの処理を示しています。
検索エンジンは、まず検索キーワードに合致する文書を取得し、次に合致した文書を何らかの基準で順位付けして、検索結果として返却します。
順位付けの方法は検索サービスによっていろいろ考えられますが、例えばECサイトの検索ならば商品の価格順、口コミサイトの検索ならばレビュー順などが考えられます。
さて、Yahoo!ショッピングはECサイトなので、ユーザーに買っていただけるであろう商品を、なるべく検索結果の上位に出したいです。
ここでは、検索キーワード「しょうゆ」に対して合致した商品を、どのように順位付けすると良いか考えてみたいと思います。
例えば、『売り上げ順』に順位付けするとどうでしょうか。おそらく、人気のあるしょうゆ商品が検索結果の上位に出るでしょう。ところが、しょうゆ味のラーメン商品やしょうゆ差し商品なども、商品タイトルに「しょうゆ」を含んでいるため、検索キーワード「しょうゆ」に合致します。そのため、検索キーワードとは意図が違う商品が、検索結果上位に出てしまうかもしれません。
それでは、『キーワードと商品タイトルの関連度順』に順位付けするとどうでしょうか。おそらく、検索結果にはしょうゆ商品が並ぶでしょう。しかし、商品の売り上げは考慮していないため、人気のあるしょうゆ商品が検索結果上位に出ないかもしれません。
...というように、良い順位付けを考えるのは難しいです。上で挙げた『売り上げ順』と『関連度順』をともに考慮してスコアを調節すれば、検索キーワード「しょうゆ」に対する良い検索結果を作れるかもしれません。
しかし、Yahoo!ショッピングでは「しょうゆ」以外にも以下のように多種多様なキーワードで商品が検索されています。そのため、検索キーワード1つ1つに対して、検索結果を調整していくのは非現実的です。
- 「adidas」「PUMA」といった、ブランド名の検索キーワード
- 「500円 ポイント消化」といった、特定の商品を指さない検索キーワード
- 「ルンバ 980」といった、特定の製品を指す検索キーワード
- 「米 2kg」といった、商品およびスペックを指す検索キーワード
そこで、機械学習モデルによる自動的な商品の順位付けの出番です。
機械学習モデルによる文書の順位付け
機械学習の手法の1つに、文書間の順序関係を学習するランキング学習という手法があります。
検索キーワードに対し、各文書に
- 検索結果の上位に出て欲しい!(Excellent)
- 検索結果に出ていても違和感はない(Good)
- 検索結果に出て欲しくない(Bad)
の3段階のラベルが振られているとします。
また、各文書にはその文書の情報を表す特徴量が与えられているとします。
ランキング学習では、ラベルの順序関係に従ってモデルの出力するスコアが高くなるように、学習が進みます(下図)。
ラベルの付与は、ガイドラインを定めて人手で付与する・ユーザーの行動ログ(文書のクリックログなど)を活用して付与する...などの方法が取られます。
現在、Yahoo!ショッピング検索では、ランキング学習を用いた機械学習モデルをユーザーの行動ログから構築し、商品の順序付けを行っています。
構築された機械学習モデルは検索エンジン上にデプロイされます。文書(商品)の特徴量は検索エンジンにフィードされており、検索時にリアルタイムで機械学習モデルによる商品の順序付けが行われます。
機械学習モデルができるまで
機械学習モデルを構築するために、行動ログをためて活用する仕組みを整える必要があります。
ここでは、
- どのように行動ログをためるか
- ためた行動ログからどのように学習データを作成するか
- 作成した学習データからどのように機械学習モデルを構築するか
を紹介します。
1. どのように行動ログをためるか
Yahoo!ショッピング検索における機械学習モデルの構築フロー概要を下の図に示します。
まず、検索FEから検索エンジンへリクエストが送信され、検索結果が返却されます。このとき、検索FE・検索エンジンから、クリックをはじめとする行動ログおよび商品ごとの特徴量(ランキングログ)がHadoopクラスタへ送信されます。
2. どのように学習データを作成するか
次に、Hadoopクラスタにためられたログから、HiveおよびSparkを用いて、学習データを作成します(下図)。
商品ごとの特徴量を直接Hadoopクラスタにためているため、学習データの作成はテーブルの結合だけで完了する仕組みとなっています。
3. どのように機械学習モデルを構築するか
さて、学習データを作成できたので、いよいよ機械学習モデルを構築します。
現在、Yahoo!ショッピング検索では、LightGBMを用いたランキング学習により、機械学習モデルを構築しています。
機械学習モデルはリアルタイムに商品の順位付けを行うため、あまりにも大きい機械学習モデルは予測時間の問題から検索エンジンに乗せることができません。そのため、精度だけでなくモデルのサイズ(LightGBMであれば、決定木の本数や深さなど)にも注意を払って、機械学習モデルを構築する必要があります。
また、機械学習モデルにおける一部の特徴量は、Hadoopクラスタで集計した結果を利用しています。そのため、Hadoopクラスタで定常的に集計ジョブを走らせ、検索エンジンに集計結果をフィードする仕組みも構築しています。
おわりに
Yahoo!ショッピングの検索を例に、ヤフーの検索サービスにおける機械学習の活用事例を紹介しました。
検索結果の改善は、ユーザー体験や売り上げの向上に大いに寄与するため、非常に重要かつ面白いタスクです。
一方で、機械学習の実運用はさまざまな困難がつきまといますが、検索サービスのようにリアルタイムに予測を行わないといけないケースは特に難しいです。
この記事が、検索サービス改善に興味のある方の参考になればうれしいです。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました