Query Auto Completionデータの開発・改良に向けたアイディアのまとめ

<!-- -*- coding: utf-8 -*- -->

<!-- # QACデータの開発・改良に向けたアイディアのまとめ -->

本記事では日本語の商品検索サービスにおけるQAC (query auto completion) 機能の元データの構築や改善で役立つ基本的な情報をまとめます。
以下の要因からこのまとめ情報が役立つものと考えています。
* 本記事にはQACに関する情報への外部リンクが複数含まれる。
* アカデミックのQAC改善手法は商品検索サービスの実情と合わないことがあるが、本記事はそれを考慮している面がある。



## QAC概要

### QACとは?
QACはquery auto completionもしくはquery auto completeの略称で、一般的には検索サービスのキーワード入力窓で入力文字列から検索キーワードを対話的に補完する機能です。
単純なキーワード補完ではなくqueryを提案するような挙動の機能提供 (e.g. キーワードの一部を基準にfaceted searchへ誘導する挙動) も見かけますが、本記事ではそれを区別せずまとめてQACとして扱います。

### QACの役割
QACの主な役割には以下が考えられます。
1. キーワード入力の省力化
2. 誤入力など不適切なキーワード入力の抑止
3. ユーザーの検索意図を適切にキーワード化するための補助

アカデミックではQACの利用そのものに注目した評価指標を採用することが多い印象がありますが、上記の「キーワード入力の省力化」もそれに含まれることがあります。

一方で、商品検索サービスでは売上に注目した評価指標を採用するため、上記の「ユーザーの検索意図を適切にキーワード化するための補助」が重要になりやすいです。
また、上記の「誤入力など不適切なキーワード入力の抑止」はユーザーの検索傾向の誘導とより広く考えると良いかもしれません。

### 本章の参考情報
* [Autocomplete](https://queryunderstanding.com/autocomplete-69ed81bba245)
* [Autocomplete and User Experience](https://queryunderstanding.com/autocomplete-and-user-experience-421df6ab3000)
* [Bootstrapping Autosuggest](https://medium.com/related-works-inc/bootstrapping-autosuggest-c1ca3edaf1eb)
* [ユーザーログを活用したZOZOTOWNの検索サジェスト改善](https://techblog.zozo.com/entry/zozotown-search-suggestion)



## 補完候補のプール

QACを実現するにあたり、QACで扱う補完候補のプールを用意する必要があります。
本章では典型的な補完候補の作成方法についてまとめます。

### 検索ログ・ベース
検索回数が十分にありそのログを取得している場合、ログ中にある実際に検索に使われたキーワードから補完候補を作り出すことができます。
具体的には高頻度で入力されるキーワードの上位n件を使うなどです。
ほとんどのサービスではこの方法を採用すれば良いでしょう。

この方法は、実ユーザーのキーワードの入力傾向に合う補完候補が作成できることから非常に有効ですが、誤入力のキーワードや0件ヒットのキーワードへの対処が必要になります。

### ドキュメント・ベース
サービスの事情からログからキーワードを使えない場合など、ドキュメント (商品) の情報から補完候補を作ることも考えられます。
具体的には、商品名やカテゴリ名、商品の属性情報 (e.g. 絞り込み条件) などです。

この方法は、実ユーザーが想像するキーワードと合わない補完候補を作ってしまう可能性がありますが、一方で誤入力のキーワードや0件ヒットのキーワードが補完候補に混入することを比較的簡単に防げるメリットがあります。

### 本章の参考情報
* [Building an Autosuggest Corpus, Part 1](https://medium.com/related-works-inc/building-an-autosuggest-corpus-part-1-3acd26056708)



## 補完候補の読み

補完候補に読み情報を付与することで、かな漢字変換の誤変換による好ましくない検索の回避の可能性を高めることができます。
特別な言語リソースがある場合は別ですが、基本的に読み情報は形態素解析処理で得られるものを使うと良いでしょう。
形態素解析辞書の品質が高いもの (e.g. [Sudachi](https://github.com/WorksApplications/Sudachi)) が妥当な候補ですが、それでも扱っている商品によっては思うような結果が得られないこともあります。



## 補完候補のランキング

多くのQAC機能では補完候補を最大10個ほど提示しますが、この提示におけるランキング処理は非常に重要です。
ランキング上位の補完候補は当然選択されやすいですし、ランキングによって補完候補が提示される・されないというそもそもの話もあります。
本章ではこのランキングを決めるスコアなどについてまとめます。

### 静的スコア (MPC)
ランキングでよく検討されるのがMPC (most popular completion) です。
キーワードとして検索頻度の多い順という単純なランキングとなるスコアですが、QACの利用そのものを評価指標とする場合に非常に強力で、アカデミックでは長くベース・ラインの手法として使われています。

### 静的スコア (MPC以外)
MPCは売上に関わる数値が考慮されないため、以下を利用したスコアを検討すると良いと言われています。
* QACとしてのCTR
* キーワード検索としてのCTR (or click)
* キーワード検索としてのcart-in CVR (or cart-in)
* キーワード検索としてのCVR (or order)

要は補完候補ごとに各アクションがどれだけ発生するかを考えたスコア算出になります。

### 時間軸やユーザー軸の最適化
スコアは、直近のトレンドを重視して最適化したほうが良いケースと、そうでもないケースの両方があり、これはサービスや扱っている商品に強く依存します。
例えば、TVなどのメディアに影響を受けやすいB2Cのサービスは、日毎のトレンドを重視すると良い場合が考えられます。

また、ユーザー・セグメントごとに最適化すると良いケースもあります。
例えば、性別ごとに商品が用意されているサービスは、ユーザーの性別ごとに最適化すると良い場合が多いでしょう。

これらの時間軸やユーザー軸の最適化はQACの利用に関して好影響を与える可能性が高いようです。

### 動的最適化
上記3節の実施内容と比較して開発コストが大きく跳ね上がるので注意が必要ですが、ユーザーのセッション内の行動をランキングに反映する最適化が考えられます。
具体例の1つとして、 `高円寺 賃貸マンション` で検索したユーザーがその次に `阿佐ヶ谷` と入力した際、補完候補 `阿佐ヶ谷 賃貸マンション` をランキング上位に提示することが考えられます。

上記の例は、Googleのweb検索向けQACの挙動です (2024年12月現在) が、やはりQACの利用に関して好影響を与えるでしょう。

### 本章の参考情報
* [Autocomplete](https://queryunderstanding.com/autocomplete-69ed81bba245)
* [検索体験を向上する Query Understanding とは](https://techblog.recruit.co.jp/article-205/)
* [A Survey of Query Auto Completion in Information Retrieval](https://staff.fnwi.uva.nl/m.derijke/wp-content/papercite-data/pdf/cai-survey-2016.pdf)
* [Query Auto Completion in Information Retrievalの簡易なまとめとそれを読んで考えたこと](https://qiita.com/naosugi1987/items/b61057d43ca33c5a517d)
* [Autosuggestion services in web search](https://medium.com/data-science-at-microsoft/autosuggestion-services-in-web-search-9d4f71c662c6)
* [Query Auto-Completionに関するテックブログまとめ](https://qiita.com/kurakura0916/items/3dfc34ee11f8b4f18375)
* [ユーザーログを活用したZOZOTOWNの検索サジェスト改善](https://techblog.zozo.com/entry/zozotown-search-suggestion)
* [ZOZOTOWNにおけるユーザーの性年代に応じた検索サジェストの実現](https://techblog.zozo.com/entry/personalized-query-suggestion)



## 最後に

本記事の著者はB2Bの商品検索サービスでQAC機能の改善を複数回成功させたことがあり (売上ベースの評価指標で有意差あり)、その経験をベースにパブリックな情報から特に有用と思われる基本的なものを選出し、本記事の通りサマライズしました。
実際に商品検索サービスのQAC機能の開発・改善でお役に立てば幸いです。


<!-- EoF -->