ベクトル検索の取り組みのご紹介
はじめに
弊社では、約3年前(2021年度)より、セマンティックなベクトル検索を導入してきました。
本記事では、その導入した当時の経緯や、どのように拡大させてきたかについてご紹介いたします。自社の検索エンジン開発において、同じような課題感をお持ちの方のご参考になれば幸いです。
従来の検索エンジンが抱えていた課題
弊社では、長年、いわゆる全文検索と呼ばれる文字列一致型の検索エンジンを採用してきました。まず、その全文検索が抱えていた課題についてお話します。
下記が弊社の検索キーワード(以降キーワードはKWと表記)の分布となります。多くの顧客によく検索される検索頻度の高いKW(以後ビッグKW)がある一方、検索頻度の低いKW(以後テールKW)もあり、ロングテール構造をしています。
このような検索に対し、全文検索では、文字列として完全もしくは部分的にでも一致する情報を持つ商品を検索結果として出力します。
より良い検索結果を出力するために、下記の2つの観点で改善を進めてきました。
-
望む商品を漏れなく拾う
検索においては、望む商品を漏れなく拾ってくることが求められます。そこで、下記のとおり、マスター情報を更新し、検索KWと検索対象の商品情報を文字列として一致させやすくすることで、漏れなく拾うようにしてきました。- 同義語辞書で検索KW補填
- メタタグで商品情報補完
ただし、この方法では、マスター情報を人力で登録する以上、対応に限界があります。[1]
ビッグKWなど、対象を絞って対応することは可能で、そのように進めてきましたが、テールKWまで対象とすることは困難です。なぜなら、テールKWには、利用用途・形状/材質・打ち間違いなど多種多様なKWが含まれます。このようなテールKWに対して、マスター情報の更新で対応しようとしても、膨大なKWを全パターンマスタ登録することは非現実的です。
そのため、漏れなく拾うことにおいては、ビッグKWではある程度マスター更新で成功してきましたが、テールKWでは限界がありました。 -
求めている可能性が高い順に並び替える
次に、並び順に関してです。
特定の商品をピンポイントで検索する場合を除き、検索では複数の商品が該当することが多いです。そのため、それらをどのような順番で並べるかは、非常に重要となってきます。
単純には、文字列としての一致度が高い順に並べることが考えられます。しかし、必ずしも文字列としての一致度が高くなくても、商品力の高い商品などを上位に出す方が良い場合も多くあります。
そのため、全文検索では、検索KWに対するクリック実績を元に並び替えをおこなっていました。そうすることで、過去の実績に基づくという制限はつきますが、文字列としての一致度の並び順よりも良い顧客体験が得られます。ただし、この並び替えについてもテールKWでは上手くいきません。ビッグKWでは過去実績があるため有効ですが、テールKWでは過去の実績が少なくクリック実績で並び替えることが困難であるためです。
上記のとおり、全文検索では、ビッグKWは対応出来ていましたが、テールKWへは対応出来ていない状況が続いておりました。
テールKWに対応出来ないことによる顧客への悪影響は大きく、大きな課題となっていました。
解決策
-
KW振分の仕組み構築
これらの問題に対応するにあたり、なるべくビッグKWには影響を与えず、テールKWのみを対象に改善を図りたいと考えました。
そこでまず初めに、検索KW単位で別々の検索アルゴリズムに振分先を変更出来る仕組みを整えました。これにより、課題とするテールKWに対象を絞って機会損失を最小化して検証を進めることが出来るようになります。
さらに、検索KW毎に出し分けたロジック別のクリック実績を評価し、優位な方に振分先を変更するという仕組みも導入しました。これにより、ビッグKW/テールKWといった大きな区分だけでなく、KW毎に細かく調整し機会損失を最小化出来ます。
-
ベクトル検索の導入
構築したKW振分の仕組み上で、まずテールKWに対象を絞り検証を進めました。検証する検索アルゴリズムとしては、ベクトル検索となります。ベクトル検索とは、言葉の意味を数値化することでその数値の距離を意味の近さとして捉え、検索させる手法です。詳しくは、ベクトル検索のドメイン特化における検索キーワードの有用性でご紹介しておりますので、ご参考頂ければと存じます。
これにより、「文字列の一致」ではなく、「意味的な類似」で検索させることが可能となります。
上記を単純に適用するだけでは、実用に耐えうるレベルにはなりませんでしたが、以下の試行錯誤をおこない、テールKWにおいては従来の検索エンジンよりも高いクリック率を達成しました。- BERTモデルの導入
- 検索ログを活用したファインチューニング
システムの概念図としては下記のとおりとなります。
-
リランキングモデルの導入
並び替えに関しては、テールKWは過去のクリック実績が十分にないことから、単にクリック実績で並び替えることが出来ないという課題がありました。
そこで、(全文検索による)文字列の一致度、(ベクトル検索による)意味的な類似度に加え、商品力などを総合的に加味して並び替えるようにしました。
加味する方法としては、過去のクリック実績を正解データとした教師あり機械学習モデル(リランキングモデル)を活用しています。
これにより、テールKWのクリック率をさらに改善させることが出来ました。
さらに、リランキングモデルを活用することで、ビッグKWにも改善効果が見込めます。全文検索の結果にベクトル検索の結果を追加することで、全文検索の高い検索精度を維持しつつ、ベクトル検索による新たな検索結果も提示することが出来るようになるためです。
導入による成果
上記のベクトル検索及びリランキングモデルの導入で、課題としていたテールKWにおいては、検索のクリック率を20%向上し、商品探索時間18%改善させることに成功しました。
運用としても、マスターレスとなったために、持続可能な状態とすることが出来ました。
今後の展望
ベクトル検索にも、課題とすることがあります。
- 一つには、関係の薄い商品をどこまで検索結果に出力するかの調整が難しいことがあります。全文検索では、検索KWが文字列として一致した商品を検索結果に出力します。一方、ベクトル検索では、類似度が低いというだけで、際限なく出力することが可能です。そのため、類似度に閾値を設けて関係の薄い商品は出力しないといった工夫が必要となりますが、適切な閾値を設定するのは容易ではありません。
- また、弊社では商品の番号を表す「型番」など、意味を持たないKWで検索頂くことも多くあります。これらに対しては、ベクトル検索よりも全文検索の方が適しています。つまり、必ずしも全てをベクトル検索で対応するのではなく、検索KWの種別によって、適したアルゴリズムを上手く組合せることが必要です。
技術的な進歩に目を向けると、近年は生成AIの登場でもわかるとおり、事前学習済みのモデル性能が飛躍的に向上しています。我々のチームでも、それらを検索エンジンに取り込むことで更なる改善を図れないかという研究を行っています。教師あり学習のためのデータの生成や、オフライン評価への活用、さらには処理速度との兼ね合いですがembedding自体への活用などに鋭意取り組んでいます。
検索に関連する過去の研究の一部に関しては、各種学会でも発表させて頂いております。
- 【言語処理学会 第30回年次大会(NLP2024)】大規模言語モデルを用いた検索モデルの中間学習のためのコーパス作成手法
- 【第16回データ工学と情報マネジメントに関するフォーラム(DEIM2024)】系列変換モデルを利用したフィールド検索のためのクエリ書き換え
海外展開に向けて
弊社では、アジア、米州、欧州を中心とした世界各国にグローバル事業を展開しております。
海外売上高比率は53%に至っております。[2]
それに伴い、検索エンジンも海外へ提供することが求められます。
言語の壁や購買傾向の違い、扱う商品の違いなど、展開時には様々な課題があります。考慮すべきことは多々ありますが、我々はそれらの違いを吸収した上で、データを統一的に扱い共通した1つのモデルで対応することを検討しています。それにより、運用の手間削減だけではなく、比較的規模の小さい(=行動データが少ない)国においても、他の国のデータを活用したトップレベルの検索エンジンを提供出来ると考えています。
このような検索エンジンを限られた人数で効率的に提供するためには、DevOps/SREといったシステム観点も欠かせません。我々のチームでは、AIアプリ開発エンジニア・データエンジニア・SRE/DevOpsエンジニアが一丸となって、検索エンジンというプロダクト開発に取り組んでいます。
これらの取り組みが、世界中のお客様の満足に繋げられたら、エンジニア冥利につきると思っています。
最後に
今回は、ベクトル検索の導入や拡大の経緯をご紹介しました。
ご参考になることがあれば幸いです。
最後に、弊社ではエンジニアを募集しています。
検索エンジンは、データサイエンスをはじめ、広範に渡る技術が必要な非常にやりがいのあるプロダクトです。
さらに、我々のミッションは検索エンジンだけではありません。弊社のお客様に対し時間価値を提供するためのプロダクト・サービスを、既存の型に囚われずゼロから開発することも試行錯誤しております。
このような活動に少しでも興味がございましたら、お気軽にご連絡頂けると幸いです!
ご覧いただきありがとうございました。
Discussion