Algolia Advent Calendar 2021の12月17日の記事です。Algoliaドキュメントの GUIDES / ALGOLIA AI / AI Re-Ranking を元にしてAlgoliaのAI Re-Rankinguとは何か、そしてどのように活用できるかといった点をご説明します。
検索結果の適合性は時間とともに変化する場合が多く、しかも、その変化は急速であることもあります。一般的なドラッグストアを例に挙げてみると、2020年2月(コロナウィルスのパンデミックが発生)より前に”マスク”と検索したユーザーは、おそらく肌のケアのための美顔用マスクを買おうとしていた可能性が高いです。それが、パンデミック中では、ユーザーが医療用マスクを探している可能性が高いでしょう。
こういったユーザーの期待値の変化に対応していくためには、RulesやOptionalFilters
などの機能を使って、検索結果を継続的に調整する必要があるかもしれません。これは、トレンドの移り変わりが早い場合、時間がかかる作業となるでしょう。そこでより良く、よりスケーラブルなアプローチとしてAI Re-Rankingのご活用をおすすめさせていただいています。
AlgoliaのAI Re-Rankingとは?
AI Re-Rankingは、AIを使ってユーザーの行動のトレンドを見出すAlgoliaがご提供する機能です。ユーザーがクリックしたりコンバージョンしたりといったクエリと検索結果の位置に基づいて、人気が高い結果をブーストさせることで、適合度をより良くすることができます。また、AI Re-Rankingは、Textualな適合性のエッヂなケースによって出現する外れ値のランキング順位を下げるような動きをすることもあります。
一般的なドラッグストアに話を戻すと、AI Re-Ranking機能は、”マスク”と検索をした人が、美顔用マスクではなく医療用マスクを探していることが多いのを検知して、医療用マスクを自動的に検索結果の上位に表示させます。これによって、より適合度の高い検索結果となり、コンバージョン率の向上につながります。ここではRulesやoptionalFilter
を使って調整を行う必要はありません。
注
こちらの機能が利用できるのはPremiumプランのみです。
適合度への影響
AI Re-Rankingは適合度を調整するためのパワフルなツールですが、既に設定したものに干渉してほしくはありません。ということで、AI Re-Rankingはエンジンが検索結果のTexutualな適合性を計算して、Custom Rankingが適用された後に処理を行います。つまり、特定のレコードの固定(pin)と、隠し(hide)のRulesを使っている場合、エンジンはRe-Rankingを行った後にそれらを適用するため、Rulesの設定は期待通りに機能し続けます。エンジンはその他のRulesに関してはRe-Rankingの前に適用されます。つまり、Re-Rankingはカテゴリのブースト(boost)やその逆(bury)をオーバーライド(上書き)できるということです。
また、Personalizationが有効で、Algoliaが検索をパーソナライズするのに十分なデータを持ち合わせている場合は、Re-Rankingが有効になりません。例えば、初めて訪れたユーザーの場合など、検索をパーソナライズするのに十分なデータがない場合は、Re-Rankingが有効になります。つまり、PersonalizationとAI Re-Rankingが同時に動くことはありません。
まとめると、エンジンは以下のような流れで適合性の戦略を適用していきます。
- Textual Relevance (Textual Rankingクライテリアを通じて行われる)
- Business Relevance (Custom Rankingを通じて行われる)
- Personalization (有効になっていて、特定のユーザーの検索結果をパーソナライズするのに十分なデータを持ち合わせている場合)
- カテゴリーのBoostingおよびBurying (Rulesを通じて行われる)
- AI Re-Ranking
- プロモーションや特定アイテムの非表示(Rulesを通じて行われる)
Note
デフォルトではAlgoliaは空の(empty)検索についてはRe-Rankingを適用しません。特定のファセット値でフィルタリングされた空の検索に関してはRe-Rankingを有効にすることが可能です。
AI Re-Rankingのセットアップ
AI Re-Rankingを活用して、自動的に適合性を高めていくためには、いくつか事前にやっておかなければならないことがあります。
ClickとConversionのイベントのAlgoliaへの送信
AI Re-Rankingを使うには、AlgoliaのClickおよびConversionのイベントを送信する必要があります。AlgoliaのAIはこのデータを使ってユーザーの行動の傾向を掴み、それに基づいて検索結果をRe-Rankします。
イベント情報の送信の実装方法はコチラをご参照ください。
AI Re-Rankingはそれぞれのクエリのランキングを24時間ごとに更新します。Re-Rakingは常に過去30日間のデータに基づいていて、つまり、直近の分析データのスライディングウインドウということです。クエリでレコードのプロモーションを行う際、Re-Rankingでは30日間の期間中に少なくとも20回のクリックもしくは2回のコンバージョンが発生している必要があります。Re-Rankingでは、クエリごとにこれたの基準に一致する最高スコアのアイテムを最大で20個までプロモートします。
セキュリティベストプラクティス
悪意あるユーザーによるレコードのランキング操作を防ぐため、AI Re-Rankingはイベントごとに異なるuserToken
を使います。すなわち、userToken
が重複したイベントを送信しても1回だけがカウントされるということえす。例えば、同じ人が同じクエリの後に同じレコードを100回クリックしたとしても、同じuserToken
を使っている限り、カウントされるのは1回のクリックのみです。同じuserToken
が異なる検索の後に同じレコードをクリックした場合は、別々のイベントとしてカウントされます。
注
手動で複数の
userToken
が生成されるのを防ぐために、Secured API Keyを利用すべきです。Secured API Keyでは、バックエンドでキーを生成する際にuserToken
を埋め込みパラメータとして含めることができます。これによってエンドユーザーごとにuserToken
を変更ができないユニークなキーとして提供をすることができます。
AI Re-Rankingのオプション
以下のオプションの設定を、ダッシュボードのAI Re-Rankingのページで行うことができます。
ブラウジングのページでRe-Rankingを有効にする
デフォルトでは、空のクエリに対しては動的にRe-Rankingが行われることはありません。が、ブラウジングファセットを設定すると、その属性のfacetFilters
が含まれる場合、Re-Rankが行われます。
例えば、Algoliaを使って、カテゴリファセットを使った空のクエリを実行して、カテゴリーページを生成するような処理の場合、カテゴリをブラウジングファセットとして設定できます。Re-Rankingはそれぞれのカテゴリーのレコードを人気度をベースにして並べ替えます。
もし、ネストされたファセット属性のrootをブラウジングファセットに設定をすると、Re-Rankingはそのサブ属性を全て並べ替えます。例えば、hierarchicalCategories
という属性にネストしたレベル(例: hierarchicalCategories.level0
と hierarchicalCategories.level1
)がある場合は、hierarchicalCategories
のみをブラウジングファセットとすると、hierarchicalCategories.level0
とhierarchicalCategories.level1
でフィルターされた空のクエリの順位もRe-Rankされます。
特定のレコードのRe-Rankingを無効にする
Re-Rankingフィルターを設定すると、AI Re-Rankingは設定されたフィルタにマッチするアイテムのみをプロモートします。
例えば、instock = true
のように選択することで、現在在庫がない人気のアイテムをAI Re-Rankingがプロモートするのを防ぐことができます。
同じようなクエリをグループ化する
デフォルトでは、各クエリーに対してそれぞれ独立してRe-Rankが行われます。AI Re-Rankingの設定ページにあるGroup Similar Queriesオプションを使用することで、同じようなクエリをグループ化してより多くの情報を収集し、クエリ頻度の高くないクエリのバリエーションに対してより正確なRe-Rankingを提供することが可能になります。
クエリが完全に一致する単語を共有している場合、グループ化されます(順序に関係なく)。
Group Similar Queriesドロップダウンから適切なオプションを選択し、グループ化のための言語を設定することをお勧めします。言語を設定すると、AI Re-Rankingはグループ化の際に複数形、活用形、ストップワードを無視します。
※ 2021年12月現在、日本語でこちらの言語設定で選ぶことはできません。
クエリごとにより多くのレコードをRe-Rankingする
1クエリあたりの最大Re-Rankingの件数は、最大100件まで増やすことができます(デフォルトでは最大20件がプロモートされます)。
但し、AI Re-Rankingで十分なトラフィックが集まらない場合は、設定した値よりも少ないレコードがRe-Rankingされる可能性があります。
直近のイベントをより重み付けする
ランキングの計算において、直近のイベントをより重視するには、イベントフレッシュネスオプションを有効にすることができます。こちらを有効にしない場合は、4週間前のイベントも、昨日起こったイベントも同様にランキングに影響を与えることになります。イベントフレッシュネスを有効にすることで、季節性や短い検索トレンドに対応できるようになります。
イベントフレッシュネスをオンにすると、新しいイベントが古いイベントよりも重視されるようになり、Re-Rankingが再計算されます。コーディングその他の変更等は必要ありません。
異なるソースインデックスを使う
デフォルトでは、AI Re-RankingはRe-RankingされたIndexに送られたイベントのみを使用します。イベントソースインデックスオプションを変更することで、イベントのソースとして別のインデックスを使用することができます。
Re-Rankingのシミュレーション
ダッシュボードのAI Re-Rankingページから、任意のインデックスに対してRe-Rankingのシミュレーションを行うことができます。この画面では、AI Re-Rankingが結果にどのような影響を与えるか、好きなクエリを試してみることができます。
シミュレーターでは、各レコードはクエリごとにアトラクティブスコアを保持しています。このスコアは、他のレコードと比較して、そのレコードが過去1ヶ月に受け取ったイベントの数で計算されます。これは、Re-Rankingが他のレコードよりも特定のレコードをブーストしている理由を説明するものとなります。
Note
Rulesで設定したプロモーションは、AI Re-Rankingよりも優先されます。人気のあるクエリにおいて、上位のアイテムをRulesで固定(Pin)する場合、AI Re-Rankingの影響は限定的になるでしょう。シミュレーターのRulesトグルを使ってRuleをOffにして、AI Re-Rankingのアクションの効果を評価することができます。AI Re-Rankingがプロモートしたレコードが満足いくものであった場合、Rulesからは設定を削除しても良いかもしれません。
AI Re-Rankingをプロダクションに反映する
注
IndexにAI Re-Rankingの設定を有効にする前に、Re-RankingをA/Bテストするようにしましょう
ダッシュボードのAI Re-Rankingのページで、Re-Rankingを有効にすることができます。有効にしたいIndexを選択してActivate Re-Rankingボタンを押してください。
AI Re-RankingのA/Bテスト
IndexのRe-Rankingのテストには、A/Bテストを使いましょう。Re-Rankingが検索に与える影響を正確に捉えることができます。ダッシュボードのAI Re-Rankingページから直接、ページ右上にあるLaunch an A/B testボタンを押すと、Re-RankingのA/Bテストを作成することができます。お望みのトラフィックを送信する割合や期間を決めてA/Bテストを作成するフォームが表示されます。AI Re-Rankingが特定のフィルターに一致するレコードだけをRe-Rankingするような設定をしていただくこともできます。これによって、例えば在庫がない商品をAI Re-Rankingがプロモーションするのを防ぐことができます。
コメント