Amazon Web Services ブログ

Amazon OpenSearch Service ベクトルエンジンを使用したセマンティック検索の試行

Amazon OpenSearch Service は、2020 年に kNN プラグインが導入されて以来、レキシカル検索とベクトル検索の両方を長年にわたりサポートしてきました。2023 年初頭に AWS が Amazon Bedrock を立ち上げるなど、生成 AI の最近の進歩を受けて、OpenSearch Service のベクトルデータベース機能と Amazon Bedrock ホストモデルを組み合わせて使用できるようになりました。これにより、セマンティック検索、検索拡張生成 (RAG)、推薦エンジン、高品質なベクトル検索に基づくリッチメディア検索を実装できます。最近、Amazon OpenSearch Serverless のベクトルエンジンがローンチしたことで、このようなソリューションをさらに簡単にデプロイできるようになりました。

OpenSearch Service は、さまざまな検索と関連性ランキングの技術をサポートしています。レキシカル検索は、クエリに現れる単語をドキュメント内で探します。セマンティック検索はベクトル埋め込みによってサポートされ、ドキュメントとクエリをセマンティックな高次元のベクトル空間に埋め込みます。意味的に関連するテキストはベクトル空間内で近くに配置されることから、意味的に類似していると判断できます。その結果、クエリと同一の単語がなくても、類似するアイテムを返すことができます

公開されている OpenSearch Playground 上に、異なる手法の長所と短所を示す2つのデモを用意しました。1つはテキストベクトル検索とレキシカル検索を比較したもので、もう1つはテキストと画像のクロスモーダル検索とテキストベクトル検索を比較したものです。OpenSearch の Compare Search Results ツールを使用すると、異なるアプローチを比較できます。このデモでは、Amazon Bedrock でホストされているAmazon Titan ファンデーションモデルを埋め込みのために使用していますが、ファインチューニングは行っていません。データセットは、Amazon の衣料品、宝石、アウトドア製品の一部から構成されています。

背景

検索エンジンは、特殊な種類のデータベースです。ドキュメントやデータを保存し、その中から最も関連性の高いものを検索するクエリを実行できます。エンドユーザーの検索クエリは通常、検索ボックスに入力されたテキストで構成されます。そのテキストを利用する上で重要な 2 つの技術が、レキシカル検索とセマンティック検索です。レキシカル検索では、検索エンジンが検索クエリの単語とドキュメントの単語を比較・照合します。ユーザーが入力したすべての単語、またはほとんどの単語を含むアイテムのみが、クエリと一致します。セマンティック検索では、検索エンジンが機械学習(ML)モデルを使用して、ソースドキュメントのテキストを高次元のベクトル空間内の密なベクトルとしてエンコードします。これは「テキストをベクトル空間に埋め込む」とも呼ばれます。同様にクエリをベクトルとして符号化し、距離メトリックを使用して多次元空間内の近傍ベクトルを見つけます。近傍ベクトルを見つけるアルゴリズムは、kNN (k 最近傍)と呼ばれます。セマンティック検索では、クエリ内の個々の単語との一致による検索ではなく、クエリの埋め込みベクトルに近いベクトル空間内におけるベクトルの検索を行います。つまり、クエリと意味的に似ているドキュメントが検索されます。したがって、ユーザーはクエリに含まれている単語を一切含まないアイテムについても、関連性が高いものであれば検索することができます。

ベクトル検索

ベクトル検索 のデモは、ベクトル埋め込みがクエリを構成する単語だけでなく、クエリのコンテキストをどのように捉えることができるかを示しています。 上部のテキストボックスに、tennis clothes とクエリを入力します。左側 (クエリ1) には、amazon_products_text_embedding インデックスを使用した OpenSearch DSL (クエリのドメイン固有言語)のセマンティッククエリがあり、右側(クエリ2)には、amazon_products_text インデックスを使用したシンプルなレキシカルクエリがあります。レキシカル検索は、服がトップス、ショーツ、ドレスなどであることを知らない一方で、セマンティック検索はそれを知っていることがわかります。

Compare semantic and lexical results

同様に、warm-weather hat で検索した場合、セマンティックな結果は温かい季節に適したたくさんの帽子を見つけますが、レキシカル検索は、「温かい」と「帽子」という単語を含む結果を返します。これらは全て、温かい季節の帽子には適さず、寒い季節の帽子です。同様に、長袖の長いドレスを探している場合、long long-sleeved dress で検索するかもしれません。レキシカル検索は、長袖の短いドレスや、説明に「ドレス」という単語が現れる子供のドレスシャツを見つけてしまいますが、セマンティック検索は、少数のエラーはあるものの、ほとんどの長袖の長いドレスを見つけるなど、関連性の高い結果を返しています。

クロスモーダル画像検索

テキストと画像のクロスモーダル検索 のデモは、テキストの説明を使って画像を検索する方法を示しています。これは、事前に生成したマルチモーダルな埋め込みを利用して、テキストの説明と関連する画像を見つけることで実現しています。視覚的類似性(左側)と テキストの類似性(右側)で検索を比較します。場合によっては、非常に似た結果が得られます。

Compare image and textual embeddings

マルチモーダルモデルについて詳しく知りたい方は、AWS スペシャリストにお問い合わせください。

セマンティックサーチによる本番品質の検索体験の構築

これらのデモは、ベクトルベースのセマンティック検索と単語ベースのレキシカル検索の特性の違いと、OpenSearch Serverless のベクトルエンジンを利用して検索エクスペリエンスを構築することでどのようなことができるかを示しています。 もちろん、実際の検索エクスペリエンスでは、結果を改善するためにより多くのテクニックが使用されます。 特に、OpenSearch Project における検証では、レキシカル検索やベクトル検索だけの場合と比較して、業界標準のテストセットで測定した検索結果の品質が、レキシカルとベクトルのアプローチを組み合わせたハイブリッド検索を用いることで通常 15% 改善されることが示されています。これは、NDCG@10 メトリック(上位 10 件の結果における正規化減損累積利得)で測定されます。 改善されるのは、レキシカル検索のほうが固有名詞の検索に対してベクトル検索よりも優れており、セマンティック検索のほうが幅広いクエリに対してより適しているためです。 たとえば、セマンティック検索とレキシカル検索の比較で、カヌーのブランド名である saranac 146 というクエリは、レキシカル検索では非常にうまく機能しますが、セマンティック検索では関連する結果が返されません。 これは、セマンティック検索とレキシカル検索の組み合わせが優れた結果をもたらす理由を示しています。

まとめ

OpenSearch Serviceには、セマンティック検索と従来のレキシカル検索の両方をサポートするベクトルエンジンが含まれています。 デモページで示されている例は、さまざまな手法の長所と短所を示しています。 OpenSearch 2.9以 降を使用している場合、独自のデータにSearch Comparison Toolを使用できます。

詳細情報

OpenSearch のセマンティック検索機能の詳細については、以下を参照してください。


著者について

Stavros Macrakis は、Amazon Web Services の OpenSearch プロジェクトのシニアテクニカルプロダクトマネージャーです。検索結果の品質を向上させるツールを顧客に提供することに情熱を注いでいます。

翻訳はソリューションアーキテクトの榎本が担当いたしました。原文はこちらです。