<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title><![CDATA[Priscilla Parodi - Elasticsearch Labs]]></title>
    <description><![CDATA[Articles and tutorials from the Search team at Elastic]]></description>
    <copyright><![CDATA[© 2026. Elasticsearch B.V. All Rights Reserved]]></copyright>
    <image>
      <title><![CDATA[Priscilla Parodi - Elasticsearch Labs]]></title>
      <url>https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt1121c0bf0e8a6e65/6a88da6340a1841030ef456f/search-labs-thumbnail.png</url>
      <link>https://www.elastic.co/de/search-labs/author/priscilla-parodi</link>
    </image>
    <link>https://www.elastic.co/de/search-labs/author/priscilla-parodi</link>
    <atom:link href="https://www.elastic.co/de/search-labs/rss/author/priscilla-parodi.xml" rel="self" type="application/rss+xml"/>
    <language><![CDATA[de]]></language>
    <lastBuildDate>Mon, 21 Sep 2026 08:45:24 GMT</lastBuildDate>
  <item>
    <title><![CDATA[KI-Plagiat: Plagiatserkennung mit Elasticsearch]]></title>
    <description><![CDATA[Hier erfahren Sie, wie Sie mithilfe von Elasticsearch auf KI-Plagiate prüfen können. Der Schwerpunkt liegt dabei auf Anwendungsfällen mit NLP-Modellen und Vektorsuche.]]></description>
    <content:encoded><![CDATA[<p>Plagiat kann <strong>direkt</strong> sein, indem Teile oder der gesamte Inhalt kopiert werden, oder <strong>paraphrasiert</strong>, wobei das Werk des Autors durch die Änderung einiger Wörter oder Formulierungen umformuliert wird.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltb6e139760e56ec98/6a171147dc55de0ad2e00edf/5d7073187fda829438aeec8d3a1194a5bea2ba57-1440x347.png" alt="" /><p>Es besteht ein Unterschied zwischen Inspiration und Paraphrasierung. Es ist möglich, einen Inhalt zu lesen, sich davon inspirieren zu lassen und die Idee dann mit eigenen Worten weiterzuentwickeln, selbst wenn man zu einem ähnlichen Schluss kommt.</p><p>Obwohl Plagiat schon seit langer Zeit ein Diskussionsthema ist, hat die beschleunigte Produktion und Veröffentlichung von Inhalten dazu geführt, dass es weiterhin relevant ist und eine ständige Herausforderung darstellt.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltc2af1678cb04506b/6a171149cf4f251c2ab2d257/a0b9a98d729db09dae0a79315c001e6763c12704-1400x1016.png" alt="" /><p>Diese Herausforderung beschränkt sich nicht auf Bücher, wissenschaftliche Forschung oder Gerichtsdokumente, wo häufig Plagiatsprüfungen durchgeführt werden. Dies kann sich auch auf Zeitungen und sogar soziale Medien erstrecken.</p><p>Wie kann Plagiat angesichts der Informationsfülle und des einfachen Zugangs zu Veröffentlichungen effektiv und in großem Umfang bekämpft werden?</p><p>Universitäten, Regierungsstellen und Unternehmen nutzen verschiedene Instrumente, aber während eine einfache <a href="https://www.elastic.co/search-labs/lexical-and-semantic-search-with-elasticsearch">lexikalische Suche</a> direkte Plagiate effektiv aufdecken kann, liegt die größte Herausforderung in der Identifizierung <strong>paraphrasierter Inhalte.</strong></p><h2>Plagiatserkennung mit generativer KI</h2><p>Mit generativer KI entsteht eine neue Herausforderung. Gilt von KI generierter Inhalt als Plagiat, wenn er kopiert wird?</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt8a1ed1b6fa3f1a56/6a17114b4a531bc40736aa69/9345b28d6d27c37469bc38e823c41780b4eabfe5-1440x875.png" alt="" /><p>In den <a href="https://openai.com/policies/terms-of-use">Nutzungsbedingungen</a> von <a href="https://openai.com/">OpenAI ist beispielsweise festgelegt, dass OpenAI keine Urheberrechte an Inhalten beansprucht, die von der API für Benutzer generiert werden.</a> In diesem Fall können die Nutzer ihrer generativen KI die generierten Inhalte nach Belieben ohne Quellenangabe verwenden.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/bltbc2e08ab5b808e38/6a17114dab7f086cbadb9f93/e1f415f69a247666f02ddc81468944920c874cd7-968x814.png" alt="" /><p>Die Akzeptanz des Einsatzes von generativer KI zur Effizienzsteigerung ist jedoch weiterhin Gegenstand von Diskussionen.</p><p>In dem Bestreben, einen Beitrag zur Plagiatserkennung zu leisten, entwickelte OpenAI ein <a href="https://huggingface.co/roberta-base-openai-detector">Erkennungsmodell</a> , räumte aber später ein, dass dessen Genauigkeit nicht ausreichend hoch sei.</p><p><em>„Wir glauben, dass diese Genauigkeit für eine eigenständige Erkennung nicht ausreicht und mit metadatenbasierten Ansätzen, menschlichem Urteilsvermögen und Aufklärung der Öffentlichkeit kombiniert werden muss, um effektiver zu sein.“</em></p><p>Die Herausforderung besteht weiterhin; allerdings stehen mit der Verfügbarkeit von mehr Werkzeugen nun auch mehr Möglichkeiten zur Erkennung von Plagiaten zur Verfügung, selbst bei paraphrasierten und KI-generierten Inhalten.</p><h2>Plagiatserkennung mit Elasticsearch</h2><p>In Anbetracht dessen untersuchen wir in diesem Blog einen weiteren Anwendungsfall von Natural Language Processing (NLP)-Modellen und Vector Search, nämlich die Plagiatserkennung, die über die Metadatensuche hinausgeht.</p><p>Dies wird anhand von <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/plagiarism-detection-with-elasticsearch/plagiarism_detection_es.ipynb">Python-Beispielen</a> demonstriert, wobei wir einen <a href="https://sbert.net/datasets/emnlp2016-2018.json">Datensatz</a> von <a href="https://www.sbert.net/">SentenceTransformers</a> verwenden, der Artikel zum Thema NLP enthält. Wir prüfen die Abstracts auf Plagiat, indem wir eine „semantische Textähnlichkeit“ durchführen und dabei „Abstract“-Einbettungen berücksichtigen, die mit einem zuvor in Elasticsearch importierten <a href="https://huggingface.co/sentence-transformers/all-mpnet-base-v2">Text-Einbettungsmodell</a> generiert wurden. Um zudem KI-generierte Inhalte – also KI-Plagiate – zu identifizieren, wurde ein von OpenAI entwickeltes <a href="https://huggingface.co/roberta-base-openai-detector">NLP-Modell</a> in Elasticsearch importiert.</p><p>Die folgende Abbildung veranschaulicht den Datenfluss:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0464f88d3ed12070/6a17114fab7f084905db9f97/1ad89c98a2f42a497548ca3947749bad54ec1172-1440x880.png" alt="" /><p>Während der <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/ingest.html">Ingest-Pipeline</a> mit einem <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/inference-processor.html">Inferenzprozessor</a> wird der Absatz „abstract“ einem 768-dimensionalen Vektor, dem „abstract_vector.predicted_value“, zugeordnet.</p><p>Abbildung:</p>"abstract_vector.predicted_value": { # Inference results field
"type": "dense_vector", 
"dims": 768, # model embedding_size
"index": "true", 
"similarity": "dot_product" # When indexing vectors for approximate kNN search, you need to specify the similarity function for comparing the vectors.
<p>Die Ähnlichkeit zwischen Vektordarstellungen wird mithilfe einer Vektorähnlichkeitsmetrik gemessen, die über den <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html#dense-vector-params">Parameter</a> „Ähnlichkeit“ definiert ist.</p><p><a href="https://en.wikipedia.org/wiki/Cosine_similarity">Der Kosinus</a> ist das Standardähnlichkeitsmaß und wird wie folgt berechnet: '(1 + cosine(query, vector)) / 2'. Sofern Sie die ursprünglichen Vektoren nicht erhalten müssen und sie nicht im Voraus normalisieren können, ist die effizienteste Methode zur Durchführung der Kosinusähnlichkeit die Normalisierung aller Vektoren auf Einheitslänge. Dadurch wird vermieden, dass während der Suche zusätzliche Vektorlängenberechnungen durchgeführt werden, stattdessen wird 'dot_product' verwendet.</p><p>In derselben Pipeline erkennt ein weiterer Inferenzprozessor, der das <a href="https://huggingface.co/roberta-base-openai-detector">Textklassifizierungsmodell</a> enthält, ob der Inhalt „Real“ (wahrscheinlich von Menschen geschrieben) oder „Fake“ (wahrscheinlich von einer KI geschrieben) ist, und fügt jedem Dokument den Wert „openai-detector.predicted_value“ hinzu.</p><p>Ingest-Pipeline:</p>client.ingest.put_pipeline( 
    id="plagiarism-checker-pipeline",
    processors = [
    {
      "inference": { #for ml models - to infer against the data that is being ingested in the pipeline
        "model_id": "roberta-base-openai-detector", #text classification model id
        "target_field": "openai-detector", # Target field for the inference results
        "field_map": { #Maps the document field names to the known field names of the model.
        "abstract": "text_field" # Field matching our configured trained model input. 
        }
      }
    },
    {
      "inference": {
        "model_id": "sentence-transformers__all-mpnet-base-v2", #text embedding model id
        "target_field": "abstract_vector", # Target field for the inference results
        "field_map": {
        "abstract": "text_field" # Field matching our configured trained model input. Typically for NLP models, the field name is text_field.
        }
      }
    }
    
  ]
)
<p>Zum Zeitpunkt der Abfrage wird dasselbe Text-Embedding-Modell auch verwendet, um die Vektordarstellung der Abfrage 'model_text' in einem 'query_vector_builder'-Objekt zu generieren.</p><p>Bei einer k-Nächste-Nachbarn-Suche (kNN) werden die k nächsten Vektoren zum Anfragevektor anhand der Ähnlichkeitsmetrik ermittelt.</p><p>Der _Score jedes Dokuments wird aus der Ähnlichkeit abgeleitet, wobei ein höherer Score einer höheren Platzierung entspricht. Das bedeutet, dass das Dokument semantisch ähnlicher ist. Als Ergebnis geben wir drei Möglichkeiten aus: Bei einem Wert &gt; 0,9 gehen wir von „hoher Ähnlichkeit“ aus; bei einem Wert &lt; 0,7 von „geringer Ähnlichkeit“; andernfalls von „mittlerer Ähnlichkeit“. Je nach Anwendungsfall haben Sie die Möglichkeit, unterschiedliche Schwellenwerte festzulegen, um zu bestimmen, ab welchem _score-Wert ein Plagiat vorliegt oder nicht.</p><p>Zusätzlich wird eine Textklassifizierung durchgeführt, um auch KI-generierte Elemente in der Textanfrage zu erkennen.</p><p>Abfrage:</p>from elasticsearch import Elasticsearch
from elasticsearch.client import MlClient

#duplicated text - direct plagiarism test

model_text = 'Understanding and reasoning about cooking recipes is a fruitful research direction towards enabling machines to interpret procedural text. In this work, we introduce RecipeQA, a dataset for multimodal comprehension of cooking recipes. It comprises of approximately 20K instructional recipes with multiple modalities such as titles, descriptions and aligned set of images. With over 36K automatically generated question-answer pairs, we design a set of comprehension and reasoning tasks that require joint understanding of images and text, capturing the temporal flow of events and making sense of procedural knowledge. Our preliminary results indicate that RecipeQA will serve as a challenging test bed and an ideal benchmark for evaluating machine comprehension systems. The data and leaderboard are available at http://hucvl.github.io/recipeqa.'

response = client.search(index='plagiarism-checker', size=1,
    knn={
        "field": "abstract_vector.predicted_value",
        "k": 9,
        "num_candidates": 974,
        "query_vector_builder": { #The 'all-mpnet-base-v2' model is also employed to generate the vector representation of the query in a 'query_vector_builder' object.
            "text_embedding": {
                "model_id": "sentence-transformers__all-mpnet-base-v2",
                "model_text": model_text
            }
        }
    }
)

for hit in response['hits']['hits']:
    score = hit['_score']
    title = hit['_source']['title']
    abstract = hit['_source']['abstract']
    openai = hit['_source']['openai-detector']['predicted_value']
    url = hit['_source']['url']

    if score &gt; 0.9:
        print(f"\nHigh similarity detected! This might be plagiarism.")
        print(f"\nMost similar document: '{title}'\n\nAbstract: {abstract}\n\nurl: {url}\n\nScore:{score}\n\n")

        if openai == 'Fake':
            print("This document may have been created by AI.\n")

    elif score &lt; 0.7:
        print(f"\nLow similarity detected. This might not be plagiarism.")

        if openai == 'Fake':
            print("This document may have been created by AI.\n")

    else:
        print(f"\nModerate similarity detected.")
        print(f"\nMost similar document: '{title}'\n\nAbstract: {abstract}\n\nurl: {url}\n\nScore:{score}\n\n")

        if openai == 'Fake':
            print("This document may have been created by AI.\n")

ml_client = MlClient(client)

model_id = 'roberta-base-openai-detector' #open ai text classification model

document = [
    {
        "text_field": model_text
    }
]

ml_response = ml_client.infer_trained_model(model_id=model_id, docs=document)

predicted_value = ml_response['inference_results'][0]['predicted_value']

if predicted_value == 'Fake':
    print("\nNote: The text query you entered may have been generated by AI.\n")
<p>Ausgabe:</p>High similarity detected! This might be plagiarism.

Most similar document: 'RecipeQA: A Challenge Dataset for Multimodal Comprehension of Cooking Recipes'

Abstract: Understanding and reasoning about cooking recipes is a fruitful research direction towards enabling machines to interpret procedural text. In this work, we introduce RecipeQA, a dataset for multimodal comprehension of cooking recipes. It comprises of approximately 20K instructional recipes with multiple modalities such as titles, descriptions and aligned set of images. With over 36K automatically generated question-answer pairs, we design a set of comprehension and reasoning tasks that require joint understanding of images and text, capturing the temporal flow of events and making sense of procedural knowledge. Our preliminary results indicate that RecipeQA will serve as a challenging test bed and an ideal benchmark for evaluating machine comprehension systems. The data and leaderboard are available at[ http://hucvl.github.io/recipeqa](http://hucvl.github.io/recipeqa).

url:[http://aclweb.org/anthology/D18-1166](http://aclweb.org/anthology/D18-1166)

Score:1.0
<p>In diesem Beispiel wurde ein Plagiat festgestellt, nachdem einer der „abstract“-Werte aus unserem Datensatz als Textabfrage „model_text“ verwendet wurde. Der Ähnlichkeitswert beträgt 1,0, was auf eine hohe Ähnlichkeit hinweist – <strong>direktes Plagiat</strong>. Die vektorisierte Anfrage und das Dokument wurden erwartungsgemäß nicht als KI-generierter Inhalt erkannt.</p><p>Abfrage:</p>#similar text - paraphrase plagiarism test 

model_text = 'Comprehending and deducing information from culinary instructions represents a promising avenue for research aimed at empowering artificial intelligence to decipher step-by-step text. In this study, we present CuisineInquiry, a database for the multifaceted understanding of cooking guidelines. It encompasses a substantial number of informative recipes featuring various elements such as headings, explanations, and a matched assortment of visuals. Utilizing an extensive set of automatically crafted question-answer pairings, we formulate a series of tasks focusing on understanding and logic that necessitate a combined interpretation of visuals and written content. This involves capturing the sequential progression of events and extracting meaning from procedural expertise. Our initial findings suggest that CuisineInquiry is poised to function as a demanding experimental platform.'
<p>Ausgabe:</p>High similarity detected! This might be plagiarism.

Most similar document: 'RecipeQA: A Challenge Dataset for Multimodal Comprehension of Cooking Recipes'

Abstract: Understanding and reasoning about cooking recipes is a fruitful research direction towards enabling machines to interpret procedural text. In this work, we introduce RecipeQA, a dataset for multimodal comprehension of cooking recipes. It comprises of approximately 20K instructional recipes with multiple modalities such as titles, descriptions and aligned set of images. With over 36K automatically generated question-answer pairs, we design a set of comprehension and reasoning tasks that require joint understanding of images and text, capturing the temporal flow of events and making sense of procedural knowledge. Our preliminary results indicate that RecipeQA will serve as a challenging test bed and an ideal benchmark for evaluating machine comprehension systems. The data and leaderboard are available at[ http://hucvl.github.io/recipeqa](http://hucvl.github.io/recipeqa).

url:[http://aclweb.org/anthology/D18-1166](http://aclweb.org/anthology/D18-1166)

Score:0.9302529

Note: The text query you entered may have been generated by AI.
<p>Durch die Aktualisierung der Textabfrage 'model_text' mit einem KI-generierten Text, der die gleiche Botschaft vermittelt und gleichzeitig die Wiederholung ähnlicher Wörter minimiert, war die festgestellte Ähnlichkeit immer noch hoch, aber der Wert betrug 0,9302529 statt 1,0 — <strong>Paraphrasierungsplagiat</strong>. Es wurde auch erwartet, dass diese von einer KI generierte Anfrage erkannt werden würde.</p><p>Schließlich ergab die Betrachtung der Textanfrage 'model_text' als Text über Elasticsearch, der kein Abstract eines dieser Dokumente ist, eine festgestellte Ähnlichkeit von 0,68991005, was gemäß den betrachteten Schwellenwerten auf eine geringe Ähnlichkeit hinweist.</p><p>Abfrage:</p>#different text - not a plagiarism

model_text = 'Elasticsearch provides near real-time search and analytics for all types of data.'
<p>Ausgabe:</p>Low similarity detected. This might not be plagiarism.
<p>Obwohl Plagiate in der von der KI generierten Textanfrage sowie in Fällen von Paraphrasierung und direkt kopierten Inhalten korrekt identifiziert wurden, erfordert die Navigation durch das Feld der Plagiatserkennung die Berücksichtigung verschiedener Aspekte.</p><p>Im Kontext der Erkennung von KI-generierten Inhalten haben wir ein Modell untersucht, das einen wertvollen Beitrag leistet. Es ist jedoch entscheidend, die systembedingten Einschränkungen der eigenständigen Erkennung zu erkennen, weshalb andere Methoden zur Steigerung der Genauigkeit einbezogen werden müssen.</p><p>Die durch die Wahl der Text-Embedding-Modelle bedingte Variabilität ist ein weiterer zu berücksichtigender Aspekt. Unterschiedliche Modelle, die mit verschiedenen Datensätzen trainiert wurden, führen zu unterschiedlichen Ähnlichkeitsgraden, was die Bedeutung der generierten Text-Embeddings unterstreicht.</p><p>Schließlich haben wir in diesen Beispielen die Zusammenfassung des Dokuments verwendet. Die Plagiatserkennung betrifft jedoch häufig große Dokumente, weshalb es unerlässlich ist, die Herausforderung der Textlänge anzugehen. Häufig überschreitet der Text das Token-Limit eines Modells, sodass er vor dem Erstellen der Einbettungen in Abschnitte unterteilt werden muss. Ein <a href="https://www.elastic.co/guide/en/elasticsearch/reference/8.11/knn-search.html#nested-knn-search">praktischer Ansatz</a> zur Bewältigung dieses Problems besteht in der Verwendung verschachtelter Strukturen mit dense_vector.</p><h2>Fazit</h2><p>In diesem Blog haben wir die Herausforderungen bei der Erkennung von Plagiaten, insbesondere bei paraphrasierten und KI-generierten Inhalten, erörtert und gezeigt, wie semantische Textähnlichkeit und Textklassifizierung zu diesem Zweck eingesetzt werden können.</p><p>Durch die Kombination dieser Methoden haben wir ein Beispiel für die Plagiatserkennung geliefert, bei dem wir erfolgreich KI-generierte Inhalte, direkte und paraphrasierte Plagiate identifiziert haben.</p><p>Das Hauptziel war die Einrichtung eines Filtersystems, das die Erkennung vereinfacht, die menschliche Beurteilung bleibt jedoch für die Validierung unerlässlich.</p><p>Wenn Sie mehr über semantische Textähnlichkeit und NLP erfahren möchten, empfehlen wir Ihnen, auch diese Links zu besuchen:</p><ul><li><p><a href="https://www.elastic.co/what-is/semantic-search">Was ist die semantische Suche?</a></p></li><li><p><a href="https://www.elastic.co/what-is/natural-language-processing">Was ist natürliche Sprachverarbeitung (NLP)?</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/lexical-and-semantic-search-with-elasticsearch">Lexikalische und semantische Suche mit Elasticsearch</a></p></li><li><p><a href="https://www.elastic.co/search-labs/blog/chunking-via-ingest-pipelines">Die Aufteilung großer Dokumente über Ingest-Pipelines und verschachtelte Vektoren ermöglicht eine einfache Passagensuche.</a></p></li></ul>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/ai-plagiarism-checker-with-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/ai-plagiarism-checker-with-elasticsearch</guid>
    <category><![CDATA[Vektordatenbank]]></category>
    <category><![CDATA[Python]]></category>
    <dc:creator><![CDATA[Priscilla Parodi]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt68a5bc2434a9b03b/6a1711510e2e49a09641a22a/83e05cd4f81799fbb7b7950ed87600e825ec81e9-1024x1024.png" length="0" type="image/png"/>
    <pubDate>Tue, 19 Dec 2023 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Lexikalische und semantische Suche mit Elasticsearch]]></title>
    <description><![CDATA[In diesem Blogbeitrag werden wir verschiedene Ansätze zur Informationsbeschaffung mit Elasticsearch untersuchen, wobei wir uns auf die lexikalische und semantische Suche konzentrieren.]]></description>
    <content:encoded><![CDATA[<p>Die Suche ist der Prozess, bei dem die relevantesten Informationen auf der Grundlage Ihrer Suchanfrage oder kombinierter Suchanfragen gefunden werden; relevante Suchergebnisse sind Dokumente, die am besten zu diesen Suchanfragen passen. Obwohl die Suche mit verschiedenen Herausforderungen und Methoden verbunden ist, bleibt das letztendliche Ziel dasselbe: <strong>die bestmögliche Antwort auf Ihre Frage zu finden</strong>.</p><p>Mit Blick auf dieses Ziel werden wir in diesem Blogbeitrag verschiedene Ansätze zur Informationsbeschaffung mit Elasticsearch untersuchen, wobei der Schwerpunkt auf der Textsuche liegt: <strong>lexikalische und semantische Suche.</strong></p><h2>Voraussetzungen</h2><p>Um dies zu erreichen, werden wir Python-Beispiele bereitstellen, die verschiedene Suchszenarien auf einem <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/lexical-and-semantic-search-with-elasticsearch/products-ecommerce.json">Datensatz</a> demonstrieren, der zur Simulation von E-Commerce-Produktinformationen generiert wurde.</p><p>Dieser Datensatz enthält über 2.500 Produkte, jedes mit einer Beschreibung. Diese Produkte sind in 76 verschiedene Produktkategorien unterteilt, wobei jede Kategorie eine unterschiedliche Anzahl von Produkten enthält, wie unten dargestellt:</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt34415151c00ced2b/6a17d8710b0bed6c9bdd342c/4104466050f3024b6bcaf382da2a702650f62227-1440x708.png" alt="" /><p><em>Treemap-Visualisierung – die 22 wichtigsten Werte von category.keyword (Produktkategorien)</em></p><p>Für die Einrichtung benötigen Sie:</p><ul><li><p>Python 3.6 oder höher</p></li><li><p>Der <a href="https://www.elastic.co/guide/en/elasticsearch/client/python-api/current/index.html">Elastic Python-Client</a></p></li><li><p>Elastic 8.8-Bereitstellung oder höher, mit 8 GB Arbeitsspeicher-Knoten für maschinelles Lernen</p></li><li><p>Das <a href="https://www.elastic.co/guide/en/machine-learning/8.9/ml-nlp-elser.html">Elastic Learned Sparse EncodeR-</a> Modell, das in Elastic vorinstalliert und auf Ihrem Bereitstellungsserver gestartet ist, ist bereits vorhanden.</p></li></ul><p>Wir werden Elastic Cloud verwenden, eine <a href="https://cloud.elastic.co/registration?onboarding_token=vectorsearch&amp;cta=cloud-registration&amp;tech=trial&amp;plcmt=article%20content&amp;pg=search-labs">kostenlose Testversion ist verfügbar</a>.</p><p>Neben den in diesem Blogbeitrag bereitgestellten Suchanfragen führt Sie ein <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/lexical-and-semantic-search-with-elasticsearch/ecommerce_dense_sparse_project.ipynb">Python-Notebook</a> durch die folgenden Prozesse:</p><ul><li><p>Stellen Sie mithilfe des Python-Clients eine Verbindung zu unserer Elastic-Bereitstellung her.</p></li><li><p>Laden Sie ein Text-Embedding-Modell in den Elasticsearch-Cluster.</p></li><li><p>Erstellen Sie einen Index mit Zuordnungen zum Indizieren von Merkmalsvektoren und dichten Vektoren.</p></li><li><p>Erstellen Sie eine Ingest-Pipeline mit Inferenzprozessoren für Text-Embedding und Text-Expansion.</p></li></ul><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt0e95406ece8f08d9/6a17d8731d1b83d32e93e2f4/54a9a490a3b0cf1b9c2228bee8eddd3f566bd435-1418x1102.png" alt="" /><h2>Lexikalische Suche – spärliche Suche</h2><p>Die klassische Methode, mit der Elasticsearch Dokumente anhand einer Textabfrage nach Relevanz ordnet, verwendet die Lucene-Implementierung des <a href="https://en.wikipedia.org/wiki/Okapi_BM25">BM25-</a> Modells, eines <strong>Sparse-Modells für die lexikalische Suche</strong>. Diese Methode folgt dem traditionellen Ansatz der Textsuche und sucht nach exakten Übereinstimmungen der Begriffe.</p><p>Um diese Suche zu ermöglichen, wandelt Elasticsearch die Daten <strong>der Textfelder</strong> durch eine Textanalyse in ein durchsuchbares Format um.</p><p><strong>Die Textanalyse</strong> wird von einem<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analyzer-anatomy.html"> Analysator</a> durchgeführt, einem Regelsatz, der den Prozess der Extraktion relevanter Token für die Suche steuert. Ein Analysator muss genau einen<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html"> Tokenizer</a> haben. Der Tokenizer empfängt einen Zeichenstrom und zerlegt ihn in einzelne Tokens (in der Regel einzelne Wörter), wie im folgenden Beispiel:</p><h3>String-Tokenisierung für die lexikalische Suche</h3>#Performs text analysis on a string and returns the resulting tokens.

# Define the text to be analyzed
text = "Comfortable furniture for a large balcony"

# Define the analyze request
request_body = {
  "analyzer": "standard",
  "text": text
}

# Perform the analyze request
response = client.indices.analyze(analyzer=request_body["analyzer"], text=request_body["text"])

# Extract and display the analyzed tokens
tokens = [token["token"] for token in response["tokens"]]
print("Analyzed Tokens:", tokens)
<p>Ausgabe</p>Analyzed Tokens: ['comfortable', 'furniture', 'for', 'a', 'large', 'balcony']
<p>In diesem Beispiel verwenden wir den <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-standard-analyzer.html">Standardanalysator</a> , der für die meisten Anwendungsfälle gut geeignet ist, da er eine auf englischer Grammatik basierende Tokenisierung bietet. Die Tokenisierung ermöglicht den Abgleich einzelner Begriffe, wobei jedes Token weiterhin wörtlich abgeglichen wird.</p><p>Wenn Sie Ihr Sucherlebnis personalisieren möchten, können Sie einen anderen<a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html"> integrierten Analysator</a> auswählen. Beispielsweise wird durch die Aktualisierung des Codes zur Verwendung des <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-stop-analyzer.html">Stoppwortanalysators</a> der Text an jedem Nicht-Buchstaben-Zeichen in Tokens zerlegt, wobei die Entfernung von Stoppwörtern unterstützt wird.</p>...
# Define the analyze request
request_body = {
  "analyzer": "stop",
  "text": text
}
...
<p>Ausgabe</p>Analyzed Tokens: ['comfortable', 'furniture', 'large', 'balcony']
<p>Wenn die integrierten Analysatoren Ihre Anforderungen nicht erfüllen, können Sie einen <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-custom-analyzer.html">benutzerdefinierten Analysator</a> erstellen, der die entsprechende Kombination aus null oder mehr <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-charfilters.html">Zeichenfiltern</a>, einem <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html">Tokenizer</a> und null oder mehr <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html">Tokenfiltern</a> verwendet.</p>"analyzer":  {

  "my_analyzer": {

    "type": "custom", #For custom analyzers, use a type of custom or omit the type parameter.

    "tokenizer": "standard", #Built-in or customized tokenizer

    "filter": ["lowercase", "synonym"] #Built-in or customized token filters
  }
}
<p>Im obigen Beispiel, das einen Tokenizer und Tokenfilter kombiniert, wird der Text vom <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html">Kleinbuchstabenfilter</a> in Kleinbuchstaben umgewandelt, bevor er vom <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-synonym-tokenfilter.html#:~:text=Elasticsearch%20will%20use%20the%20token,applied%20to%20the%20synonym%20entries.">Synonym-Tokenfilter</a> verarbeitet wird.</p><h2>Lexikalische Übereinstimmung</h2><p><a href="https://www.elastic.co/blog/practical-bm25-part-2-the-bm25-algorithm-and-its-variables">BM25</a> wird die Relevanz von Dokumenten für eine bestimmte Suchanfrage anhand der Häufigkeit der Begriffe und ihrer Wichtigkeit messen.</p><p>Der unten stehende Code führt eine <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html">Match</a> -Abfrage durch, bei der bis zu zwei Dokumente unter Berücksichtigung der Werte des Feldes <em>"description"</em> aus dem Index <em>"ecommerce-search"</em> und der Suchanfrage <strong>"</strong><em><strong>Comfortable furniture for a large Balcony</strong></em><strong>"</strong> gesucht werden.</p><p>Durch eine Verfeinerung der Kriterien, nach denen ein Dokument als Treffer für diese Abfrage in Betracht gezogen werden soll, kann die Genauigkeit verbessert werden. Genauere Ergebnisse gehen jedoch mit einer geringeren Toleranz gegenüber Abweichungen einher.</p># BM25

response = client.search(size=2,
index="ecommerce-search",
query= {
  "match": {
    "description" : {  
      "query": "Comfortable furniture for a large balcony",
      "analyzer": "stop"
    }
  }
}
)

hits = response['hits']['hits']

if not hits:
  print("No matches found")

else:
  for hit in hits:
    score = hit['_score']
    product = hit['_source']['product']
    category = hit['_source']['category']
    description = hit['_source']['description']
    print(f"\nScore: {score}\nProduct: {product}\nCategory: {category}\nDescription: {description}\n")
<p>Ausgabe</p>Score: 15.607948
Product: Barbie Dreamhouse
Category: Toys
Description: is a classic Barbie playset with multiple rooms, furniture, a large balcony, a pool, and accessories. It allows kids to create their dream Barbie world.

Score: 9.137739
Product: Comfortable Rocking Chair
Category: Indoor Furniture
Description: enjoy relaxing moments with this comfortable rocking chair. Its smooth motion and cushioned seat make it an ideal piece of furniture for unwinding.
<p>Die Analyse der Ergebnisse zeigt, dass das relevanteste Produkt das „ <em>Barbie Dreamhouse</em> “ in der Kategorie „ <em>Spielzeug</em> “ ist. Dessen Beschreibung ist besonders relevant, da sie die Begriffe „ <em>Möbel</em> “, „ <em>groß“</em> und <em>„Balkon</em> “ enthält. Es ist das einzige Produkt, dessen Beschreibung drei Begriffe enthält, die mit der Suchanfrage übereinstimmen, und es ist außerdem das einzige, dessen Beschreibung den Begriff <em>„Balkon“</em> enthält.</p><p>Das zweitwichtigste Produkt ist ein „ <em>Komfortabler Schaukelstuhl</em> “, der unter „ <em>Innenmöbel</em> “ kategorisiert ist und dessen Beschreibung die Begriffe „ <em>bequem</em> “ und „ <em>Möbel</em> “ enthält. Nur 3 Produkte im Datensatz entsprechen mindestens 2 Begriffen dieser Suchanfrage, dieses Produkt ist eines davon.</p><p><em>Der Begriff „Komfortabel“</em> taucht in der Beschreibung von 105 Produkten auf, der <em>Begriff „Möbel“</em> in der Beschreibung von 4 Produkten aus 4 verschiedenen Kategorien: <em>Spielzeug</em>, <em>Möbel für den Innenbereich, Möbel für den Außenbereich und „Zubehör und Spielzeug für Hunde und Katzen“.</em></p><p>Wie Sie sehen konnten, ist das relevanteste Produkt im Hinblick auf die Suchanfrage ein Spielzeug und das zweitrelevanteste Produkt sind Möbel für den Innenbereich. Wenn Sie detaillierte Informationen über die Berechnung der Punktzahl wünschen, um zu verstehen, warum diese Dokumente übereinstimmen, können Sie den Parameter <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-explain.html"><em>explain</em></a> __query auf true setzen.</p><p>Obwohl beide Ergebnisse die relevantesten sind, sowohl hinsichtlich der Anzahl der Dokumente als auch des Vorkommens der Begriffe in diesem Datensatz, besteht die Absicht hinter der Anfrage "<em>Bequeme Möbel für einen großen Balkon</em>" darin, Möbel für einen tatsächlich großen Balkon zu finden, wobei unter anderem Spielzeug und Möbel für den Innenbereich ausgeschlossen werden.</p><p>Die lexikalische Suche ist relativ <strong>einfach und schnell</strong>, hat aber ihre Grenzen, da es nicht immer möglich ist, alle möglichen Begriffe und Synonyme zu kennen, ohne unbedingt die Absicht und die Suchanfragen des Benutzers zu kennen. Ein häufiges Phänomen beim Gebrauch natürlicher Sprache ist <strong>die Diskrepanz im Wortschatz</strong>. <a href="https://dl.acm.org/doi/abs/10.1145/32206.32212">Untersuchungen</a> zeigen, dass verschiedene Personen (Experten auf demselben Gebiet) im Durchschnitt in <strong>80 % der Fälle</strong> ein und dasselbe Objekt unterschiedlich benennen.</p><p>Diese Einschränkungen veranlassen uns, nach anderen Bewertungsmodellen zu suchen, die semantisches Wissen einbeziehen. Transformerbasierte Modelle, die sich durch ihre Fähigkeit auszeichnen, sequentielle Eingabe-Tokens wie natürliche Sprache zu verarbeiten, erfassen die zugrundeliegende Bedeutung Ihrer Suche, indem sie mathematische Darstellungen sowohl von Dokumenten als auch von Suchanfragen berücksichtigen. Dies ermöglicht eine dichte, kontextsensitive Vektordarstellung von Texten und ist somit die Grundlage für <strong>die semantische Suche</strong>, eine verfeinerte Methode zum Auffinden relevanter Inhalte.</p><h2>Semantische Suche – dichte Suche</h2><p>In diesem Zusammenhang wird nach der Umwandlung Ihrer Daten in aussagekräftige Vektorwerte <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html">der k-nächste-Nachbarn-Suchalgorithmus (kNN)</a> verwendet, um Vektordarstellungen in einem Datensatz zu finden, die einem Anfragevektor am ähnlichsten sind. Elasticsearch unterstützt zwei Methoden für die kNN-Suche: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#exact-knn">die exakte Brute-Force-kNN-Suche</a> und <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#approximate-knn">die approximative kNN-Suche</a>, auch bekannt als ANN.</p><p>Brute-Force-kNN garantiert zwar genaue Ergebnisse, skaliert aber nicht gut mit großen Datensätzen. Approximatives kNN findet effizient annähernd nächste Nachbarn, indem es etwas Genauigkeit für eine verbesserte Leistung opfert.</p><p>Durch die Unterstützung von kNN-Suche und dichten Vektorindizes durch Lucene nutzt Elasticsearch den Hierarchical Navigable Small World (HNSW)-Algorithmus, der eine starke Suchleistung über eine Vielzahl von <a href="http://ann-benchmarks.com/">ann-Benchmark-Datensätzen</a> hinweg demonstriert. Eine approximative kNN-Suche kann in Python mithilfe des unten stehenden Beispielcodes durchgeführt werden.</p><h3>Semantische Suche mit approximativem kNN</h3># KNN - approximate kNN

response = client.search(index='ecommerce-search', size=2,
knn={
  "field": "description_vector.predicted_value",
  "k": 50, # Number of nearest neighbors to return as top hits.
#The optimal value of k is dependent on the data. It can vary in different scenarios.

  "num_candidates": 500, # Number of nearest neighbor candidates to consider per shard.

#Increasing num_candidates tends to improve the accuracy of the final k results.

  "query_vector_builder": { # Object indicating how to build a query_vector. kNN search enables you to perform semantic search by using a previously deployed text embedding model, the steps for this process are demonstrated in the Python notebook.
    "text_embedding": { 
      "model_id": "sentence-transformers__all-mpnet-base-v2", # Text embedding model id
      "model_text": "Comfortable furniture for a large balcony" # Query
    }
  }
}
)

for hit in response['hits']['hits']:
        
  score = hit['_score']
  product = hit['_source']['product']
  category = hit['_source']['category']
  description = hit['_source']['description']
  print(f"\nScore: {score}\nProduct: {product}\nCategory: {category}\nDescription: {description}\n")
<p>Dieser Codeblock verwendet Elasticsearchs kNN, um bis zu zwei Produkte mit einer Beschreibung zurückzugeben, die der vektorisierten Anfrage (query_vector_build) von "<em>Komfortable Möbel für einen großen Balkon</em>" ähnlich ist, wobei die Einbettungen des Feldes "<em>description</em> " im Produktdatensatz berücksichtigt werden.</p><p>Die Produkt-Embeddings wurden zuvor in einer Ingest-Pipeline mit einem Inferenzprozessor generiert, der das Text-Embedding-Modell <em>"</em><a href="https://huggingface.co/sentence-transformers/all-mpnet-base-v2"><em>all-mpnet-base-v2</em></a><em>"</em> enthielt, um aus den in die Pipeline aufgenommenen Daten Inferenz zu ziehen.</p><p>Dieses Modell wurde auf Grundlage der Auswertung vortrainierter Modelle mithilfe von <em>"</em><a href="https://github.com/UKPLab/sentence-transformers/blob/master/docs/package_reference/sentence_transformer/evaluation.md"><em>sentence_transformers.evaluation</em></a><em>"</em> ausgewählt. wobei verschiedene Klassen verwendet werden, um ein Modell während des Trainings zu beurteilen. Das Modell „all-mpnet-base-v2“ erzielte die beste durchschnittliche Leistung gemäß dem <a href="https://www.sbert.net/docs/pretrained_models.html">Sentence-Transformers-Ranking</a> und sicherte sich auch eine günstige Position im <a href="https://huggingface.co/spaces/mteb/leaderboard">Massive Text Embedding Benchmark (MTEB)</a> Leaderboard. Das Modell basiert auf dem vortrainierten<a href="https://huggingface.co/microsoft/mpnet-base"> microsoft/mpnet-base-</a> Modell und wurde anhand eines Datensatzes mit 1 Milliarde Satzpaaren feinabgestimmt. Es bildet Sätze auf einen 768-dimensionalen dichten Vektorraum ab.</p><p>Alternativ stehen viele andere Modelle zur Verfügung, die verwendet werden können, insbesondere solche, die speziell auf Ihre domänenspezifischen Daten abgestimmt sind.</p><p>Ausgabe</p>Score: 0.79207325
Product: Patio Sofa Set with Ottoman
Category: Outdoor Furniture
Description: is a versatile and comfortable patio sofa set, including a sofa, ottoman, and coffee table, great for outdoor lounging.

Score: 0.7836937
Product: Patio Sofa Set with Canopy
Category: Outdoor Furniture
Description: is a luxurious and comfortable patio sofa set with a canopy, providing shade and style for outdoor lounging.
<p><em>Das Ergebnis kann je nach gewähltem Modell,</em> <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#knn-search-filter-example"><em>Filtern</em></a> <em>und</em> <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#tune-approximate-knn-for-speed-accuracy"><em>ungefährem kNN-Tuning</em></a>variieren<em>.</em></p><p>Die kNN-Suchergebnisse befinden sich beide in der Kategorie „ <em>Gartenmöbel</em> “, obwohl das Wort „ <em>Garten</em> “ nicht explizit in der Suchanfrage erwähnt wurde. Dies unterstreicht die Bedeutung des semantischen Verständnisses im Kontext.</p><p>Die dichte Vektorsuche bietet mehrere Vorteile:</p><ul><li><p>Aktivierung der semantischen Suche</p></li><li><p>Skalierbarkeit zur Verarbeitung sehr großer Datensätze</p></li><li><p>Flexibilität im Umgang mit einer breiten Palette von Datentypen</p></li></ul><p><strong>Die Suche in dichten Vektoren birgt jedoch auch ihre eigenen Herausforderungen</strong>:</p><ul><li><p>Auswahl des richtigen Einbettungsmodells für Ihren Anwendungsfall</p></li><li><p>Sobald ein Modell ausgewählt ist, kann es notwendig sein, das Modell feinabzustimmen, um die Leistung auf einem domänenspezifischen Datensatz zu optimieren. Dieser Prozess erfordert die Einbeziehung von Domänenexperten.</p></li><li><p>Darüber hinaus kann die Indizierung hochdimensionaler Vektoren rechenaufwändig sein.</p></li></ul><h2>Semantische Suche – gelernter spärlicher Abruf</h2><p>Lassen Sie uns einen alternativen Ansatz erkunden: das gelernte spärliche Retrieval, eine andere Möglichkeit, semantische Suchen durchzuführen.</p><p>Als Sparse-Modell nutzt es den Lucene-basierten invertierten Index von Elasticsearch, der von jahrzehntelangen Optimierungen profitiert. Dieser Ansatz geht jedoch über das einfache Hinzufügen von Synonymen mit lexikalischen Bewertungsfunktionen wie BM25 hinaus. Stattdessen werden gelernte Assoziationen mithilfe eines tiefergehenden sprachlichen Wissens einbezogen, um die Relevanz zu optimieren.</p><p>Durch die Erweiterung der Suchanfragen um relevante Begriffe, die in der ursprünglichen Anfrage nicht enthalten sind,<strong>verbessert der Elastic Learned</strong> <a href="https://www.elastic.co/guide/en/machine-learning/current/ml-nlp-elser.html">Sparse Encoder die Sparse Vector</a> Embeddings, wie Sie im folgenden Beispiel sehen können.</p><h3>Suche nach dünnbesetzten Vektoren mit elastischem, gelerntem, dünnbesetztem Encoder</h3># Elastic Learned Sparse Encoder

response = client.search(index='ecommerce-search', size=2,
query={
  "text_expansion": {
    "ml.tokens": {
      "model_id":"elser_model",
      "model_text":"Comfortable furniture for a large balcony"                
    }
  }
}
)

for hit in response['hits']['hits']:

  score = hit['_score']
  product = hit['_source']['product']
  category = hit['_source']['category']
  description = hit['_source']['description']
  print(f"\nScore: {score}\nProduct: {product}\nCategory: {category}\nDescription: {description}\n")
<p>Ausgabe</p>Score: 14.405318
Product: Garden Lounge Set with Side Table
Category: Garden Furniture
Description: is a comfortable and stylish garden lounge set, including a sofa, chairs, and a side table for outdoor relaxation.

Score: 14.281318
Product: Rattan Patio Conversation Set
Category: Outdoor Furniture
Description: is a stylish and comfortable outdoor furniture set, including a sofa, two chairs, and a coffee table, all made of durable rattan material.
<p>Zu den Ergebnissen gehört in diesem Fall die Kategorie „ <em>Gartenmöbel</em> “, die Produkte anbietet, die den „ <em>Outdoor-Möbeln</em> “ sehr ähnlich sind.</p><p>Durch die Analyse von "ml.tokens", Aus dem Feld "rank_features", das die von Learned Sparse Retrieval generierten Token enthält, wird deutlich, dass sich unter den verschiedenen generierten Token Begriffe befinden, die zwar nicht Teil der Suchanfrage sind, aber dennoch eine relevante Bedeutung haben, wie zum Beispiel "<em>relax</em>" (bequem), "<em>sofa</em>" (Möbel) und "<em>outdoor</em>" (Balkon).</p><p>Das Bild unten hebt einige dieser Begriffe zusammen mit der Suchanfrage hervor, sowohl mit als auch ohne Begriffserweiterung.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt7e869985347b19a7/6a17d875e31791dc2c2d56a1/dd86607fce6137d843a3ec002390eaa988b432f9-1440x502.png" alt="" /><p>Wie bereits erwähnt, ermöglicht dieses Modell eine kontextsensitive Suche und trägt dazu bei, das Problem der Diskrepanz zwischen Vokabular und Definition zu mindern, während es gleichzeitig besser interpretierbare Ergebnisse liefert. Es kann sogar dichte Vektormodelle übertreffen, wenn kein domänenspezifisches Nachtraining angewendet wird.</p><h2>Hybridsuche: Relevante Ergebnisse durch die Kombination von lexikalischer und semantischer Suche</h2><p>Wenn es um die Suche geht, gibt es keine Universallösung. Jede dieser Abrufmethoden hat ihre Stärken, aber auch ihre Herausforderungen. Je nach Anwendungsfall kann sich die beste Option ändern. Oftmals ergänzen sich die besten Ergebnisse verschiedener Abrufmethoden. Um die Relevanz zu erhöhen, werden wir daher versuchen, die Stärken der einzelnen Methoden zu kombinieren.</p><p>Es gibt verschiedene Möglichkeiten, eine <strong>hybride Suche</strong> zu implementieren, darunter die lineare Kombination, die Gewichtung jedes Ergebnisses und die reziproke Rangfusion (RRF), bei der die Angabe eines Gewichts nicht erforderlich ist.</p><h3>Elasticsearch: Das Beste aus beiden Welten mit lexikalischer und semantischer Suche</h3># BM25 + Elastic Learned Sparse Encoder (Linear Combination)

response = client.search(index='ecommerce-search', size=2,

query= {
  "bool": {
    "should": [
    {
      "match": {
        "description" : {  
          "query": "A dining table and comfortable chairs for a large balcony",
          "boost": 1
        }
      }
    },                   
    {
      "text_expansion": {
        "ml.tokens": {
          "model_id": "elser_model",
          "model_text": "A dining table and comfortable chairs for a large balcony",
          "boost": 1
        }
      }
     }
    ]
  }
}
)

# The boost value is 1 for the text expansion and match query. This means that the relevance score of the results of these queries are not boosted. You can specify a boost value to give a weight to each score in the sum. The scores will be calculated as: score = boost value * match_score + boost value * text_expansion_score

for hit in response['hits']['hits']:

  score = hit['_score']
  product = hit['_source']['product']
  category = hit['_source']['category']
  description = hit['_source']['description']
  print(f"\nScore: {score}\nProduct: {product}\nCategory: {category}\nDescription: {description}\n")
<p>In diesem Code haben wir eine hybride Suche mit zwei Abfragen durchgeführt, die den Wert "<em>Ein Esstisch und bequeme Stühle für einen großen Balkon</em>" hatten. Anstatt "<em>Möbel</em>" als Suchbegriff zu verwenden, geben wir an, wonach wir suchen, und beide Suchanfragen berücksichtigen die gleichen Feldwerte, "Beschreibung". Die Rangfolge wird durch eine lineare Kombination der BM25- und ELSER-Werte bei gleicher Gewichtung ermittelt.</p><p>Ausgabe</p>Score: 31.628141
Product: Garden Dining Set with Swivel Rockers
Category: Garden Furniture
Description: is a functional and comfortable garden dining set, including a table and chairs with swivel rockers for easy movement.

Score: 31.334227
Product: Garden Dining Set with Swivel Chairs
Category: Garden Furniture
Description: is a functional and comfortable garden dining set, including a table and chairs with swivel seats for convenience.
<p>Im folgenden Code verwenden wir denselben Wert für die Abfrage, kombinieren aber die Ergebnisse von BM25 (Abfrageparameter) und kNN (KNN-Parameter) mithilfe der Methode der reziproken Rangfusion, um die Dokumente zu kombinieren und zu ordnen.</p># BM25 + KNN (RRF)

response = client.search(index='ecommerce-search', size=2,
query={
  "bool": {
    "should": [
    {
      "match": {
        "description": {
        "query": "A dining table and comfortable chairs for a large balcony"
        }
      }
    }
    ]
  }
},
knn={
  "field": "description_vector.predicted_value",
  "k": 50,
  "num_candidates": 500,
  "query_vector_builder": {
    "text_embedding": {
      "model_id": "sentence-transformers__all-mpnet-base-v2",
      "model_text": "A dining table and comfortable chairs for a large balcony"
    }
  }
},
rank={
  "rrf": { # Reciprocal rank fusion
    "window_size": 50, # This value determines the size of the individual result sets per query.
    "rank_constant": 20 # This value determines how much influence documents in individual result sets per query have over the final ranked result set.
  }
}
)

for hit in response['hits']['hits']:
        
  rank = hit['_rank']
  category = hit['_source']['category']
  product = hit['_source']['product']
  description = hit['_source']['description']
  print(f"\nRank: {rank}\nProduct: {product}\nCategory: {category}\nDescription: {description}\n")
<p><em>Die RRF-Funktionalität befindet sich in der technischen Vorschauphase. Die Syntax wird sich voraussichtlich vor der allgemeinen Verfügbarkeit ändern.</em></p><p>Ausgabe</p>Rank: 1
Product: Patio Dining Set with Bench
Category: Outdoor Furniture
Description: is a spacious and functional patio dining set, including a dining table, chairs, and a bench for additional seating.

Rank: 2
Product: Garden Dining Set with Swivel Chairs
Category: Garden Furniture
Description: is a functional and comfortable garden dining set, including a table and chairs with swivel seats for convenience.
<p>Hier könnten wir auch andere Felder und Werte verwenden; einige Beispiele hierfür finden Sie im <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/lexical-and-semantic-search-with-elasticsearch/ecommerce_dense_sparse_project.ipynb">Python-Notebook</a>.</p><p>Wie Sie sehen, bietet Elasticsearch das Beste aus beiden Welten: die traditionelle lexikalische Suche und die Vektorsuche, egal ob spärlich oder dicht, um Ihr Ziel zu erreichen <strong>und die bestmögliche Antwort auf Ihre Frage zu finden.</strong></p><p>Wenn Sie mehr über die hier erwähnten Ansätze erfahren möchten, können Ihnen diese Blogs hilfreich sein:</p><ul><li><p><a href="https://www.elastic.co/blog/improving-information-retrieval-elastic-stack-hybrid">Verbesserung der Informationssuche im Elastic Stack: Hybride Suche</a></p></li><li><p><a href="https://www.elastic.co/blog/vector-search-elasticsearch-rationale">Vektorsuche in Elasticsearch: Die Gründe für das Design</a></p></li><li><p><a href="https://www.elastic.co/blog/lexical-ai-powered-search-elastic-vector-database">Wie Sie die Vorteile der lexikalischen und KI-gestützten Suche mit der Vektordatenbank von Elastic optimal nutzen können</a></p></li><li><p><a href="https://www.elastic.co/blog/may-2023-launch-sparse-encoder-ai-model">Wir stellen den Elastic Learned Sparse Encoder vor: Elastics KI-Modell für die semantische Suche</a></p></li><li><p><a href="https://www.elastic.co/blog/may-2023-launch-information-retrieval-elasticsearch-ai-model">Verbesserung der Informationswiedergewinnung im Elastic Stack: Vorstellung des Elastic Learned Sparse Encoder, unseres neuen Retrieval-Modells</a></p></li></ul><p>Elasticsearch bietet eine Vektordatenbank sowie alle Werkzeuge, die Sie zum Erstellen von Vektorsuchen benötigen:</p><ul><li><p>Elasticsearch <a href="https://www.elastic.co/elasticsearch/vector-database">-Vektordatenbank</a></p></li><li><p>Anwendungsfälle <a href="https://www.elastic.co/enterprise-search/vector-search">für die Vektorsuche</a> mit Elastic</p></li></ul><h2>Fazit</h2><p>In diesem Blogbeitrag haben wir verschiedene Ansätze zur Informationsbeschaffung mit Elasticsearch untersucht, wobei wir uns insbesondere auf die Text-, lexikalische und semantische Suche konzentriert haben. Um dies zu veranschaulichen, haben wir Python-Beispiele bereitgestellt, die verschiedene Suchszenarien anhand eines Datensatzes mit E-Commerce-Produktinformationen aufzeigen.</p><p>Wir haben die klassische lexikalische Suche mit BM25 überprüft und ihre Vorteile und Herausforderungen, wie z. B. Vokabeldiskrepanz, diskutiert. Wir haben die Bedeutung der Einbeziehung semantischen Wissens zur Überwindung dieses Problems hervorgehoben. Darüber hinaus haben wir die dichte Vektorsuche erörtert, die eine semantische Suche ermöglicht, und die mit dieser Abrufmethode verbundenen Herausforderungen behandelt, einschließlich des Rechenaufwands bei der Indizierung hochdimensionaler Vektoren.</p><p>Andererseits haben wir erwähnt, dass sich dünnbesetzte Vektoren außergewöhnlich gut komprimieren lassen. Daher haben wir den Learned Sparse Encoder von Elastic besprochen, der Suchanfragen erweitert, um relevante Begriffe einzubeziehen, die in der ursprünglichen Anfrage nicht enthalten sind.</p><p>Bei der Suche gibt es keine Universallösung. Jede Abrufmethode hat ihre Stärken und Schwächen. Deshalb haben wir auch das Konzept der hybriden Suche erörtert.</p><p>Wie Sie sehen konnten, bietet Elasticsearch die Vorteile beider Welten: die traditionelle lexikalische Suche und die Vektorsuche!</p><p>Bereit loszulegen? Sehen Sie sich das verfügbare <a href="https://github.com/elastic/elasticsearch-labs/blob/main/supporting-blog-content/lexical-and-semantic-search-with-elasticsearch/ecommerce_dense_sparse_project.ipynb">Python-Notebook</a> an und starten Sie eine <a href="https://cloud.elastic.co/registration?onboarding_token=vectorsearch&amp;cta=cloud-registration&amp;tech=trial&amp;plcmt=article%20content&amp;pg=search-labs">kostenlose Testphase von Elastic Cloud</a>.</p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/lexical-and-semantic-search-with-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/lexical-and-semantic-search-with-elasticsearch</guid>
    <category><![CDATA[Vektordatenbank]]></category>
    <category><![CDATA[Python]]></category>
    <category><![CDATA[Abfragesprachen]]></category>
    <dc:creator><![CDATA[Priscilla Parodi]]></dc:creator>
    <pubDate>Tue, 03 Oct 2023 00:00:00 GMT</pubDate>
  </item>
  <item>
    <title><![CDATA[Erweiterung der Chatbot-Funktionen mit NLP und Vektorsuche in Elasticsearch]]></title>
    <description><![CDATA[Erfahren Sie, wie Vektorsuche und NLP die Fähigkeiten von Chatbots verbessern und wie Elasticsearch diesen Prozess unterstützt.]]></description>
    <content:encoded><![CDATA[<p>Konversationelle Schnittstellen gibt es schon seit einiger Zeit und sie werden zunehmend beliebter als Mittel zur Unterstützung verschiedener Aufgaben, wie z. B. Kundenservice, Informationsbeschaffung und Aufgabenautomatisierung. Diese Schnittstellen, auf die typischerweise über Sprachassistenten oder Messaging-Apps zugegriffen wird, simulieren menschliche Konversation, um den Nutzern zu helfen, ihre Anfragen effizienter zu lösen.</p><p>Mit dem technologischen Fortschritt werden Chatbots eingesetzt, um komplexere Aufgaben schnell zu bewältigen und gleichzeitig den Nutzern ein personalisiertes Erlebnis zu bieten. Die Verarbeitung natürlicher Sprache (NLP) ermöglicht es Chatbots, die Sprache des Benutzers zu verarbeiten, die Absicht hinter seiner Nachricht zu erkennen und relevante Informationen daraus zu extrahieren. Die Named Entity Recognition extrahiert beispielsweise wichtige Informationen aus einem Text, indem sie diese in eine Reihe von Kategorien einordnet. Die Stimmungsanalyse ermittelt den emotionalen Tonfall, und die Fragebeantwortung liefert die „Antwort“ auf eine Anfrage. Ziel der NLP ist es, Algorithmen in die Lage zu versetzen, die menschliche Sprache zu verarbeiten und Aufgaben zu erfüllen, zu denen historisch gesehen nur Menschen fähig waren, wie etwa das Auffinden relevanter Passagen in großen Textmengen, das Zusammenfassen von Texten und das Generieren neuer, origineller Inhalte.</p><p>Diese hochentwickelten NLP-Funktionen basieren auf einer Technologie namens <a href="https://www.elastic.co/what-is/vector-search">Vektorsuche</a>. Elastic bietet native Unterstützung für die Vektorsuche, die Durchführung exakter und approximativer <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#knn-search">k-nächster Nachbarn (kNN)-Suchen</a> sowie für NLP, wodurch die Verwendung von benutzerdefinierten oder <a href="https://www.elastic.co/guide/en/machine-learning/current/ml-nlp-model-ref.html#ml-nlp-model-ref">Drittanbietermodellen</a> direkt in Elasticsearch ermöglicht wird.</p><p>In diesem Blogbeitrag werden wir untersuchen, wie Vektorsuche und NLP die Fähigkeiten von Chatbots verbessern und zeigen, wie Elasticsearch diesen Prozess erleichtert. Beginnen wir mit einem kurzen Überblick über die Vektorsuche.</p><h2>Vektorsuche</h2><p>Menschen können zwar die Bedeutung und den Kontext der geschriebenen Sprache erfassen, Maschinen hingegen nicht. Hier kommen Vektoren ins Spiel. Durch die Umwandlung von Text in Vektordarstellungen (numerische Darstellungen der Bedeutung des Textes) können Maschinen diese Einschränkung überwinden. Im Vergleich zur herkömmlichen Suche, bei der nicht auf Schlüsselwörtern und lexikalischer Suche basierend auf Häufigkeiten beruht, ermöglichen Vektoren die Verarbeitung von Textdaten mithilfe von Operationen, die für numerische Werte definiert sind.</p><p>Dies ermöglicht es der Vektorsuche, Daten zu finden, die ähnliche Konzepte oder Kontexte aufweisen, indem Distanzen im „Einbettungsraum“ verwendet werden, um die Ähnlichkeit zu einem gegebenen Abfragevektor darzustellen. Wenn die Daten ähnlich sind, sind auch die entsprechenden Vektoren ähnlich.</p><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt53a615a8ba0ac931/6a17d795fbc5f8b257491910/08542abf8108aace288745b1aca8579b476ddc1b-1440x618.png" alt="" /><p>Die Vektorsuche wird nicht nur in NLP-Anwendungen eingesetzt, sondern auch in verschiedenen anderen Bereichen, in denen unstrukturierte Daten verwendet werden, darunter Bild- und Videoverarbeitung.</p><p>Im Ablauf eines Chatbots gibt es verschiedene Herangehensweisen an die Anfragen der Nutzer, und folglich auch unterschiedliche Möglichkeiten, die Informationsbeschaffung zu verbessern und so ein besseres Nutzererlebnis zu schaffen. Da jede Alternative ihre eigenen Vor- und Nachteile hat, ist es unerlässlich, die verfügbaren Daten und Ressourcen sowie die Trainingszeit (falls zutreffend) und die zu erwartende Genauigkeit zu berücksichtigen. Im folgenden Abschnitt werden wir diese Aspekte für NLP-Modelle zur Beantwortung von Fragen behandeln.</p><h2>Frage-Antwort-System</h2><p>Ein Frage-Antwort-Modell (QA-Modell) ist eine Art von NLP-Modell, das dazu dient, Fragen in natürlicher Sprache zu beantworten. Wenn Benutzer Fragen haben, deren Antworten aus mehreren Quellen abgeleitet werden müssen, ohne dass in den Dokumenten eine vorgegebene Zielantwort vorhanden ist, können generative QA-Modelle hilfreich sein. Allerdings können diese Modelle rechenintensiv sein und benötigen große Datenmengen für das domänenspezifische Training, was sie in manchen Situationen weniger praktikabel macht, obwohl diese Methode besonders wertvoll sein kann, um Fragestellungen außerhalb des jeweiligen Fachgebiets zu bearbeiten.</p><p>Wenn Benutzer hingegen Fragen zu einem bestimmten Thema haben und die eigentliche Antwort im Dokument enthalten ist, können extraktive QA-Modelle verwendet werden. Diese Modelle extrahieren die Antwort direkt aus dem Quelldokument und liefern transparente und überprüfbare Ergebnisse. Dadurch sind sie eine praktischere Option für Unternehmen oder Organisationen, die eine einfache und effiziente Möglichkeit zur Beantwortung von Fragen bieten möchten.</p><p>Das folgende Beispiel demonstriert die Verwendung eines vortrainierten, extraktiven QA-Modells, <a href="https://huggingface.co/deepset/minilm-uncased-squad2">das auf Hugging Face verfügbar ist</a> und in Elasticsearch bereitgestellt wird, um Antworten aus einem gegebenen Kontext zu extrahieren:</p>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
}
<p><a href="https://www.elastic.co/guide/en/machine-learning/current/ml-nlp-deploy-models.html">Trainierte Modelle einsetzen.</a></p><p><a href="https://www.elastic.co/guide/en/machine-learning/current/ml-nlp-ner-example.html#ex-ner-ingest">Fügen Sie einer Inferenz-Ingest-Pipeline ein Modell hinzu.</a></p><p>Es gibt verschiedene Möglichkeiten, Benutzeranfragen zu bearbeiten und Informationen abzurufen, und die Verwendung mehrerer Sprachmodelle und Datenquellen kann eine effektive Alternative beim Umgang mit unstrukturierten Daten sein. Um dies zu veranschaulichen, haben wir ein Beispiel für die Datenverarbeitung eines Chatbots, der dazu dient, Anfragen mit Antworten zu beantworten, die auf Daten basieren, die aus ausgewählten Dokumenten extrahiert wurden.</p><h2>Chatbot-Datenverarbeitung: NLP und Vektorsuche</h2><img src="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blta418a9c54bb16cf9/6a17d7975772624b371bca43/c2d1a2f110e937b1d3e5df0d5caac3c906c98fb0-1440x748.png" alt="" /><p>Wie oben dargestellt, lässt sich die Datenverarbeitung für unseren Chatbot in drei Teile unterteilen:</p><ul><li><p><strong>Vektorverarbeitung:</strong> In diesem Teil werden Dokumente in Vektordarstellungen umgewandelt.</p></li><li><p><strong>Verarbeitung der Benutzereingaben:</strong> Dieser Teil extrahiert relevante Informationen aus der Benutzeranfrage und führt eine semantische Suche sowie einen hybriden Abruf durch.</p></li><li><p><strong>Optimierung:</strong> Dieser Teil umfasst die Überwachung und ist entscheidend für die Zuverlässigkeit, optimale Leistung und ein hervorragendes Benutzererlebnis des Chatbots.</p></li></ul><h2>Vektorverarbeitung</h2><p>Im <strong>Verarbeitungsprozess</strong> besteht der erste Schritt darin, die Bestandteile jedes Dokuments zu ermitteln, um dann jedes Element in eine Vektordarstellung umzuwandeln; diese Darstellungen können für eine breite Palette von Datenformaten erstellt werden.</p><p>Zur Berechnung von Einbettungen stehen verschiedene Methoden zur Verfügung, darunter vortrainierte Modelle und Bibliotheken.</p><p>Wichtig ist zu beachten, dass die Effektivität der Suche und des Abrufs dieser Darstellungen von den vorhandenen Daten sowie der Qualität und Relevanz der verwendeten Methode abhängt.</p><p>Sobald die Vektoren berechnet sind, werden sie in Elasticsearch mit einem Feld vom Typ <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/dense-vector.html">dense_vector</a> gespeichert.</p>PUT &lt;target&gt;
{
  "mappings": {
    "properties": {
      "doc_part_vector": {
        "type": "dense_vector",
        "dims": 3
      },
      "doc_part" : {
        "type" : "keyword"
      }
    }
  }
}
<h2>Verarbeitung von Benutzereingaben des Chatbots</h2><p>Für den <strong>Benutzer</strong> ist es nach Erhalt einer Frage sinnvoll, alle möglichen Informationen daraus zu extrahieren, bevor er fortfährt. Dies hilft, die Absicht des Benutzers zu verstehen, und in diesem Fall verwenden wir ein <a href="https://huggingface.co/dslim/bert-base-NER">Named Entity Recognition-Modell (NER),</a> um dies zu unterstützen. NER ist der Prozess der Identifizierung und Klassifizierung benannter Entitäten in vordefinierte Entitätskategorien.</p>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&amp;Elastic)?",
  "entities": [
    {
      "entity": "Elastic",
      "class_name": "ORG",
      "class_probability": 0.4993975435876747,
      "start_pos": 25,
      "end_pos": 32
    }
  ]
}
<p>Obwohl dies kein notwendiger Schritt ist, können wir die kNN-Suche mithilfe eines <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#knn-search-filter-example">Filters</a> einschränken, indem wir strukturierte Daten oder das oben genannte oder ein anderes NLP-Modellergebnis verwenden, um die Anfrage des Benutzers zu kategorisieren. Dies trägt zur Verbesserung der Leistung und Genauigkeit bei, indem die Menge der zu verarbeitenden Daten reduziert wird.</p>    "filter": {
      "term": {
        "org": "Elastic"
      }
    }
<h2>Semantische Suche und hybride Retrieval-Methoden</h2><p>Da die Eingabeaufforderung von Benutzeranfragen stammt und der Chatbot die menschliche Sprache mit ihrer Variabilität und Mehrdeutigkeit verarbeiten muss, ist <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#semantic-search">die semantische Suche</a> hervorragend geeignet. In Elasticsearch können Sie eine semantische Suche in einem einzigen Schritt durchführen, indem Sie die Abfragezeichenfolge und die ID des <a href="https://huggingface.co/sentence-transformers/msmarco-MiniLM-L-12-v3">einbettenden Modells</a> in ein query_vector_builder-Objekt übergeben. Dadurch wird die Anfrage vektorisiert und eine kNN- <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html">Suche</a> durchgeführt, um die k besten Übereinstimmungen zu finden, die der Bedeutung der Anfrage am nächsten kommen:</p>POST /&lt;target&gt;/_search
{
  "knn": {
    "field": "doc_part_vector",
    "k": 5,
    "num_candidates": 20,
    "query_vector_builder": {
      "text_embedding": {
        "model_id": "&lt;text-embedding-model-id&gt;",
        "model_text": "&lt;query_string&gt;"
      }
    }
  }
 }
<p><a href="https://www.elastic.co/guide/en/machine-learning/8.7/ml-nlp-text-emb-vector-search-example.html">Beispiel für den gesamten Prozess: Wie man ein Text-Embedding-Modell bereitstellt und es für die semantische Suche verwendet.</a> Elasticsearch verwendet die Lucene-Implementierung des Okapi BM25, eines <strong>Sparse-Modells</strong> , um Textanfragen nach Relevanz zu ordnen, während für die <strong>semantische Suche</strong> <strong>Dense-Modelle verwendet</strong> werden. Um die <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/knn-search.html#_combine_approximate_knn_with_other_features"><strong>Stärken beider</strong></a>  Ansätze – Vektortreffer und Treffer aus der Textanfrage – zu <strong>kombinieren ,</strong> <strong>kann man eine hybride Abfrage</strong> durchführen:</p>POST &lt;target&gt;/_search
{
  "query": {
          "match": {
            "content": {
              "query": "&lt;query_string&gt;"
            }
        }
  },
  "knn": {
    "field": "doc_part_vector",
    "query_vector_builder": {
      "text_embedding": {
    "model_id": "&lt;text-embedding-model-id&gt;",
     "model_text": "&lt;query_string&gt;"
      }
    },
    "filter": {
      "term": {
        "org": "Elastic"
      }
    }
  }
}
<h3>Die Kombination von spärlichen und dichten Modellen liefert oft die besten Ergebnisse.</h3><p>Sparse Modelle schneiden im Allgemeinen bei kurzen Anfragen und spezifischen Terminologien besser ab, während Dense Modelle Kontext und Assoziationen nutzen. Wenn Sie mehr darüber erfahren möchten, wie sich diese Methoden vergleichen und ergänzen, vergleichen wir hier BM25 mit zwei dichten Modellen, die speziell für den Retrieval trainiert wurden.</p><p>Das relevanteste Ergebnis ist in der Regel die erste Antwort, die dem Benutzer angezeigt wird. Der_Score ist eine Zahl, die zur Bestimmung der <strong>Relevanz</strong> des zurückgegebenen Dokuments verwendet wird.</p><h2>Chatbot-Optimierung</h2><p>Um die Benutzerfreundlichkeit, die Leistung und die Zuverlässigkeit Ihres Chatbots zu verbessern, können Sie neben der Anwendung hybrider Bewertungsverfahren die folgenden Ansätze einbeziehen: <strong>Stimmungsanalyse:</strong> Um die Kommentare und Reaktionen der Benutzer während des Dialogs zu erfassen, können Sie ein <a href="https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english">Stimmungsanalysemodell</a> integrieren:</p>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
}
<p><a href="https://www.elastic.co/blog/chatgpt-elasticsearch-openai-meets-private-data"><strong>GPT-Funktionen</strong></a> <strong>:</strong> Alternativ zur Verbesserung des Gesamterlebnisses können Sie die Suchrelevanz von Elasticsearch mit den GPT-Frage-Antwort-Funktionen von OpenAI kombinieren und dabei die <a href="https://platform.openai.com/docs/guides/chat">Chat Completion API</a> nutzen, um dem Benutzer modellgenerierte Antworten zurückzugeben, die die Top-k-Dokumente als Kontext berücksichtigen. <em>Aufforderung: "Beantworten Sie diese Frage &lt;user_question&gt; ausschließlich anhand dieses Dokuments &lt;top_search_result&gt;"</em></p><p><strong>Beobachtbarkeit:</strong> Die Sicherstellung der Leistungsfähigkeit eines jeden Chatbots ist von entscheidender Bedeutung, und die Überwachung ist ein wesentlicher Bestandteil, um dies zu erreichen. Neben Protokollen, die die Interaktionen des Chatbots erfassen, ist es wichtig, auch die Reaktionszeit, die Latenz und andere relevante Chatbot-Metriken zu verfolgen. Dadurch lassen sich Muster und Trends erkennen und sogar Anomalien aufdecken.<a href="https://www.elastic.co/blog/monitor-openai-api-gpt-models-opentelemetry-elastic">Elastic Observability-</a> Tools ermöglichen es Ihnen, diese Informationen zu sammeln und zu analysieren.</p><h2>Zusammenfassung</h2><p>Dieser Blogbeitrag erklärt, was NLP und Vektorsuche sind, und geht auf ein Beispiel eines Chatbots ein, der zur Beantwortung von Benutzeranfragen eingesetzt wird, indem er Daten berücksichtigt, die aus der Vektordarstellung von Dokumenten extrahiert werden.</p><p>Wie gezeigt wurde, sind Chatbots mithilfe von NLP und Vektorsuche in der Lage, komplexe Aufgaben zu bewältigen, die über strukturierte, zielgerichtete Daten hinausgehen. Dies umfasst das Abgeben von Empfehlungen und das Beantworten spezifischer produkt- oder geschäftsbezogener Anfragen unter Verwendung mehrerer Datenquellen und -formate als Kontext sowie die Bereitstellung eines personalisierten Benutzererlebnisses.</p><p>Die Anwendungsfälle reichen von der Unterstützung des Kundenservice bei Kundenanfragen bis hin zur Hilfe für Entwickler bei ihren Fragen durch schrittweise Anleitungen, Empfehlungen oder sogar die Automatisierung von Aufgaben. Je nach Zielsetzung und vorhandenen Daten können auch andere Modelle und Methoden eingesetzt werden, um noch bessere Ergebnisse zu erzielen und das gesamte Benutzererlebnis zu verbessern.</p><p>Hier sind einige Links zu diesem Thema, die hilfreich sein könnten:</p><ol><li><p><a href="https://www.elastic.co/blog/how-to-deploy-natural-language-processing-nlp-getting-started">Wie man die Verarbeitung natürlicher Sprache (NLP) einsetzt: Erste Schritte</a></p></li><li><p><a href="https://www.elastic.co/blog/overview-image-similarity-search-in-elastic">Überblick über die Bildähnlichkeitssuche in Elasticsearch</a></p></li><li><p><a href="https://www.elastic.co/blog/chatgpt-elasticsearch-openai-meets-private-data">ChatGPT und Elasticsearch: OpenAI trifft auf private Daten</a></p></li><li><p><a href="https://www.elastic.co/blog/monitor-openai-api-gpt-models-opentelemetry-elastic">OpenAI API und GPT-Modelle mit OpenTelemetry und Elastic überwachen</a></p></li><li><p><a href="https://www.elastic.co/blog/why-technology-leaders-need-vector-search">5 Gründe, warum IT-Verantwortliche die Vektorsuche benötigen, um das Sucherlebnis zu verbessern</a></p></li></ol><p>Durch die Integration von NLP und nativer Vektorsuche in Elasticsearch können Sie dessen Geschwindigkeit, Skalierbarkeit und Suchfunktionen nutzen, um hocheffiziente und effektive Chatbots zu erstellen, die in der Lage sind, große Datenmengen zu verarbeiten, egal ob strukturiert oder unstrukturiert.</p><p>Bereit loszulegen? Starten Sie eine <a href="https://cloud.elastic.co/registration?onboarding_token=vectorsearch&amp;cta=cloud-registration&amp;tech=trial&amp;plcmt=article%20content&amp;pg=search-labs">kostenlose Testversion von Elastic Cloud</a>.</p><p><em>In diesem Blogbeitrag haben wir möglicherweise generative KI-Tools von Drittanbietern verwendet oder darauf verwiesen, die Eigentum ihrer jeweiligen Inhaber sind und von diesen betrieben werden. Elastic hat keinerlei Kontrolle über die Tools von Drittanbietern und übernimmt keine Verantwortung oder Haftung für deren Inhalt, Funktionsweise oder Verwendung sowie für etwaige Verluste oder Schäden, die durch die Verwendung solcher Tools entstehen können. Bitte seien Sie vorsichtig beim Einsatz von KI-Tools mit persönlichen, sensiblen oder vertraulichen Informationen. Alle von Ihnen übermittelten Daten können für das Training der KI oder für andere Zwecke verwendet werden. Es gibt keine Garantie dafür, dass die von Ihnen bereitgestellten Informationen sicher oder vertraulich behandelt werden. Sie sollten sich vor der Verwendung von generativen KI-Tools mit deren Datenschutzpraktiken und Nutzungsbedingungen vertraut machen.</em></p><p><em>Elastic, Elasticsearch und zugehörige Marken, Waren- und Dienstleistungszeichen sind Marken oder eingetragene Marken von Elastic N.V. in den USA und anderen Ländern. Alle weiteren Marken- oder Warenzeichen sind eingetragene Marken oder eingetragene Warenzeichen der jeweiligen Eigentümer.</em></p>]]></content:encoded>
    <link>https://www.elastic.co/search-labs/blog/enhancing-chatbot-capabilities-with-nlp-and-vector-search-in-elasticsearch</link>
    <guid isPermaLink="true">https://www.elastic.co/search-labs/blog/enhancing-chatbot-capabilities-with-nlp-and-vector-search-in-elasticsearch</guid>
    <category><![CDATA[Vektordatenbank]]></category>
    <dc:creator><![CDATA[Priscilla Parodi]]></dc:creator>
    <enclosure url="https://static-www.elastic.co/v3/assets/bltefdd0b53724fa2ce/blt5c545fc80b6d79d6/6a170214839dfad776dcfd6f/d968e646240cd3ef7c79b5124d562a5f951d812b-1440x840.png" length="0" type="image/png"/>
    <pubDate>Wed, 21 Jun 2023 00:00:00 GMT</pubDate>
  </item>
  </channel>
</rss>