Elasticsearchは初めてですか?Elasticsearchを使い始めるウェビナーに参加しましょう。無料のクラウドトライアルを始めるか、今すぐマシンでElasticを試すこともできます。
はじめに
多くの電子商取引ウェブサイトは、レシピ検索エクスペリエンスを強化することに関心を持っています。セマンティック検索を正しく適用すると、顧客は「バレンタインデー用の何か」や「感謝祭の食事」など、より自然なクエリに基づいて必要な材料をすばやく見つけることができます。
この記事では、Elasticsearch を使用して、このようなクエリをサポートするセマンティック検索を実装する方法を説明します。スーパーマーケットの食材や製品のカタログを保存するためのインデックスを設定し、このインデックスを使用してレシピ検索を改善する方法を説明します。この記事全体を通して、このデータ構造を作成し、自然言語処理技術を適用して顧客の意図に沿った関連性の高い結果を提供する方法について説明します。
この記事で紹介したコードはすべて Python で開発されており、 GitHubで入手できます。リポジトリにアクセスしてソース コードを確認し、必要に応じて調整し、開発環境に直接ソリューションを実装できます。
セマンティック検索の実装を開始
セマンティック検索の実装を開始するには、まず自然言語モデルを定義する必要があります。Elastic は独自のモデルELSERを提供していますが、Hugging Face など、さまざまなプロバイダーの NLP モデルの統合もサポートしています。この柔軟性により、ニーズに最適なオプションを選択できます。
この記事では、NLP モデルの展開と管理の複雑さを軽減するELSERを使用します。さらに、Elastic はsemantic_text機能を提供しており、これによりプロセスが大幅に簡素化されます。semantic_textを使用すると、埋め込み生成プロセス全体が簡単かつ自動化されます。推論ポイントを定義し、インデックス マッピングで埋め込みを受け取るフィールドを指定するだけです。ドキュメントのインデックス作成中に埋め込みが生成され、指定されたフィールドに自動的に関連付けられます。
セットアップ手順
以下は、セマンティック検索をサポートするインデックスを作成する手順です。以下の手順に従うと、インデックスが設定され、セマンティック検索の準備が整います。
- 推論ポイント を作成します 。
- インデックスを作成し、埋め込みを受け取ることができるように説明フィールドを semantic_text として設定します。
- 製品カタログを保存する食料品カタログ インデックスにデータをインデックスします。このカタログは、ここにあるデータセットから取得されました。
スーパーマーケットにおけるセマンティック検索の応用
食料品店の製品データがインデックスに入力されたので、セマンティック検索を使用して検索結果を改善するためのクエリをテストおよび検証しています。私たちの目標は、コンテキストとユーザーの意図を理解し、より関連性の高い正確な結果を提供する、よりスマートな検索エクスペリエンスを提供することです。
セマンティック検索が解決する課題
製品カタログに基づいて、従来の語彙検索ではしばしば問題となる語彙とコンテキストの問題に対処することで、セマンティック検索が食料品店での検索エクスペリエンスをどのように変革できるかを探ってみましょう。
1. 料理の意図の解釈
問題 01 : 顧客が「グリル用シーフード」を検索する場合、語彙検索システムはクエリの背後にある意図を完全に理解できない可能性があります。グリルに適したシーフード製品をすべて識別できず、製品名に「シーフード」または「グリル」という正確な用語が含まれる製品のみが返される可能性があります。
まず、語彙検索を実行し、結果を分析します。次に、セマンティック検索で同じことを実行し、同じ検索語の結果を比較します。
クエリ語彙検索
結果:
| 検索タイプ | 名前 | スコア |
|---|---|---|
| 語彙 | 北西部の魚 アラスカ産ベアディズワイガニ | 10.453125 |
| 語彙 | 吉田さんのソース オリジナルグルメ | 7.2289705 |
| 語彙 | プレミアムシーフードバラエティパック - 20個 | 7.1924105 |
| 語彙 | アメリカ産レッドスナッパー - 丸ごと、頭付き、洗浄済み | 6.998647 |
| 語彙 | ロブスターの爪と腕、持続可能な天然漁獲 | 6.438654 |
語彙検索により、American Red Snapper や Northwest Fish Alaskan Bairdi Snow Crab など、グリルに適した魚介類がいくつか返されました。しかし、語彙検索では、シーフードではなくミートソースであるミスターヨシダソースなど、関連性の低い商品がリストの上位に表示され、語彙アルゴリズムが「グリル用」の文脈を完全に理解するのに苦労していることが示唆されました。
セマンティック検索ソリューション
「シーフード」という用語と「グリル」などの調理コンテキストを組み合わせたクエリを使用して、商品名に「グリル」や「シーフード」という単語が直接表示されていない場合でも、グリルに最適な魚の切り身、エビ、ホタテなどの包括的なオプションのリストを返します。これにより、検索結果が顧客の意図にさらに一致するようになります。
クエリセマンティック検索:
| 検索タイプ | 名前 | スコア |
|---|---|---|
| セマンティック | 頭付き、スズキの丸ごと一匹 | 16.175909 |
| セマンティック | アラスカ産クロタラ(セーブルフィッシュ) | 15.855331 |
| セマンティック | アメリカ産レッドスナッパー - 丸ごと、頭付き | 15.454779 |
| セマンティック | 北西部の魚 アラスカ産ベアディズワイガニ | 15.855331 |
| セマンティック | アメリカ産レッドスナッパー - 丸ごと、頭付き | 15.3892355 |
セマンティック検索では、「シーフード」という用語に直接関連する製品が返されるだけでなく、「グリル」というコンテキストも理解し、グリルに適した丸ごとの魚や切り身も表示されました。ここで重要なのは結果の精度であり、これにはグリル料理によく使われるスズキやアラスカ産黒タラなどの丸ごとの魚のオプションも含まれていました。
問題 02 : 多くの顧客は、仕事で長い一日を過ごした後、「平日の簡単な食事」などの用語を使用して、手早く簡単に作れる夕食の解決策を検索します。従来の語彙検索では、手軽な食事という概念を完全には捉えることができず、多くの場合、名前に「簡単」という言葉が含まれる商品のみに焦点が当てられます。
前の問題と同様に、まずは語彙検索を実行します。その後、セマンティック検索を使用したソリューションを適用します。
クエリ語彙検索
結果:
| 検索タイプ | 名前 | スコア |
|---|---|---|
| 語彙 | Avery イージーピール 住所ラベル 4200枚 | 8.017723 |
| 語彙 | Omeals 自己加熱式非常食/携帯食 32 | 6.592727 |
| 語彙 | 沿岸シーフード キハダマグロの角切りポケ | 5.836883 |
| 語彙 | 重量感のある超重量12オンスフォーム | 5.8116536 |
| 語彙 | ヴァニティフェア エブリデイ ナプキン 2枚重ね 110枚入り | 5.752989 |
語彙検索では、Avery Easy Peel Address Labels や Vanity Fair Everyday Napkins など、食事とはまったく関係のないアイテムも含め、関連性の低い結果が返されました。これらの製品は、手早く食事をしたいというユーザーのニーズを満たしていません。語彙検索では確かに 1 つの便利な製品 (Omeals Self Heating Emergency Meals) が返されましたが、ナプキンやラベルなどの他の結果は説明にある「簡単」または「平日の夜」という単語に一致するだけで、素早い食事の解決策を求めるユーザーの意図に真に応えるものではありませんでした。
セマンティック検索ソリューション
手早く簡単に食べられる食事の意図を理解するクエリを実装しました。これは、名前に「簡単」という言葉が明示的に含まれていなくても、調理済みの肉、冷凍パスタ、ミールキットなど、すぐに準備できる製品を関連付けます。このアプローチにより、顧客は平日の夜に素早く夕食をとるのに最適なオプションを見つけられるようになり、利便性のニーズに応えます。
クエリセマンティック検索
結果:
| 検索タイプ | 名前 | スコア |
|---|---|---|
| セマンティック | Omeals 自己加熱式非常食/携帯食 32 | 14.610006 |
| セマンティック | 日清カップヌードル、エビ、2.5オンス | 13.751424 |
| セマンティック | ナマステ グルテンフリー ワッフル&パンケーキミックス | 13.73376 |
| セマンティック | アイダホポテト、ゴールデングリルハッシュブラウンポテト | 12.549422 |
| セマンティック | 日清 カップヌードル チキン 24個入り | 12.034527 |
セマンティック検索では、インスタントラーメン(カップヌードル)、調理済みのジャガイモ、パンケーキミックスなど、平日の夜に簡単に作れる夕食の典型的な選択肢である、手軽で便利な食事に明確に関連する製品が返されました。これは、セマンティック検索が「平日の夜に簡単に作れる食事」というフレーズの背後にある概念を理解し、手早く簡単に作れる食事を見つけたいというユーザーの意図を捉えることができることを示しています。興味深いことに、「ソーダ」などの他のカテゴリの製品も、コンテキストに関連がある場合(食事に添える飲み物など)に含まれることがあります。
2. 地域用語と語彙のバリエーション
問題: ある顧客が「ソーダ」を検索する一方で、別の顧客は同じ商品を「ポップ」で検索する可能性があります。従来の語彙検索では、両方の用語が同じ項目を指していることを認識できません。
クエリ語彙検索
結果:
| 検索タイプ | 名前 | スコア |
|---|---|---|
| 語彙 | プライムハイドレーション+スティック 電解質ドリンクミックス | 14.492869 |
| 語彙 | カプリサン、100%ジュース、バラエティパック | 12.340851 |
| 語彙 | ジョイバースト エナジードリンク、フローズンローズ、12 | 11.839179 |
| 語彙 | ケロッグのポップタルト、フロステッドブラウンシュガーシナモン | 9.97788 |
| 語彙 | カインド ミニバー バラエティパック 0.7 | 9.336912 |
語彙検索は、正確な単語の一致に焦点を当てます。Prime Hydration や Capri Sun などの製品が返される一方で、「pop」という用語との直接一致により、飲み物ではなくスナックである Kellogg's Pop-Tarts など、無関係な結果も表示されました。これは、用語に複数の意味がある場合やあいまいな場合、語彙検索の効果が低下する可能性があることを浮き彫りにしています。
セマンティック検索ソリューション
セマンティッククエリでは、語彙検索では解決できない語彙のバリエーションの問題を克服できます。検索用語を拡張することで、文脈上の意味に基づいた結果を得ることができ、より関連性の高い包括的な回答を提供できます。
クエリ:
結果:
| 検索タイプ | 名前 | スコア |
|---|---|---|
| セマンティック | オリポップ 12オンス プレバイオティクスソーダ バラエティ | 14.776867 |
| セマンティック | バイ アンチオキシダント ココフュージョン バラエティパック 18個 | 14.663253 |
| セマンティック | モンスターエナジードリンク、ゼロウルトラ、24 | 14.486348 |
| セマンティック | ジョイバースト エナジー バラエティ、12液量オンス | 14.007214 |
| セマンティック | ジョイバースト エナジードリンク、フローズンローズ、12 | 13.641038 |
セマンティック検索では、製品名に「pop」という正確な用語が含まれていない場合でも、「soda」の同義語として「pop」の概念に直接一致する製品 (Olipop Prebiotics Soda など) が返されます。検索では、ユーザーの意図(爽やかな低糖飲料)を理解し、プレバイオティクスソーダ(Olipop)や無糖エナジードリンク(Monster Energy Drink)などのオプションを含む関連商品を返すことができました。
まとめ
食料品店のコンテキストでセマンティック検索を実装すると、「グリル用の魚介類」や「平日の簡単な食事」などの複雑なクエリを理解するのに非常に効果的であることが証明されています。このアプローチにより、ユーザーの意図をより正確に解釈し、関連性の高い商品を返すことができました。
Elasticsearch を使用し、ELSER でプロセスを簡素化することで、セマンティック検索を迅速かつ効率的に適用し、検索結果を大幅に改善し、より機敏でターゲットを絞ったショッピング体験を提供できるようになりました。これにより、検索プロセスが最適化されるだけでなく、顧客に提供される結果の関連性も高まりました。
参照資料
モデル ELSER:
https://www.elastic.co/guide/en/elasticsearch/reference/current/put-inference-api.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/infer-service-elser.html
意味テキスト:
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-text.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html
データセット:
https://www.kaggle.com/datasets/bhavikjikadara/grocery-store-dataset?select=GroceryDataset.csv
セマンティック検索:
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/semantic-search-semantic-text.html




