Share via


検索結果のカスタマイズ: Azure Search の「タグ ブースト」機能を発表

このポストは、2 月 5 日に投稿された Personalizing search results: Announcing ‘Tag Boosting’ in Azure Search の翻訳です。

アプリケーションを使用しているときにデータを検索すると、関連する結果がすぐに返されます。この「関連性」の程度を決定付けるのは、主にアプリケーションやユーザーの特性です。Azure Search では、アプリケーションでの検索の関連性を決定する「スコアリング プロファイル」という機能を使用できます。この機能の詳細はこちらのページ (英語) でご確認いただけます。

検索クエリから戻された結果にはすべてスコアが付けられ、既定でスコアの降順に並べ替えられます (この順序は変更することもできます)。スコアリング プロファイルは、ドキュメント内の数値 (例: 星による評価や収益率の高いアイテムを優先) や日付 (例: 古いドキュメントよりも新しいものを優先)、参照地点との距離 (例: クエリの途中で通過した参照地点と地理的に距離の近いアイテムを優先) に基づいて、ドキュメントの検索スコアを引き上げます。

しかし、現時点では、個々のユーザーに最適なデータに基づいてスコアを引き上げるスコアリング プロファイル モデルは実装されていません。たとえば、あなたのサイトで顧客が定期的に商品を購入しているとします。あなたは各顧客が頻繁に購入する上位 3 ~ 4 つのブランドを追跡しています。そこで、各顧客の好みのブランドの製品に対応するドキュメントを検索結果の上位に表示したいと考えました。ただし、上位に表示されるべきものは状況によって変化します。各顧客が好むブランドの上位数種類の集合は、それぞれ異なるからです。

現在テストを進めている API バージョン 2014-10-20-Preview (英語) では "tag" という名前の新しいスコアリング関数が導入され、このような状況への対応が可能になっています。

タグ ブースト機能
新しい “tag” スコアリング関数は、次のように使用します。
1. インデックス定義の一部として、tag スコアリング関数を使用してスコアリング プロファイルを作成します。この関数では、タグまたはラベルのリストがドキュメント内のどのフィールドに含まれているかを指定します (通常は文字列のコレクション フィールドに使用します)。上の例では、製品のブランドを示すタグが各製品に 1 つ以上付与されているものとします。
2. クエリ実行時に、各要求は想定する状況に対応するタグやラベルのリストを取得します。上の例では、特定の顧客の上位ブランドのリストを読み込みます (顧客プロファイル レコードの一部に保持されているものとします)。
3. スコアリングの際に、Azure Search は入力されたクエリ内のリストと共通するタグが存在するドキュメントのスコアを引き上げます。
実際のインデックス定義と共にこの手順を具体的に見てみましょう。インデックスは下記のようになります。

 {
  "name": "products",
  "fields": [
    { "name": "id", "type": "Edm.String", "key": true },
    { "name": "name", "type": "Edm.String" },
    { "name": "brandTags", "type": "Collection(Edm.String)", "searchable": false }
  ],
  "scoringProfiles": [
  {
    "name": "personalized",
    "functions": [
    {
      "type": "tag",
      "boost": 2,
      "fieldName": "brandTags",
      "tag": { "tagsParameter": "brands" }
    }
    ]
  }
  ]
}

このインデックス定義では、3 つのフィールド (id、name、brandTags)、および 1 つのスコアリング関数を持つ 1 つのスコアリング プロファイルが定義されています。これを使用すると、通常どおりドキュメントにインデックスを付与し、その後クエリを発行できます。

クエリを発行する場合、アプリケーションで使用可能な通常の検索オプションに加えて、スコアリング プロファイルで定義したパラメーター (“brands”) を含めます。

例: https://…/indexes/products/docs?search=&scoringParameter=brands:brandA,brandB

この要求では、通常のテキスト一致によってドキュメントにスコアが付与されますが、それに加えて brandA または brandB との一致によりスコアが引き上げられ、顧客のニーズにマッチした結果が表示される可能性が高くなります。

シナリオ
上記のとおり、tag スコアリング プロファイル機能は検索ランキングを顧客に合わせてカスタマイズする際に使用できます。
e コマース アプリケーションの場合、顧客の購入履歴のそれぞれにタグ付けしたり、機械学習やクラスタリングを利用してショッピング カートの内容に基づいてグループ化やタグ付けしたりできます。また、手動でタグを付けることもできます。最初は顧客を識別してタグ付けするという簡単なところからこの機能の利用を開始して、徐々に内容を充実させていくことをお勧めします。

また、タグ ブースト機能ではロールに基づいて異なる結果を得ることができます。たとえば、いくつかのトピックのドキュメントにインデックスを作成する場合、特定のトピックに対する各ユーザーのアフィニティを把握していれば、タグ ブースト機能を使用して、各ユーザーに応じたトピックのドキュメントを優先的に表示するようにできます。同様に、複数の部署で使用されている基幹業務アプリケーションの場合、各ドキュメントに 1 つまたは複数の分野に関するアフィニティを表す “area” フィールドまたは “areas” フィールドが設定されていれば、ユーザーの部署をクエリ タグとして使用し、特定分野の業務に関連の深いドキュメント (例: 顧客レコード、マーケティング キャンペーン、連絡先情報、その他インデックスを付与したものすべて) のスコアを引き上げることができます。

使用例
これは既にあらゆるサービスで使用されています。この手法については現在皆様からのフィードバックを収集中であるため、テスト中の 2014-10-20-Preview バージョンの API でのみご利用いただけます。ご意見やご質問がありましたら、Azure Search のフォーラム (英語) までお寄せください。

tag スコアリング関数の詳細については、2014-10-20-Preview のドキュメント (英語) を参照してください。

筆者宛てのご意見などは、ブログ (英語) または Twitter でお待ちしています。