ブログ

Elasticsearch の NLP とベクトル検索によるチャットボット機能の強化

ベクトル検索と NLP がどのように機能してチャットボットの機能を強化するかを探り、Elasticsearch がどのようにプロセスを促進するかを確認します。

会話型インターフェースは以前から存在しており、顧客サービス、情報検索、タスク自動化など、さまざまなタスクを支援する手段としてますます人気が高まっています。通常、音声アシスタントやメッセージング アプリを通じてアクセスされるこれらのインターフェースは、ユーザーが質問をより効率的に解決できるように人間の会話をシミュレートします。

テクノロジーの進歩に伴い、チャットボットはユーザーにパーソナライズされたエクスペリエンスを提供しながら、より複雑なタスクを迅速に処理するために使用されるようになりました。自然言語処理 (NLP) により、チャットボットはユーザーの言語を処理し、メッセージの意図を識別し、そこから関連情報を抽出できるようになります。たとえば、固有表現抽出では、テキストを一連のカテゴリに分類して重要な情報を抽出します。感情分析は感情的なトーンを識別し、質問応答はクエリに対する「答え」を識別します。NLP の目標は、アルゴリズムが人間の言語を処理し、大量のテキストの中から関連する文章を見つけたり、テキストを要約したり、新しい独自のコンテンツを生成するなど、これまでは人間だけが実行できたタスクを実行できるようにすることです。

これらの高度な NLP 機能は、ベクトル検索と呼ばれるテクノロジーに基づいて構築されています。Elastic は、ベクトル検索、正確なk 最近傍 (kNN) 検索と近似 k 最近傍検索の実行、および NLP をネイティブにサポートしており、Elasticsearch で直接カスタム モデルまたはサードパーティ モデルを使用できます。

このブログ記事では、ベクトル検索と NLP がどのように機能してチャットボットの機能を強化するかを説明し、Elasticsearch がどのようにそのプロセスを促進するかを説明します。まず、ベクトル検索の概要を簡単に説明します。

ベクトル検索

人間は書かれた言語の意味と文脈を理解できますが、機械は同じことはできません。ここでベクトルが登場します。テキストをベクトル表現(テキストの意味の数値表現)に変換することで、マシンはこの制限を克服できます。従来の検索と比較すると、キーワードや頻度に基づく語彙検索に依存するのではなく、ベクトルでは数値に対して定義された演算を使用してテキスト データの処理が可能になります。

これにより、ベクトル検索では、クエリベクトルが与えられた場合に類似性を表す「埋め込み空間」内の距離を使用して、類似の概念またはコンテキストを共有するデータを見つけることができます。データが類似している場合、対応するベクトルも同様になります。

ベクトル検索は NLP アプリケーションで利用されるだけでなく、画像やビデオの処理など、非構造化データが関係するさまざまな他の領域でも使用されます。

チャットボット フローでは、ユーザーのクエリに対して複数のアプローチが可能であり、その結果、情報検索を改善してユーザー エクスペリエンスを向上させるさまざまな方法が存在します。それぞれの選択肢には独自の利点と欠点があるため、利用可能なデータとリソース、トレーニング時間(該当する場合)、および予想される精度を考慮することが重要です。次のセクションでは、質問応答 NLP モデルのこれらの側面について説明します。

質問応答

質問応答 (QA) モデルは、自然言語で尋ねられた質問に答えるように設計された NLP モデルの一種です。ユーザーが、ドキュメント内に既存のターゲット回答がなく、複数のリソースから回答を推測する必要がある質問がある場合、生成型 QA モデルが役立ちます。ただし、これらのモデルは計算コストが高く、ドメイン関連のトレーニングに大量のデータが必要になる可能性があり、この方法はドメイン外の質問を処理するのに特に価値があるにもかかわらず、状況によっては実用的ではない可能性があります。

一方、ユーザーが特定のトピックについて質問し、実際の回答がドキュメント内に存在する場合は、抽出型 QA モデルを使用できます。これらのモデルは、ソース ドキュメントから回答を直接抽出し、透明性と検証性に優れた結果を提供するため、質問にシンプルかつ効率的に回答したい企業や組織にとって、より実用的なオプションとなります。

以下の例は、 Hugging Face で利用可能でElasticsearch にデプロイされた、事前トレーニング済みの抽出 QA モデルを使用して、特定のコンテキストから回答を抽出する方法を示しています。

POST _ml/trained_models/deepset__minilm-uncased-squad2/deployment/_infer
{
    "docs": [{"text_field": "Canvas is a data visualization and presentation application within Kibana. With Canvas, live data can be pulled directly from Elasticsearch and combined with colors, images, text, and other customized options to create dynamic, multi-page displays."}],
    "inference_config": {"question_answering": {"question": "What is Kibana Canvas?"}}
}


{
  "predicted_value": "a data visualization and presentation application",
  "start_offset": 10,
  "end_offset": 59,
  "prediction_probability": 0.28304219431376443
}

トレーニング済みのモデルをデプロイします。

推論取り込みパイプラインにモデルを追加します。

ユーザーのクエリを処理して情報を取得する方法はさまざまであり、非構造化データを扱う場合には、複数の言語モデルとデータ ソースを使用することが効果的な代替手段となります。これを説明するために、選択されたドキュメントから抽出されたデータを考慮してクエリに回答するために使用されるチャットボットのデータ処理の例を示します。

チャットボットのデータ処理:NLPとベクトル検索

上記のように、チャットボットのデータ処理は 3 つの部分に分けられます。

  • ベクター処理:この部分はドキュメントをベクター表現に変換します。

  • ユーザー入力処理:この部分では、ユーザークエリから関連情報を抽出し、セマンティック検索とハイブリッド検索を実行します。

  • 最適化:この部分には監視が含まれており、チャットボットの信頼性、最適なパフォーマンス、優れたユーザー エクスペリエンスを確保するために重要です。

ベクトル処理

処理部分では、まず各ドキュメントの構成要素を決定し、各要素をベクトル表現に変換します。これらの表現は、さまざまなデータ形式に対して作成できます。

埋め込みを計算するために使用できる方法は、事前トレーニング済みのモデルやライブラリなど、さまざまあります。

これらの表現に対する検索と取得の有効性は、既存のデータと、使用される方法の品質と関連性に依存することに注意することが重要です。

ベクトルが計算されると、 dense_vectorフィールド タイプを使用して Elasticsearch に保存されます。

PUT <target>
{
  "mappings": {
    "properties": {
      "doc_part_vector": {
        "type": "dense_vector",
        "dims": 3
      },
      "doc_part" : {
        "type" : "keyword"
      }
    }
  }
}

チャットボットのユーザー入力処理

ユーザー側では、質問を受け取った後、先に進む前にそこから可能な限りすべての情報を抽出すると便利です。これはユーザーの意図を理解するのに役立ちます。この場合、それを支援するために名前付きエンティティ認識モデル (NER)を使用しています。NER は、名前付きエンティティを識別し、事前定義されたエンティティ カテゴリに分類するプロセスです。

POST _ml/trained_models/dslim__bert-base-ner/deployment/_infer
{
  "docs": { "text_field": "How many people work for Elastic?"}
}


{
  "predicted_value": "How many people work for [Elastic](ORG&Elastic)?",
  "entities": [
    {
      "entity": "Elastic",
      "class_name": "ORG",
      "class_probability": 0.4993975435876747,
      "start_pos": 25,
      "end_pos": 32
    }
  ]
}

必須のステップではありませんが、構造化データや上記または別の NLP モデルの結果を使用してユーザーのクエリを分類することで、フィルターを使用して kNN 検索を制限できます。これにより、処理する必要があるデータの量が削減され、パフォーマンスと精度が向上します。

    "filter": {
      "term": {
        "org": "Elastic"
      }
    }

セマンティック検索とハイブリッド検索

プロンプトはユーザーのクエリから生成され、チャットボットは変動性と曖昧性を持つ人間の言語を処理する必要があるため、セマンティック検索は最適です。Elasticsearch では、クエリ文字列と埋め込みモデルの ID を query_vector_builder オブジェクトに渡すことで、セマンティック検索を 1 ステップで実行できます。これにより、クエリがベクトル化され、kNN検索が実行され、クエリに意味的に最も近い上位 k 個の一致が取得されます。

POST /<target>/_search
{
  "knn": {
    "field": "doc_part_vector",
    "k": 5,
    "num_candidates": 20,
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "<text-embedding-model-id>",
        "model_text": "<query_string>"
      }
    }
  }
 }

エンドツーエンドの例: テキスト埋め込みモデルを展開し、セマンティック検索に使用する方法。Elasticsearch は、疎モデルであるOkapi BM25 の Lucene 実装を使用してテキストクエリの関連性をランク付けし、密モデルはセマンティック検索に使用されます。ベクトル一致とテキスト クエリから取得された 一致の両方の長所 を組み合わせる には 、 ハイブリッド検索 を実行できます。

POST <target>/_search
{
  "query": {
          "match": {
            "content": {
              "query": "<query_string>"
            }
        }
  },
  "knn": {
    "field": "doc_part_vector",
    "query_vector_builder": {
      "text_embedding": {
    "model_id": "<text-embedding-model-id>",
     "model_text": "<query_string>"
      }
    },
    "filter": {
      "term": {
        "org": "Elastic"
      }
    }
  }
}

疎モデルと密モデルの両方を組み合わせると、多くの場合、最良の結果が得られます。

通常、スパース モデルは短いクエリと特定の用語で優れたパフォーマンスを発揮しますが、密なモデルはコンテキストと関連付けを活用します。これらの方法がどのように比較され、相互に補完し合うかについて詳しく知りたい場合は、ここで、検索用に特別にトレーニングされた 2 つの高密度モデルに対して BM25 をベンチマークします。

最も関連性の高い結果は通常、ユーザーに最初に提供される回答になります。_scoreは、返されたドキュメントの関連性を判断するために使用される数値です。

チャットボットの最適化

チャットボットのユーザー エクスペリエンス、パフォーマンス、信頼性を向上させるには、ハイブリッド スコアリングを適用することに加えて、次のアプローチを組み込むことができます。感情分析:ダイアログが展開されるときにユーザーのコメントや反応を認識できるように、感情分析モデルを組み込むことができます。

POST _ml/trained_models/distilbert-base-uncased-finetuned-sst-2-english/deployment/_infer
{
  "docs": { "text_field": "That was not my question!"}
}


{
  "predicted_value": "NEGATIVE",
  "prediction_probability": 0.980080439016437
}

GPT の機能:全体的なエクスペリエンスを向上させる代わりに、Elasticsearch の検索関連性と OpenAI の GPT 質問応答機能を組み合わせ、 Chat Completion APIを使用して、上位 k 件のドキュメントをコンテキストとして考慮し、ユーザーモデルが生成した応答を返すことができます。プロンプト:<user_question> 「このドキュメント のみを使用して、この質問<top_search_result> に回答してください」

可観測性:あらゆるチャットボットのパフォーマンスを確保することは非常に重要であり、これを実現するには監視が不可欠な要素です。チャットボットのやり取りをキャプチャするログに加えて、応答時間、待ち時間、その他の関連するチャットボットのメトリックを追跡することが重要です。これにより、パターンや傾向を特定し、異常を検出することさえ可能になります。Elastic Observabilityツールを使用すれば、こうした情報を収集・分析できます。

まとめ

このブログ記事では、NLP とベクトル検索とは何かを説明し、ドキュメントのベクトル表現から抽出されたデータを考慮してユーザーのクエリに応答するために使用されるチャットボットの例を詳しく説明します。

実証されているように、NLP とベクトル検索を使用すると、チャットボットは構造化されたターゲット データを超えた複雑なタスクを実行できます。これには、複数のデータ ソースと形式をコンテキストとして使用して推奨事項を作成し、特定の製品またはビジネス関連のクエリに回答するとともに、パーソナライズされたユーザー エクスペリエンスを提供することも含まれます。

ユースケースは、顧客からの問い合わせに対応して顧客サービスを提供することから、開発者のクエリを支援し、ステップバイステップのガイダンスを提供したり、推奨事項を提案したり、タスクを自動化したりすることまで多岐にわたります。目標と既存のデータに応じて、他のモデルや方法を活用してさらに優れた結果を達成し、全体的なユーザー エクスペリエンスを向上させることもできます。

このトピックに関して役立つと思われるリンクをいくつか紹介します。

  1. 自然言語処理(NLP)の導入方法:はじめに

  2. Elasticsearchにおける画像類似検索の概要

  3. ChatGPTとElasticsearch: OpenAIとプライベートデータの出会い

  4. Monitor OpenAI API and GPT models with OpenTelemetry and Elastic(OpenTelemetryとElasticを利用してOpenAI APIとGPTモデルを監視)

  5. ITリーダーが検索エクスペリエンスを向上させるためにベクトル検索を必要とする5つの理由

Elasticsearch に NLP とネイティブベクトル検索を組み込むことで、そのスピード、スケーラビリティ、検索機能を活用し、構造化データか非構造化データかを問わず大量のデータを処理できる、非常に効率的で効果的なチャットボットを作成できます。

始める準備はできましたか?Elastic Cloud の無料トライアルを開始してください。

このブログ投稿では、それぞれの所有者が所有および運営するサードパーティ製の生成 AI ツールを使用したり、参照したりする場合があります。Elastic はサードパーティ製ツールを一切管理しておらず、そのコンテンツ、操作、使用、またそのようなツールの使用によって発生する損失や損害については一切責任を負いません。個人情報、機密情報、秘密情報を扱う AI ツールを使用する場合は注意してください。送信したデータは AI のトレーニングやその他の目的で使用される場合があります。お客様が提供する情報が安全に保管され、機密性が保たれるという保証はありません。生成 AI ツールを使用する前に、プライバシー慣行と利用規約をよく理解しておく必要があります。

Elastic、Elasticsearch および関連するマークは、米国およびその他の国における Elasticsearch NV の商標、ロゴ、または登録商標です。その他すべての会社名および製品名は、それぞれの所有者の商標、ロゴ、または登録商標です。

チャットボットを最適化する方法

1.

GPT の機能を活用する: Elasticsearch の検索関連性と OpenAI の GPT 質問応答機能を組み合わせ、Chat Completion API を利用して、上位 k 件のドキュメントをコンテキストとして考慮し、ユーザー モデルによって生成された応答を返します。

2.

感情分析を組み込む: 感情分析モデルを組み込んで、ダイアログが展開されるにつれてユーザーのコメントや反応を認識できるようにします。

3.

可観測性: チャットボットのインタラクションをキャプチャするログに加えて、応答時間、遅延、その他の関連するチャットボットのメトリックを追跡することが重要です。そうすることで、パターンや傾向を識別し、異常を検出することさえできます。

関連記事

LINQ to Elasticsearch ES|QL:C#を記述してElasticsearchをクエリ

Florian Bernd

OpenSearchとElasticsearchの違い:ベクトル検索のパフォーマンス比較

Ugo Sangiorgi

AI盗作:Elasticsearchによる盗作検出

Priscilla Parodi

高度なRAGテクニックパート2:クエリとテスト

Han Xiang Choong

ElasticsearchにおけるHNSWの適応的早期終了

Tommaso Teofili

最先端の検索体験を構築する準備はできましたか?

十分に高度な検索は 1 人の努力だけでは実現できません。Elasticsearch は、データ サイエンティスト、ML オペレーター、エンジニアなど、あなたと同じように検索に情熱を傾ける多くの人々によって支えられています。ぜひつながり、協力して、希望する結果が得られる魔法の検索エクスペリエンスを構築しましょう。

はじめましょう