Blog

Melhorando a relevância de modelos de incorporação multilíngues com reclassificação de busca híbrida.

Aprenda como melhorar a relevância dos resultados de busca do modelo de incorporação multilíngue E5 usando o reranker do Cohere e a busca híbrida no Elasticsearch.

Introdução

Na última parte desta série, mostramos como implantar o modelo pré-treinado E5 da Elastic (bem como outros modelos de incorporação de texto multilíngue da Hugging Face) e exploramos a geração de embeddings vetoriais densos a partir de seus dados de texto usando o Elasticsearch e o Kibana. Neste blog, examinaremos os resultados dessas incorporações e destacaremos as vantagens significativas de se utilizar um modelo multilíngue.

Agora que temos nosso índice coco_multilingual, realizar a busca nos retornará documentos em vários idiomas, com o campo “en” para referência:

# 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": {...}
       }
     },
     . . .

Realizar uma pesquisa em inglês

Vamos tentar realizar a pesquisa em inglês e ver como funciona:

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"
       }
     },
     . . .

Aqui, embora a consulta pareça enganosamente simples, estamos buscando, nos bastidores, as representações numéricas da palavra 'kitty' em todos os documentos e em todos os idiomas. E como estamos realizando uma busca vetorial, podemos pesquisar semanticamente todas as palavras que possam estar relacionadas a 'gatinho': “gato”, “gatinho”, “felino”, “gatto” (italiano), “mèo” (vietnamita), 고양이 (coreano), 猫 (chinês), etc. Consequentemente, mesmo que minha consulta seja em inglês, podemos pesquisar conteúdo em todos os outros idiomas também. Por exemplo, pesquisar por um gatinho lying on something também retorna documentos em italiano, holandês ou vietnamita. Que eficiência!

Realizar uma busca por conteúdo em outros idiomas.

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"
}
. . .

Da mesma forma, realizar uma busca pela palavra-chave “gato” em coreano (“고양이”) também retornará resultados relevantes. O mais impressionante é que não temos nenhum documento em coreano neste índice!

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"
       }
     },

Isso funciona porque o modelo de incorporação representa o significado em um espaço semântico compartilhado, permitindo a recuperação de imagens relevantes mesmo com uma consulta em um idioma diferente do das legendas indexadas.

Aumentando os resultados de pesquisa relevantes com pesquisa híbrida e reclassificação.

Estamos satisfeitos por os resultados relevantes terem surgido conforme o esperado. Mas, no mundo real, digamos, no comércio eletrônico ou em aplicações RAG que precisam filtrar os resultados para os 5 a 10 mais relevantes, podemos usar um modelo de reclassificação para priorizar os resultados mais pertinentes.

Nesse caso, uma busca em vietnamita, como "qual a cor do gato?", retornará muitos resultados, mas os dois primeiros podem não ser os mais relevantes.

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ì?"
     }
   }
 }
}

Todos os resultados mencionam gato ou alguma forma de cor:

Então vamos melhorar isso! Vamos integrar o modelo de reclassificação multilíngue do Coherepara melhorar o raciocínio correspondente à nossa pergunta.

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"
       }
     },

Agora, com os melhores resultados, nosso aplicativo pode afirmar com segurança que a cor do gatinho é preta ou marrom com listras. O que é ainda mais interessante é que nossa busca vetorial detectou uma omissão na legenda em inglês do conjunto de dados original. O programa consegue encontrar o gato marrom listrado, mesmo que a tradução de referência em inglês tenha omitido esse detalhe. Este é o poder da busca vetorial.

Conclusão

Neste blog, exploramos a utilidade de um modelo de incorporação multilíngue e como aproveitar o Elasticsearch para integrar os modelos, gerar incorporações e melhorar efetivamente a relevância e a precisão com uma busca e reclassificação híbrida. Você pode criar seu próprio cluster na nuvem para experimentar a busca semântica multilíngue usando nosso modelo E5 pronto para uso, no idioma e conjunto de dados de sua escolha.

Conteúdo relacionado

LINQ para Elasticsearch ES|QL: escreva Consultas em C# e Consulte o Elasticsearch

Florian Bernd

Aprimorando as capacidades de chatbots com PNL e busca vetorial no Elasticsearch.

Priscilla Parodi

Elasticsearch x OpenSearch: comparação de desempenho da busca vetorial

Ugo Sangiorgi

Detecção de plágio por IA: usando o Elasticsearch

Priscilla Parodi

Técnicas avançadas de RAG, parte 2: Consultas e testes

Han Xiang Choong

Pronto para criar buscas de última geração?

Uma pesquisa suficientemente avançada não se consegue apenas com o esforço de uma só pessoa. O Elasticsearch é impulsionado por cientistas de dados, especialistas em operações de aprendizado de máquina, engenheiros e muitos outros que são tão apaixonados por buscas quanto você. Vamos nos conectar e trabalhar juntos para construir a experiência de busca mágica que lhe trará os resultados desejados.

Experimente você mesmo(a)