Blog

Verbesserung der Relevanz mehrsprachiger Einbettungsmodelle durch hybrides Such-Reranking

Erfahren Sie, wie Sie die Relevanz der Suchergebnisse des E5-Multilingual-Embedding-Modells mithilfe des Cohere-Rerankers und der Hybridsuche in Elasticsearch verbessern können.

Einleitung

Im letzten Teil dieser Serie haben wir die Bereitstellung des vortrainierten E5-Modells von Elastic (sowie anderer mehrsprachiger Text-Embedding-Modelle von Hugging Face) erläutert und uns mit der Generierung dichter Vektor-Embeddings aus Ihren Textdaten mithilfe von Elasticsearch und Kibana befasst. In diesem Blogbeitrag werden wir die Ergebnisse dieser Einbettungen untersuchen und die wesentlichen Vorteile der Verwendung eines mehrsprachigen Modells hervorheben.

Nachdem wir nun unseren Index coco_multilingual haben, liefert die Suche Dokumente in mehreren Sprachen, wobei das Feld „en“ als Referenz dient:

# GET coco_multilingual/_search
    {
       "_index": "coco_multilingual",
       "_id": "WAiXQJYBgf6odR9bLohZ",
       "_score": 1,
       "_source": {
         "description": "Ein Parkmeßgerät auf einer Straße mit Autos",
         "en": "A row of parked cars sitting next to parking meters.",
         "language": "de",
         "vector_description": {...}
       }
     },
     . . .

Eine Suche auf Englisch durchführen

Versuchen wir, die Suche auf Englisch durchzuführen und sehen wir, wie gut sie funktioniert:

GET coco_multi/_search
{
"size": 10,
"_source": [
  "description", "language", "en"
],
"knn": {
  "field": "vector_description.predicted_value",
  "k": 10,
  "num_candidates": 100,
  "query_vector_builder": {
    "text_embedding": {
      "model_id": ".multilingual-e5-small_linux-x86_64_search",
      "model_text": "query: kitty"
    }
  }
}
}
{
       "_index": "coco_multi",
       "_id": "JQiXQJYBgf6odR9b6Yz0",
       "_score": 0.9334303,
       "_source": {
         "description": "Eine Katze, die in einem kleinen, gepackten Koffer sitzt.",
         "en": "A brown and white cat is in a suitcase.",
         "language": "de"
       }
     },
      {
       "_index": "coco_multi",
       "_id": "3AiXQJYBgf6odR9bFod6",
       "_score": 0.9281012,
       "_source": {
         "description": "Una bambina che tiene un gattino vicino a una recinzione blu.",
         "en": "A little girl holding a kitten next to a blue fence.",
         "language": "it"
       }
     },
     . . .

Auch wenn die Anfrage täuschend einfach aussieht, suchen wir hier im Hintergrund nach den numerischen Einbettungen des Wortes „Kitty“ in allen Dokumenten und Sprachen. Und weil wir eine Vektorsuche durchführen, können wir semantisch nach allen Wörtern suchen, die mit „Kitty“ verwandt sein könnten: „Katze“, „Kätzchen“, „Katze“, „Gatto“ (Italienisch), „Mèo“ (Vietnamesisch), 고양이 (Koreanisch), 猫 (Chinesisch) usw. Das bedeutet, dass wir, selbst wenn meine Suchanfrage auf Englisch ist, auch Inhalte in allen anderen Sprachen suchen können. Wenn man beispielsweise nach „kitty lying on something sucht, erhält man auch Dokumente in Italienisch, Niederländisch oder Vietnamesisch. Das nenne ich Effizienz!

Suche nach Inhalten in anderen Sprachen

GET coco_multi/_search
{  
 "size": 100,
 "_source": [
   "description", "language", "en"
 ],
 "knn": {
   "field": "vector_description.predicted_value",
   "k": 50,
   "num_candidates": 1000,
   "query_vector_builder": {
     "text_embedding": {
       "model_id": ".multilingual-e5-small_linux-x86_64_search",
       "model_text": "query: kitty lying on something"
     }
   }
 }
}
{
 "description": "A black kitten lays on her side beside remote controls.",
 "en": "A black kitten lays on her side beside remote controls.",
 "language": "en"
},
{
 "description": "un gattino sdraiato su un letto accanto ad alcuni telefoni ",
 "en": "A black kitten lays on her side beside remote controls.",
 "language": "it"
},
{
 "description": "eine Katze legt sich auf ein ausgestopftes Tier",
 "en": "a cat lays down on a stuffed animal",
 "language": "de"
},
{
 "description": "Một chú mèo con màu đen nằm nghiêng bên cạnh điều khiển từ xa.",
 "en": "A black kitten lays on her side beside remote controls.",
 "language": "vi"
}
. . .

Eine Suche nach dem koreanischen Stichwort „Katze“ („고양이“) liefert ebenfalls aussagekräftige Ergebnisse. Das Spektakuläre daran ist, dass wir in diesem Index nicht einmal Dokumente in koreanischer Sprache haben!

GET coco_multi/_search
{
 "size": 100,
 "_source": [
   "description", "language", "en"
 ],
 "knn": {
   "field": "vector_description.predicted_value",
   "k": 50,
   "num_candidates": 1000,
   "query_vector_builder": {
     "text_embedding": {
       "model_id": ".multilingual-e5-small_linux-x86_64_search",
       "model_text": "query: 고양이"
     }
   }
 }
}
 {
       {
         "description": "eine Katze legt sich auf ein ausgestopftes Tier",
         "en": "a cat lays down on a stuffed animal",
         "language": "de"
       }
     },
     {
       {
         "description": "Một con chó và con mèo đang ngủ với nhau trên một chiếc ghế dài màu cam.",
         "en": "A dog and cat lying  together on an orange couch. ",
         "language": "vi"
       }
     },

Dies funktioniert, weil das Einbettungsmodell die Bedeutung in einem gemeinsamen semantischen Raum repräsentiert und somit das Auffinden relevanter Bilder auch bei einer Anfrage in einer anderen Sprache als den indizierten Bildunterschriften ermöglicht.

Erhöhung der Relevanz der Suchergebnisse durch hybride Suche und Reranking

Wir freuen uns, dass die entsprechenden Ergebnisse wie erwartet eingetreten sind. In der realen Welt, beispielsweise im E-Commerce oder bei RAG-Anwendungen, bei denen die Ergebnisse auf die 5 bis 10 relevantesten Ergebnisse eingegrenzt werden müssen, können wir ein Rerank-Modell verwenden, um die relevantesten Ergebnisse zu priorisieren.

Eine Suchanfrage wie „Welche Farbe hat die Katze?“ auf Vietnamesisch liefert hier zwar viele Ergebnisse, aber die ersten ein oder zwei Ergebnisse sind möglicherweise nicht die relevantesten.

GET coco_multi/_search
{
 "size": 20,
 "_source": [
   "description",
   "language",
   "en"
 ],
 "knn": {
   "field": "vector_description.predicted_value",
   "k": 20,
   "num_candidates": 1000,
   "query_vector_builder": {
     "text_embedding": {
       "model_id": ".multilingual-e5-small_linux-x86_64_search",
       "model_text": "query: con mèo màu gì?"
     }
   }
 }
}

In allen Ergebnissen wird die Katze oder irgendeine Farbe erwähnt:

Lasst uns das verbessern! Lasst uns das mehrsprachige Rerank-Modell von Cohereintegrieren, um die Argumentation in Bezug auf unsere Frage zu verbessern.

PUT _inference/rerank/cohere_rerank
{
 "service": "cohere",
 "service_settings": {
   "api_key": "your_api_key",
   "model_id": "rerank-v3.5"
 },
 "task_settings": {
   "top_n": 10,
   "return_documents": true
 }
}


GET coco_multi/_search
{
"size": 10,
"_source": [
  "description",
  "language",
  "en"
],
"retriever": {
  "text_similarity_reranker": {
    "retriever": {
      "rrf": {
        "retrievers": [
          {
            "knn": {
              "field": "vector_description.predicted_value",
              "k": 50,
              "num_candidates": 100,
              "query_vector_builder": {
                "text_embedding": {
                  "model_id": ".multilingual-e5-small_linux-x86_64_search",
                  "model_text": "query: con mèo màu gì?" // English: What color is the cat?
                }
              }
            }
          }
        ],
        "rank_window_size": 100,
        "rank_constant": 0
      }
    },
    "field": "description",
    "inference_id": "cohere_rerank",
    "inference_text": "con mèo màu gì?"
  }
}
}
 {
       "_index": "coco_multi",
       "_id": "rQiYQJYBgf6odR9bBYyH",
       "_score": 1.5501487,
       "_source": {
         "description": "Hai cái điện thoại được đặt trên một cái chăn cạnh một con mèo con màu đen.",
         "en": "A black kitten lays on her side beside remote controls.",
         "language": "vi"
       }
     },
     {
       "_index": "coco_multi",
       "_id": "swiXQJYBgf6odR9b04uf",
       "_score": 1.5427427,
       "_source": {
         "description": "Một con mèo sọc nâu nhìn vào máy quay.", // Real translation: A brown striped cat looks at the camera 
         "en": "This cat is sitting on a porch near a tire.",
         "language": "vi"
       }
     },

Mit den besten Ergebnissen kann unsere Anwendung nun mit Sicherheit sagen, ob das Kätzchen schwarz oder braun mit Streifen ist. Was hierbei noch interessanter ist: Unsere Vektorsuche hat tatsächlich eine Auslassung in der englischen Bildunterschrift des ursprünglichen Datensatzes aufgedeckt. Es ist in der Lage, die braun gestreifte Katze zu finden, obwohl die englische Referenzübersetzung dieses Detail ausgelassen hat. Das ist die Stärke der Vektorsuche.

Fazit

In diesem Blog haben wir den Nutzen eines mehrsprachigen Einbettungsmodells erläutert und gezeigt, wie man Elasticsearch nutzen kann, um die Modelle zu integrieren, Einbettungen zu generieren und Relevanz und Genauigkeit mit einer hybriden Suche und einem Reranker effektiv zu verbessern. Sie können einen eigenen Cloud-Cluster erstellen , um die mehrsprachige semantische Suche mit unserem sofort einsatzbereiten E5-Modell auf der Sprache und dem Datensatz Ihrer Wahl auszuprobieren.

Zugehörige Inhalte

LINQ to Elasticsearch ES|QL: C# schreiben, Elasticsearch abfragen

Florian Bernd

Erweiterung der Chatbot-Funktionen mit NLP und Vektorsuche in Elasticsearch

Priscilla Parodi

Elasticsearch vs. OpenSearch: Vergleich der Leistung bei der Vektorsuche

Ugo Sangiorgi

KI-Plagiat: Plagiatserkennung mit Elasticsearch

Priscilla Parodi

Fortgeschrittene RAG-Techniken Teil 2: Abfragen und Testen

Han Xiang Choong

Sind Sie bereit, hochmoderne Sucherlebnisse zu schaffen?

Eine ausreichend fortgeschrittene Suche kann nicht durch die Bemühungen einer einzelnen Person erreicht werden. Elasticsearch wird von Datenwissenschaftlern, ML-Ops-Experten, Ingenieuren und vielen anderen unterstützt, die genauso leidenschaftlich an der Suche interessiert sind wie Sie. Lasst uns in Kontakt treten und zusammenarbeiten, um das magische Sucherlebnis zu schaffen, das Ihnen die gewünschten Ergebnisse liefert.

Probieren Sie es selbst aus