通过混合搜索重排序提升多语言嵌入模型的相关性

作者:来自 Elastic Quynh Nguyen

学习如何使用 Cohere 的重排序器和 Elasticsearch 中的混合搜索来提升 E5 多语言嵌入模型搜索结果的相关性。

从向量搜索到强大的 REST API,Elasticsearch 为开发者提供了最全面的搜索工具包。前往 GitHub 上的示例笔记本尝试新功能。你也可以立即开始免费试用或在本地运行 Elasticsearch。


介绍

在本系列的上一部分中,我们介绍了如何部署 Elastic 的预训练 E5 模型(以及来自 Hugging Face 的其他多语言文本嵌入模型),并深入讲解了如何使用 Elasticsearch 和 Kibana 从文本数据生成密集向量嵌入。在这篇博客中,我们将分析这些嵌入的结果,并重点展示使用多语言模型的显著优势。

现在我们已经有了索引 coco_multilingual(可参考文章 "在 Elasticsearch 中部署多语言嵌入模型" 按照 coco 数据集),执行搜索后将会得到多种语言的文档,其中 "en" 字段供我们参考:

复制代码
# 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": {...}
       }
     },
     . . .

用英语执行搜索

让我们尝试用英语进行搜索,看看效果如何:

复制代码
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"
       }
     },
     . . .

在这里,虽然查询看起来非常简单,但在底层,我们实际上是在所有语言的所有文档中搜索单词 "kitty" 的数值嵌入。由于我们执行的是向量搜索,因此可以语义化地搜索与 "kitty" 相关的所有词语,如 "cat"、"kitten"、"feline"、"gatto"(意大利语)、"mèo"(越南语)、고양이(韩语)、猫(中文)等。这样一来,即使我的查询是英文,我们也可以搜索其他语言的内容。例如,搜索一只躺着的 kitty 时,返回的文档中也可能包含意大利语、荷兰语或越南语内容。高效至极!

搜索其他语言的内容

复制代码
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"
}
. . .

同样地,用韩语("고양이")对 "cat" 进行关键词搜索也会得到有意义的结果。令人惊奇的是,这个索引里甚至没有任何韩语文档!

复制代码
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"
       }
     },

这是因为嵌入模型在共享语义空间中表示意义,即使查询语言与索引说明文字不同,也能检索到相关的图像。

使用混合搜索和重排序提升相关搜索结果

我们很高兴看到相关结果如预期般出现。但在现实场景中,比如电商或需要筛选出前 5 到 10 个最相关结果的 RAG 应用中,我们可以使用重排序模型来优先显示最相关的结果。

在这里,用越南语查询 "what color is the cat? - 猫是什么颜色?" 时会返回许多结果,但前一两个可能并不是最相关的。

复制代码
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ì?"
     }
   }
 }
}

这些结果都提到了猫,或某种颜色的形式:

所以让我们来改进它!让我们整合 Cohere 的多语言重排序模型,以提升与我们问题对应的推理能力。

复制代码
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"
       }
     },

现在,通过这些顶级结果,我们的应用可以自信地回答小猫的颜色是黑色或带条纹的棕色。更有趣的是,我们的向量搜索实际上发现了原始数据集中英文说明的遗漏。即使参考的英文翻译漏掉了这个细节,它仍能找到带棕色条纹的猫。这就是向量搜索的强大之处。

结论

在这篇博客中,我们讲解了多语言嵌入模型的实用性,以及如何利用 Elasticsearch 集成模型生成嵌入,并通过混合搜索和重排序器有效提升相关性和准确性。你可以创建自己的 Cloud 集群,使用我们的开箱即用 E5 模型,在你选择的语言和数据集上尝试多语言语义搜索。

原文:https://www.elastic.co/search-labs/blog/multilingual-embedding-model-hybrid-search-reranking

相关推荐
猫头虎2 小时前
昆仑芯 X HAMi X 百度智能云 | 昆仑芯 P800 XPU/vXPU 双模式算力调度方案落地
人工智能·百度·开源·aigc·文心一言·gpu算力·agi
大千AI助手3 小时前
探索LoSA:动态低秩稀疏自适应——大模型高效微调的新突破
人工智能·神经网络·lora·大模型·llm·大千ai助手·稀疏微调
说私域3 小时前
“开源链动2+1模式AI智能名片S2B2C商城小程序”在拉群营销中的应用与效果
人工智能·小程序
倔强的石头1063 小时前
KingbaseES:从兼容到超越,详解超越MySQL的权限隔离与安全增强
数据库·mysql·安全·金仓数据库
PyAIGCMaster3 小时前
钉钉的设计理念方面,我可以学习
人工智能·深度学习·学习·钉钉
J-JunLiang3 小时前
Flink 实时开发:关键知识点
大数据·flink
sensen_kiss3 小时前
INT305 Machine Learning 机器学习 Pt.5 神经网络(Neural network)
人工智能·神经网络·机器学习
小鸡毛程序员3 小时前
我在CSDN学MYSQL之----数据库基本概念和基本知识(下)
数据库·mysql
极造数字4 小时前
从EMS看分布式能源发展:挑战与机遇并存
人工智能·分布式·物联网·信息可视化·能源·制造