セマンティック検索
セマンティック検索は、検索クエリの意図と文脈的意味に基づいてデータを見つけるのを助ける検索方法であり、クエリ用語の一致(字句検索)に基づくものではありません。
Elasticsearchは、自然言語処理(NLP)とベクトル検索を使用して、さまざまなセマンティック検索機能を提供します。NLPモデルを使用すると、テキストからテキスト埋め込みを抽出できます。埋め込みは、テキストの数値表現を提供するベクトルです。意味が似ているコンテンツは、似たような表現を持っています。
Elastic StackでNLPモデルを使用するためのいくつかのオプションがあります:
semantic_text
ワークフローを使用する(推奨)- 推論APIワークフローを使用する
- Elasticsearchにモデルを直接デプロイする
ワークフローを選択するには、このセクションを参照してください。
また、独自の埋め込みをベクトルとしてElasticsearchに保存することもできます。セマンティック検索に使用するクエリタイプについてのガイダンスは、このセクションを参照してください。
クエリ時に、Elasticsearchは同じNLPモデルを使用してクエリを埋め込みに変換し、類似のテキスト埋め込みを持つドキュメントを見つけることができます。
セマンティック検索ワークフローの選択
semantic_textワークフロー
Elastic StackでNLPモデルを使用する最も簡単な方法は、semantic_text
ワークフローを通じてです。このアプローチを使用することをお勧めします。なぜなら、多くの手動作業を抽象化するからです。データの取り込み、埋め込み、クエリを開始するには、推論エンドポイントとインデックスマッピングを作成するだけで済みます。モデル関連の設定やパラメータを定義したり、推論取り込みパイプラインを作成したりする必要はありません。サポートされているサービスのリストについては、推論エンドポイントAPIの作成のドキュメントを参照してください。
semantic_text
を使用したセマンティック検索チュートリアルでは、プロセスをエンドツーエンドで示しています。
セマンティック検索
セマンティック検索は、検索クエリの意図と文脈的意味に基づいてデータを見つけるのを助ける検索方法であり、クエリ用語の一致(字句検索)に基づくものではありません。
Elasticsearchは、自然言語処理(NLP)とベクトル検索を使用して、さまざまなセマンティック検索機能を提供します。NLPモデルを使用すると、テキストからテキスト埋め込みを抽出できます。埋め込みは、テキストの数値表現を提供するベクトルです。意味が似ているコンテンツは、似たような表現を持っています。
Elastic StackでNLPモデルを使用するためのいくつかのオプションがあります:
semantic_text
ワークフローを使用する(推奨)- 推論APIワークフローを使用する
- Elasticsearchにモデルを直接デプロイする
ワークフローを選択するには、このセクションを参照してください。
また、独自の埋め込みをベクトルとしてElasticsearchに保存することもできます。セマンティック検索に使用するクエリタイプについてのガイダンスは、このセクションを参照してください。
クエリ時に、Elasticsearchは同じNLPモデルを使用してクエリを埋め込みに変換し、類似のテキスト埋め込みを持つドキュメントを見つけることができます。
モデルデプロイメントワークフロー
推論エンドポイントを使用せずに、ElasticsearchにNLPを手動でデプロイすることもできます。これは、Elastic Stackでセマンティック検索を実行するための最も複雑で労力を要するワークフローです。[https://www.elastic.co/guide/en/machine-learning/8.15/ml-nlp-model-ref.html#ml-nlp-model-ref-text-embeddingのサポートされている密なおよび疎なベクトルモデルのリスト]からNLPモデルを選択し、Elandクライアントを使用してデプロイし、インデックスマッピングを作成し、データの取り込みとクエリを開始するための適切な取り込みパイプラインを設定する必要があります。
Elasticsearchにデプロイされたモデルを使用したセマンティック検索チュートリアルでは、プロセスをエンドツーエンドで示しています。
適切なクエリの使用
適切なクエリを作成することは、セマンティック検索にとって重要です。使用するクエリと、クエリでターゲットとするフィールドは、選択したワークフローによって異なります。semantic_text
ワークフローを使用している場合は、非常に簡単です。そうでない場合は、作業している埋め込みのタイプによります。
クエリするフィールドタイプ | 使用するクエリ | メモ |
---|---|---|
semantic_text |
semantic |
semantic_text フィールドは、インデックス時とクエリ時に埋め込みを生成する役割を果たします。 |
sparse_vector |
sparse_vector |
sparse_vector クエリは、クエリ埋め込みを生成できますが、独自の埋め込みを提供することもできます。インデックス時に埋め込みを提供する必要があります。 |
dense_vector |
knn |
knn クエリは、クエリ埋め込みを生成できますが、独自の埋め込みを提供することもできます。インデックス時に埋め込みを提供する必要があります。 |
Elasticsearchにインデックス時とクエリ時の両方で埋め込みを生成させたい場合は、semantic_text
フィールドとsemantic
クエリを使用してください。独自の埋め込みを持ち込みたい場合は、sparse_vector
またはdense_vector
フィールドタイプと、埋め込みを生成するために使用したNLPモデルに応じた関連クエリを使用してください。
Elastic Stackでセマンティック検索を実行する最も簡単な方法については、semantic_text
エンドツーエンドチュートリアルを参照してください。
さらに読む
- チュートリアル:
- インタラクティブな例:
elasticsearch-labs
リポジトリには、Elasticsearch Pythonクライアントを使用した実行可能なPythonノートブックの形式で、いくつかのインタラクティブなセマンティック検索の例が含まれています。- モデルデプロイメントワークフローを使用したELSERによるセマンティック検索
semantic_text
を使用したセマンティック検索
- ブログ: