こんにちは。LINEヤフー株式会社で検索エンジン上の機能開発のマネジメントを行っている真鍋です。
検索エンジンというとYahoo!検索などのウェブサービスを思い浮かべるかもしれません。今回は、ウェブサービスの裏側で動いているソフトウェアについてお話しします。検索エンジンには、オープンソースの有名な実装がいくつかあります。私たちのチームは、その実装の上にLINEヤフー独自の機能開発を行う立場にあります。ソフトウェアとしての検索エンジンは汎用(はんよう)にできているので、機能開発を行うことで、複数のウェブサービスに適用できるという面白さがあります。
検索エンジンの処理は大きく2段階に分けられます。
処理1:マッチング
クエリに対して、どのドキュメントを検索結果に出すか判定する処理です。
たとえば商品検索サービスに「テレビ」と入力して検索ボタンを押したとします。この「テレビ」がクエリです。それに対して、商品検索サービスに登録されている商品がドキュメントです。商品検索サービスの裏側にある検索エンジンでは、「65型有機ELテレビ」という商品には「テレビ」が含まれているので「テレビ」の検索結果に表示する、「500リットル6ドア冷蔵庫」という商品には「テレビ」が含まれていないので「テレビ」の検索結果に表示しない、などと判定します。これがマッチングです。
検索結果に表示すると判定されたドキュメントの数が、ヒット件数です。ヒット件数は非常に多く、人間がすべてのドキュメントを確認はできないので、ランキングの処理が必要になります。
処理2:ランキング
検索結果へ表示すると判定されたドキュメントを、より検索意図に近そうな順に並べ替える処理です。引き続き商品検索サービスの例でいえば、「テレビ」と入力するユーザーは、テレビ本体を探していると考えられます。これが検索意図です。このとき、「テレビリモコン」という商品には「テレビ」が含まれてはいますが、テレビ本体ではないので、表示の順番を後回しにしたほうが良さそうです。これがランキングです。
検索結果はランキング順に表示します。 たとえ数百件でも人間の目で確認するのは大 変ですが、ヒット件数が数百万件になるウェブサービスもあります。そのため1万分の1のデータを選び出す処理のランキングが重要となります。それゆえに、ランキング作成は難しく、かつ興味深い処理となります。より検索意図に沿うように順序を変更することを、ランキング改善と呼びます。これは検索サービスの改善に欠かせない作業です。しかし一般的に、ランキングを改善するには果てしない試行錯誤が必要となります。そのため、その部分を機械学習に任せることで、作業負荷の軽減を目指します。
ランキングを改善する
具体的なランキング改善のアプローチを紹介します。たとえば、「テレビ」が入力されたこと、そのとき検索結果の「65型有機ELテレビ」はクリックされたが、「テレビリモコン」はクリックされなかったことは、通常ウェブサービスのログとして残ります。このとき、「テレビ」に対する検索結果において「65型有機ELテレビ」をより上位に、「テレビリモコン」をより下位に並べることで、ランキングを改善できます。
考えられるアプローチの1つは、各商品のカテゴリーを使うことです。「65型有機ELテレビ」は「テレビ」カテゴリーに、「テレビリモコン」は「テレビ周辺機器」カテゴリーに属していたとします。このとき、クエリ「テレビ」に対しては「テレビ」カテゴリーの商品を上位に、「テレビ周辺機器」カテゴリーの商品を下位に並べるようにすれば、ランキングを改善できます。しかし、このアプローチではクエリ「テレビ」についてランキングを改善しただけに終わります。ランキングの改善範囲をさらに広げようと思うなら、機械学習の出番となります。
先ほどのアプローチを一般化して、クエリとドキュメントのカテゴリーが完全一致したかどうかを示す値をウェブサービスのログに残します。このような値を特徴量と呼びます。この状態で、しばらくウェブサービスを運用して、特徴量のログを貯めます。それを利用してランキング処理を機械学習すれば、この特徴量は多くのクエリに対して有効なことが分かるはずです。そして、機械学習したランキング処理をウェブサービスに適用すれば、実際に多くのクエリに対してランキングを改善できます。
書籍の紹介
さて本題です。業務を行う中で得た知見を、書籍として出版していただく機会に恵まれました。もっと詳しく知りたくなった人は、ぜひこちらもご覧いただけるとうれしいです。
真鍋 知博、社本 秀之、井関 洋平、鈴木 翔吾 著
『機械学習による検索ランキング改善ガイド ―技術解説とハンズオンで学ぶ機械学習ランキングモデルの導入と改善』
(オライリー・ジャパン発行、ISBN978-4-8144-0030-0)
O’Reilly Japan Blog - 8月新刊情報『機械学習による検索ランキング改善ガイド』(外部サイト)
「ランキングを改善する」というのは簡単です。しかしそのために一般のウェブサービスでは複数のチーム が連携して動く必要があります。また改善の本質は試行錯誤になるため、改善に要する期間も長くなります。プロジェクトともいうべき一連の流れのうち、カバーする範囲が広いのが本書の特長の1つです。具体的には、改善そのものの前にやるべきKPI設定や、機械学習したモデルの更新についてもカバーしています。あえて機械学習を使わないランキング改善についても扱うことで、スモールスタートしてからコストのかかる機械学習の導入へとステップアップできるようにもしています。
本書は2部構成になっており、後半で実際にコードを動かしてハンズオンを行うのも本書の特長です。環境はDocker Composeで立ち上げます。中心となる検索エンジンとしては、オープンソースのElasticsearchを立ち上げます。(ただし本書の前半では、他の有名な実装であるSolrについても説明しています。)そこにWikipediaデータの一部を入力し、Wikipediaデータを扱う検索システムのランキング改善を行います。本書の前半を読んで知識をつけた後、後半のハンズオンで定着させることを意図しました。
おわりに
もともと本書の元になった企画は社内での情報共有を意図していましたが、結果的には皆様に読んでいただける形となりました。本書が多くのサービス開発者の皆様、そして間接的に多くのユーザーの皆様のお役に立てることを願っています。