はじめに
こんにちは、データサイエンス部の朝原です。普段はZOZOTOWNにおける検索の改善を担当しています。
ZOZOTOWNには100万点を超える商品が存在し、毎日2700点もの新商品が追加されています。このような膨大な商品数を扱うZOZOTOWNにおいて、ユーザーが求める商品を見つけやすくするための検索機能は非常に重要です。
一方で、ファッションという日々ニーズが激しく変化するドメインにおいて、ユーザーのニーズを検索クエリから正確に把握し、適切な商品を提示することは困難を伴います。特に、検索システムにおいて検索結果が0件である(以下 0件ヒット)ことはユーザーにとって悪い体験となり、離脱を招いてしまいます1。実際にZOZOTOWNでは、日々0件ヒットが発生しており、大きな課題となっています。
本記事では、検索結果が0件になる主な原因と、その対策の1つであるクエリ書き換えについて紹介します。
目次
背景
ECサイトにおいて0件ヒットは離脱を引き起こし、購買の機会損失にもつながる大きな問題です。実際にZOZOTOWNでも0件ヒットは発生しており、以下は「レディース」と入力するつもりが「レデース」と入力してしまった場合の検索結果です。
0件ヒットとなった場合は別のクエリを試すように促されますが、ユーザーは検索条件を一から見直して再入力しなければならず、手間がかかります。
なぜ0件ヒットが起こるのか
では、なぜ0件ヒットが起こるのでしょうか。0件ヒットの原因は様々ですが、一般に次のような原因が考えられます。
1. タイポやスペルミス
ユーザーが検索キーワードを入力する際に、意図した単語を正確に入力できていないケースです。
例)
- 「レディース」と検索するつもりが「レデース」と入力
- 「アクセサリー」と検索するつもりが「アクsesari-」と入力
- 「ワンピース」と検索するつもりが「ワンスピ」と入力
上記のように、本来意図した単語から一部の文字が異なっていると、検索システムに登録している商品名や属性情報と完全に一致せず、0件ヒットとなることがあります。
2. 表記揺れ
ユーザーが検索に使った単語が、検索システム側の商品情報に登録されている単語と意味は同じでも表現が異なるケースです。一般的なものとしては、同じ単語であっても、カタカナ・ひらがな・漢字・英字・全角半角・送り仮名などの違いによって表記が揺れるケースです。例としては、以下が挙げられます。
例)
- システムでは「子供服」と登録されているが、「こども服」と検索された
- システムでは「ZOZOTOWN」と登録されているが、「ゾゾタウン」と検索された
また、ファッション分野では同じ意味を持つ単語でもトレンドによって呼び方が変わりやすく、さらに略語や別名が多く存在します。例えば、以下のようなケースが考えられます。
例)
- ユーザーは「カバン」と検索したが、システムでは「バッグ」で登録されている
- ユーザーは「オーバーオール」と検索したが、システムでは「サロペット」で登録されている
- 時代の流れで、「ズボン」が「パンツ」と呼ばれるようになった
システムがこれらの差異や関連性を認識していない場合、ユーザーの入力クエリを商品と関連付けられず、0件ヒットとなることがあります。ファッションにおけるトレンドの変化は著しく、常に最新の単語へ対応することも容易ではありません。
3. 検索条件が限定的である
複数の条件を組み合わせて検索した場合に、その組み合わせに完全に一致する商品が1つも存在しないケースです。個々の条件に合致する商品は存在するものの、ユーザーが指定した全ての条件を満たす商品が存在しない場合に0件ヒットとなります。
例)
- 「赤 AND 花柄 AND フレアスカート」
- 赤いフレアスカートは扱っているが、赤い花柄のフレアスカートは扱っていない
- 「ワンピース AND 花柄 AND 4Lサイズ」
- 他の条件に該当する商品は存在するが、そもそも4Lサイズを取り扱っていない
ユーザーが詳細な条件で絞り込もうとするほど、完全にマッチするアイテムが減少し、0件ヒットのリスクは高まります。
このような問題を解決するためのアプローチの1つが、「クエリ書き換え(Query Rewriting)」です。本記事では、クエリ書き換えの手法とその効果について解説します。
クエリ書き換えとは
クエリ書き換えとは、ユーザーが入力した検索クエリを、より検索システムに適した形へ自動的に変換する技術のことです。クエリ書き換えの目的はRecallとPrecisionの向上です。そのため、ユーザーの検索意図を保持しつつ、より多くの関連商品を正確にヒットさせることを目指します。0件ヒットの削減においては「商品が見つからない」状態の解消が重要であるため、ヒットする関連商品を増やし、Recallを向上させることが主な目的です。
一方で、ユーザーの入力したクエリを書き換えることは、検索意図をシステムが誤解するリスクも伴います。そのため、スペルミスの修正など、クエリを書き換えた際はユーザーが元のクエリに戻るための動線を提供することが重要です2。例えば、以下のように検索窓の真下に書き換え後のクエリと元のクエリを表示します。これによってシステムがユーザーの意図を誤解して書き換えてしまった場合でも、元のクエリをクリックすることでユーザーは意図した検索結果を得ることができます。
それではクエリ書き換えの手法について、古典的なルールベースの手法から2025年現在の最新の手法まで、いくつか紹介します。
クエリ拡張
クエリ拡張とは、ユーザーが入力した検索クエリに対して、関連するキーワードやフレーズを追加する手法です。これにより検索のRecallを向上させ、より多くの関連商品や情報をユーザーに提供できます。
例えば、元のクエリが「レディース OR フレアスカート」の場合、クエリ拡張によって「レディース OR フレアスカート OR スカート」などの関連キーワードが追加され、より多くの商品がヒットするようになります。
クエリ拡張にはシソーラス辞書やドメイン独自の辞書を用いる手法、単語の類似度を計算して関連語を追加する手法などがあります。それぞれの手法について見ていきましょう。
辞書を用いた関連語の追加
辞書を用いて検索クエリ内の各単語に対して類似するクエリを追加する手法を紹介します3。例えば、「バケットハット」という単語に関連する単語として「帽子」という、より上位概念の単語を辞書に登録しておきます。これらを0件ヒット時に拡張するクエリとして用いることで、バケットハットを取り扱っていない場合でも帽子という大きなカテゴリとして検索した結果をユーザーに提供できます。
それでは実際に日本語のWordNetから上位概念を取得してみましょう。日本語WordNetには「バケットハット」という単語が登録されていないため、「ローファー」という単語を試してみます。今回はNLTKというPythonの自然言語処理ライブラリを用いて、WordNetから日本語の上位概念を取得するコードを以下に示します。
from nltk.corpus import wordnet as wn word = 'ローファー' synsets = wn.synsets(word, lang='jpn') syn = synsets[0] hypernym_jp_names = sorted(list(set( ', '.join(lemma.name() for lemma in h_syn.lemmas('jpn')) for h_syn in syn.hypernyms() if h_syn.lemmas('jpn') ))) print(hypernym_jp_names) # 出力結果 # ['靴']
このようにWordNetのような辞書を用いることで、単語の上位概念を取得し、意味的に重複した語句を削除できます。
一方で、前述した通り「バケットハット」という単語はWordNetには存在しませんが、ZOZOTOWNを含め多くのファッションECサイトで利用される用語です。このように検索システムのドメインに特化している語句は、独自の辞書に登録しておく必要があります。ファッションドメインでは、トレンドの変化によって新しい単語や表現が頻繁に登場します。そのため、それらに常時対応し続けること自体が容易ではありません。
類似度を用いた関連語の追加
ユーザーが入力したクエリに対して、機械的に計算した類似度によって追加するクエリを選定する手法を紹介します4。
例えば事前学習済み言語モデルを用いてユーザの入力クエリ $q$ の各単語 $t_q$ と追加候補の単語 $t_c$ のベクトル $\vec{v}_{t_q}$ 、 $\vec{v}_{t_c}$ を計算し、以下のようにコサイン類似度を用いて類似度を計算します。
そして、最も類似度が高い候補の単語をクエリに追加するという流れです。
スペルミスの修正
ユーザーの入力した検索クエリに対して、スペルミスを修正することで、サービス側が意図した検索結果を得られるようにします5。スペルミスへの対応は弊社の以下の記事で詳しく解説しているので、ぜひご覧ください。
クエリ緩和
クエリ緩和6とは、検索クエリから特定の単語(修飾語やストップワードなど)や意味的に重複している語句を削除することで、検索条件を緩和して多くの検索結果を得る手法です。
ECサイトにおいて実際に不要なクエリを削除することで、0件ヒットになるクエリの約27%が1件以上ヒットするクエリに書き換えられたという研究もあります7。
例えば、元のクエリが「レディース スカート 安い チェック柄」の場合、「安い」という修飾語を削除して「レディース スカート チェック柄」とすることで、より多くの商品がヒットするようになります。
このように、0件ヒットの原因として挙げた「検索条件が限定的である」場合に特に有効な手法で、複雑なクエリをシンプルにすることで、検索結果を増やすことができます。
一方で、検索結果がユーザーの意図を十分に満たしており、かつ十分な数の商品がヒットする場合は注意すべきです。そのような場合にクエリ緩和をするとユーザーの意図しない商品が多数表示されてしまう可能性もあるため、慎重に行う必要があります。よって、クエリ緩和は主に検索結果が0件であった場合やユーザーの意図した商品が見つからない場合に適用されることが多いです。ただし、検索結果数が増えたとしても、良い検索結果が得られるとは限らない点に注意が必要です。
スコアリングによるクエリ緩和
クエリ緩和では検索クエリから特定の単語を削除しますが、重要な点はどの単語を削除するかです。TanらはECサイトにおける0件ヒットのクエリに対して、各単語の重要度をスコアリングし、スコアが低い単語から削除する手法を提案しています8。
まずは、ブランド名や商品名をTier 1、色やサイズなどの属性をTier 2、その他の単語をTier 3のように、単語を重要度の高い順にTier分けします。これらの振り分けは基本的に辞書ベースですが、一般的な名詞で構成されるブランド名も存在します。そのため、機械学習モデルによってその単語がブランド名であるかどうかの判定も行っています。こうして得られた単語のTierや、その単語が含まれている検索ログからクリック率を取得し、最終的な重要度スコアを計算します。
提案手法ではRecallの向上が見られましたが、一方でクエリに含まれる単語数が少ない場合にはクエリの検索意図が大きく変化してしまうケースもあったと報告されています。
End-to-Endなクエリ書き換え
ここまでは辞書やベクトルによって追加・削除する単語を取得する間接的なクエリ書き換えの手法を紹介してきました。機械学習の技術が進化するにつれて、ユーザーの入力クエリを言語モデルに入力し、直接書き換え後のクエリを出力するEnd-to-Endなクエリ書き換えの手法の研究も盛んになってきました。本章ではそのようなEnd-to-Endなクエリ書き換えの手法を紹介します。
グラフニューラルネットワークによって検索履歴を考慮
ここまで紹介してきた手法は、いずれも書き換え対象のクエリのみを考慮していました。Zuoらの研究ではユーザーが過去に検索したクエリを考慮したクエリ書き換えをすることで、ユーザーごとの多様な検索意図に合ったクエリを提供する手法を提案しています9。
例えば、「パンツ 安い」というクエリのみではユーザーがいわゆる「ズボン」のようなものを求めているのか、下着としての「パンツ」を求めているのかは分かりません。そこで、ユーザーが1つ前の検索で「デニムパンツ」と検索していたとします。この場合はユーザーは下着ではなく、下着の上に履く「パンツ」を求めている可能性が高いため、「ボトムス パンツ 安い」といったクエリに書き換えるのが良さそうです。
このように、ユーザーの過去の検索履歴を考慮することで、よりユーザーの意図に合ったクエリの書き換えが期待できます。
この実現のため、GAT(Graph Attention Network)を用いてユーザーの検索履歴をグラフ構造として表現し、クエリ間の関係性を考慮したクエリ書き換えを提案しています。提案モデルはECサイトの社内データを利用したオフライン評価で、ベースラインを上回る性能を示しました。また、オンラインのA/Bテストを通じて収益の向上が見られたほか、クエリ書き換えによって望んだ商品まで到達するまでの検索数が減少したことも確認されました。
強化学習を用いた生成モデルによるクエリ書き換え
生成モデルを用いたクエリ書き換えは辞書ベースと異なり、以下のような問題があります。
- 生成されるクエリに多様性がない
- 元のクエリに対する検索結果と類似しやすい
- WebやECサイト検索においては、レイテンシやコストの観点からリアルタイムでの書き換えは難しい
- 生成されたクエリが商品のカバレッジを向上させるかはわからない
そこで、Agrawalらの研究では生成モデルと強化学習を組み合わせることで、元のクエリの意図を保持しつつ、検索結果の多様性が高いクエリに書き換える手法を提案しています10。元のクエリの意図を保持するために、2つのクエリ間の類似度を計算するモデルを学習し、モデルの出力するスコアを報酬としています。また、書き換え後のクエリが多くの商品をヒットさせるように、書き換え後のクエリによってヒットする商品の数も報酬として与えています。
提案モデルを利用し、ユーザーの過去の入力に対するクエリを書き換え、データベース等にキャッシュします。オンラインではユーザーが検索クエリを入力した際に、キャッシュから書き換え後のクエリを取得して再検索するため、生成モデルを利用しながらも非常に低いレイテンシでのクエリ書き換えを実現しています。
また、提案モデルはベースラインの生成モデルと比較して、カバレッジが28%向上したと報告されています。
まとめ
今回は0件ヒットの回避に焦点を当て、クエリ書き換えの手法についてルールベースや機械学習を用いたアプローチを紹介しました。
検索結果が0件ヒットとなることは、ユーザーにとって悪い体験となり、離脱や機会損失に繋がる可能性があります。この問題は、ユーザーによる入力ミス(タイポやスペルミス)や言葉の多様な表現(同義語・類義語、表記ゆれ)、検索条件の絞り込みすぎなど、様々な要因で発生します。また、ファッションドメインではトレンドの変化によって新しい単語や表現が頻繁に登場します。そのため、常に最新の単語に対応することは、決して容易ではありません。
ZOZOTOWNの検索機能においても、0件ヒットを減らし、ユーザーが求める商品をよりスムーズに見つけられるようにすることは、継続的な課題です。
ZOZOでは、一緒にサービスを作り上げてくれる方を募集中です。ご興味のある方は、以下のリンクからぜひご応募ください。
- Baymardの研究で「Designing the "No Results" Page」にも同様な言及がなされています。↩
- Baymardの研究で「Handling Misspellings on Search Results Pages」にも同様の言及がなされています。↩
- Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze. Introduction to Information Retrieval. Cambridge University Press, Chapter 9,2008.↩
- Bhaskar Mitra, Nick Craswell. An Introduction to Neural Information Retrieval. Microsoft Research, pages 49-50, 2018.↩
- Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze. Introduction to Information Retrieval. Cambridge University Press, Chapter 3,2008.↩
- Hurtado, Carlos A. and Poulovassilis, Alexandra and Wood, Peter T. A Relaxed Approach to RDF Querying. The Semantic Web - ISWC 2006, pages 314-328, 2006.↩
- Yuki Amemiya, Tomohiro Manabe, Sumio Fujita and Tetsuya Sakai. How Do Users Revise Zero-Hit Product Search Queries?. ECIR 2021.↩
- Tan, Zehong, Canran Xu, Mengjie Jiang, Hua Yang and Xiaoyuan Wu. “Query Rewrite for Null and Low Search Results in eCommerce.” eCOM@SIGIR (2017).↩
- Simiao Zuo, Qingyu Yin, Haoming Jiang, Shaohui Xi, Bing Yin, Chao Zhang, and Tuo Zhao. 2023. Context-Aware Query Rewriting for Improving Users’ Search Experience on E-commerce Websites. In Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 5: Industry Track), pages 616–628, Toronto, Canada. Association for Computational Linguistics.↩
- Sanjay Agrawal, Srujana Merugu, and Vivek Sembium. 2023. Enhancing E-commerce Product Search through Reinforcement Learning-Powered Query Reformulation. In Proceedings of the 32nd ACM International Conference on Information and Knowledge Management (CIKM '23). Association for Computing Machinery, New York, NY, USA, 4488–4494.↩