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

作者:来自 Elastic Quynh Nguyen

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

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


介绍

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

现在我们已经有了索引 coco_multilingual,执行搜索后将会得到多种语言的文档,其中 "en" 字段供我们参考:

bash 复制代码
`

1.  # GET coco_multilingual/_search
2.      {
3.         "_index": "coco_multilingual",
4.         "_id": "WAiXQJYBgf6odR9bLohZ",
5.         "_score": 1,
6.         "_source": {
7.           "description": "Ein Parkmeßgerät auf einer Straße mit Autos",
8.           "en": "A row of parked cars sitting next to parking meters.",
9.           "language": "de",
10.           "vector_description": {...}
11.         }
12.       },
13.       . . .

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

用英语执行搜索

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

bash 复制代码
`

1.  GET coco_multi/_search
2.  {
3.  "size": 10,
4.  "_source": [
5.    "description", "language", "en"
6.  ],
7.  "knn": {
8.    "field": "vector_description.predicted_value",
9.    "k": 10,
10.    "num_candidates": 100,
11.    "query_vector_builder": {
12.      "text_embedding": {
13.        "model_id": ".multilingual-e5-small_linux-x86_64_search",
14.        "model_text": "query: kitty"
15.      }
16.    }
17.  }
18.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)
bash 复制代码
`

1.  {
2.         "_index": "coco_multi",
3.         "_id": "JQiXQJYBgf6odR9b6Yz0",
4.         "_score": 0.9334303,
5.         "_source": {
6.           "description": "Eine Katze, die in einem kleinen, gepackten Koffer sitzt.",
7.           "en": "A brown and white cat is in a suitcase.",
8.           "language": "de"
9.         }
10.       },
11.        {
12.         "_index": "coco_multi",
13.         "_id": "3AiXQJYBgf6odR9bFod6",
14.         "_score": 0.9281012,
15.         "_source": {
16.           "description": "Una bambina che tiene un gattino vicino a una recinzione blu.",
17.           "en": "A little girl holding a kitten next to a blue fence.",
18.           "language": "it"
19.         }
20.       },
21.       . . .

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

搜索其他语言的内容

bash 复制代码
`

1.  GET coco_multi/_search
2.  {  
3.   "size": 100,
4.   "_source": [
5.     "description", "language", "en"
6.   ],
7.   "knn": {
8.     "field": "vector_description.predicted_value",
9.     "k": 50,
10.     "num_candidates": 1000,
11.     "query_vector_builder": {
12.       "text_embedding": {
13.         "model_id": ".multilingual-e5-small_linux-x86_64_search",
14.         "model_text": "query: kitty lying on something"
15.       }
16.     }
17.   }
18.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)
bash 复制代码
`

1.  {
2.   "description": "A black kitten lays on her side beside remote controls.",
3.   "en": "A black kitten lays on her side beside remote controls.",
4.   "language": "en"
5.  },
6.  {
7.   "description": "un gattino sdraiato su un letto accanto ad alcuni telefoni ",
8.   "en": "A black kitten lays on her side beside remote controls.",
9.   "language": "it"
10.  },
11.  {
12.   "description": "eine Katze legt sich auf ein ausgestopftes Tier",
13.   "en": "a cat lays down on a stuffed animal",
14.   "language": "de"
15.  },
16.  {
17.   "description": "Một chú mèo con màu đen nằm nghiêng bên cạnh điều khiển từ xa.",
18.   "en": "A black kitten lays on her side beside remote controls.",
19.   "language": "vi"
20.  }
21.  . . .

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

bash 复制代码
`

1.  GET coco_multi/_search
2.  {
3.   "size": 100,
4.   "_source": [
5.     "description", "language", "en"
6.   ],
7.   "knn": {
8.     "field": "vector_description.predicted_value",
9.     "k": 50,
10.     "num_candidates": 1000,
11.     "query_vector_builder": {
12.       "text_embedding": {
13.         "model_id": ".multilingual-e5-small_linux-x86_64_search",
14.         "model_text": "query: 고양이"
15.       }
16.     }
17.   }
18.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)
bash 复制代码
 `1.   {
2.         {
3.           "description": "eine Katze legt sich auf ein ausgestopftes Tier",
4.           "en": "a cat lays down on a stuffed animal",
5.           "language": "de"
6.         }
7.       },
8.       {
9.         {
10.           "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.",
11.           "en": "A dog and cat lying  together on an orange couch. ",
12.           "language": "vi"
13.         }
14.       },`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

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

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

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

bash 复制代码
`

1.  GET coco_multi/_search
2.  {
3.   "size": 20,
4.   "_source": [
5.     "description",
6.     "language",
7.     "en"
8.   ],
9.   "knn": {
10.     "field": "vector_description.predicted_value",
11.     "k": 20,
12.     "num_candidates": 1000,
13.     "query_vector_builder": {
14.       "text_embedding": {
15.         "model_id": ".multilingual-e5-small_linux-x86_64_search",
16.         "model_text": "query: con mèo màu gì?"
17.       }
18.     }
19.   }
20.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

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

bash 复制代码
`

1.  PUT _inference/rerank/cohere_rerank
2.  {
3.   "service": "cohere",
4.   "service_settings": {
5.     "api_key": "your_api_key",
6.     "model_id": "rerank-v3.5"
7.   },
8.   "task_settings": {
9.     "top_n": 10,
10.     "return_documents": true
11.   }
12.  }

15.  GET coco_multi/_search
16.  {
17.  "size": 10,
18.  "_source": [
19.    "description",
20.    "language",
21.    "en"
22.  ],
23.  "retriever": {
24.    "text_similarity_reranker": {
25.      "retriever": {
26.        "rrf": {
27.          "retrievers": [
28.            {
29.              "knn": {
30.                "field": "vector_description.predicted_value",
31.                "k": 50,
32.                "num_candidates": 100,
33.                "query_vector_builder": {
34.                  "text_embedding": {
35.                    "model_id": ".multilingual-e5-small_linux-x86_64_search",
36.                    "model_text": "query: con mèo màu gì?" // English: What color is the cat?
37.                  }
38.                }
39.              }
40.            }
41.          ],
42.          "rank_window_size": 100,
43.          "rank_constant": 0
44.        }
45.      },
46.      "field": "description",
47.      "inference_id": "cohere_rerank",
48.      "inference_text": "con mèo màu gì?"
49.    }
50.  }
51.  }

`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)收起代码块![](https://csdnimg.cn/release/blogv2/dist/pc/img/arrowup-line-top-White.png)
json 复制代码
 `1.   {
2.         "_index": "coco_multi",
3.         "_id": "rQiYQJYBgf6odR9bBYyH",
4.         "_score": 1.5501487,
5.         "_source": {
6.           "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.",
7.           "en": "A black kitten lays on her side beside remote controls.",
8.           "language": "vi"
9.         }
10.       },
11.       {
12.         "_index": "coco_multi",
13.         "_id": "swiXQJYBgf6odR9b04uf",
14.         "_score": 1.5427427,
15.         "_source": {
16.           "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 
17.           "en": "This cat is sitting on a porch near a tire.",
18.           "language": "vi"
19.         }
20.       },`AI写代码![](https://csdnimg.cn/release/blogv2/dist/pc/img/runCode/icon-arrowwhite.png)

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

结论

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

原文:www.elastic.co/search-labs...

相关推荐
Elastic 中国社区官方博客21 小时前
Elastic AI agent builder 介绍(三)
大数据·人工智能·elasticsearch·搜索引擎·ai·全文检索
zjshuster1 天前
elastic search 学习
学习·elasticsearch·jenkins
Darenm1111 天前
Git介绍
大数据·elasticsearch·搜索引擎
光仔December1 天前
【Elasticsearch入门到落地】18、Elasticsearch实战:Java API详解高亮、排序与分页
java·elasticsearch·es排序·es分页·es高亮
月屯1 天前
es大页读取
大数据·elasticsearch·搜索引擎
努力的小郑2 天前
与产品经理的“模糊”对决:Elasticsearch实现MySQL LIKE '%xxx%' 的奇幻之旅
后端·elasticsearch·搜索引擎
秋已杰爱2 天前
技术准备十五:Elasticsearch
大数据·elasticsearch·搜索引擎
starandsea3 天前
gitlab解决传过大文件后删除导致pack过大问题
大数据·elasticsearch·gitlab