如何使用Cohere API调用BM25算法搜索维基百科数据库?

1个回答

写回答

ChloeChy

2026-02-17 20:00

+ 关注

Spotify
Spotify

许多知名应用如SpotifyYouTubeGoogle Maps等都依赖关键词搜索算法来完成用户查询任务。作为构建搜索系统的核心方法之一,关键词搜索的典型代表是Okapi BM25(简称BM25)。在信息检索领域,Okapi BM25是一种用于评估文档与特定搜索查询相关性的排名函数。其中,BM代表最佳匹配(Best Matching)。该算法基于概率检索框架,由Stephen E. Robertson、Karen Sp?rck Jones等人在20世纪70至80年代开发。BM25通过综合考虑词频、逆文档频率以及文档长度等因素,能够更精准地对搜索结果进行排序。本文将引导大家利用Cohere提供的API,调用BM25算法实现对维基百科数据库的高效搜索。这一方法不仅操作便捷,而且能显著提升搜索结果的相关性和准确性。我们需要安装以下Python包:下面简要说明,Cohere是一家专注于大模型应用开发的公司,Weaviate则是开源的向量数据库。本次实验将用到weaviate-client包。随后,我们要导入一些基础配置信息,主要包括Cohere与Weaviate相关的api_key内容,这是后续操作的重要凭据。请确保正确设置以顺利完成实验。接下来,我们创建一个 Weaviate 客户端,用于连接在线数据库,实现数据交互功能。需要特别说明的是,Weaviate 是一款开源的向量数据库。它不仅支持关键词搜索,还结合了基于大语言模型(LLM)的向量搜索功能。这里使用的 API key 是公开的,作为公共 Demo 的一部分,您可以通过一个 URL 地址访问在线 Demo 数据库。此外,这个数据库是公开且共享的,其中包含来自维基百科的 1000 万条数据记录。每一条记录对应维基百科文章中的一个段落。这 1000 万条数据涵盖了 10 种不同语言的内容,每种语言有 100 万条记录。例如,其中 100 万条为英语数据,其余 900 万条分别对应其他 9 种语言的数据。在查询时,您可以指定所需的语言类型。这些语言包括:英文(en)、德文(de)、法文(fr)、西班牙文(es)、意大利文(it)、日文(ja)、阿拉伯文(ar)、中文(zh)、韩文(ko)和印地文(hi)。通过这种方式,您可以轻松实现多语言内容的检索与分析。二、有关API KEY的说明这里需要设置三个配置参数:COHERE_API_KEY、WEAVIATE_API_KEY 和 WEAVIATE_API_URL。对于 COHERE_API_KEY,您需要前往 cohere 官网注册账号,并创建属于自己的 API 密钥。而 WEAVIATE_API_KEY 和 WEAVIATE_API_URL,则可以直接使用官方公开提供的 API 密钥和访问地址,无需额外申请。这些参数是系统运行所必需的,请确保正确配置。关键词搜索的基本原理是,通过对比问题与文档中相同词汇的数量,确定与问题相关性最高的文档,所示。

在下图中,Query代表用户提出的问题,Responses则是针对问题检索出的答案。Number of words in common表示Query与Responses中共有的单词数量。例如,问题为what color is the grass? 检索结果中,The grass is green 与问题重复的单词最多,因此该结果被判定为最佳答案。这种匹配方式通过统计共同单词的数量来衡量相关性,从而确定最符合问题的回答。这种方法简单直观,适用于初步筛选答案的场景。接下来,我们定义一个关键词搜索函数:定义keyword_search函数时,设置了四个参数如下:该在线数据库包含10种语言的数据,分别是英文(en)、德文(de)、法文(fr)、西班牙文(es)、意大利文(it)、日文(ja)、阿拉伯文(ar)、中文(zh)、韩文(ko)和印地文(hi)。查询时可选择不同语言进行操作。此外,函数中设置了BM25算法(with_bm25)以支持关键词搜索。接下来,我们将使用默认的英文进行关键词搜索示例。

为使结果清晰,避免混乱,可定义一个整理函数来处理上述多项结果。

YouTube
YouTube

这里关键词搜索函数返回了3条含Donald Trump的文档。接下来,我们尝试用中文搜索:

下面对这个关键词搜索系统的基本原理进行说明。该系统主要由查询和搜索系统两部分构成。其中,搜索系统能够调用预先处理好的文档数据,以回应查询请求。最终,系统会生成一个按照与问题相关性排序的文档列表,展示的内容。

搜索引擎的内部构造搜索系统内部主要分为两个工作阶段。第一阶段是检索阶段,通常利用 BM25 算法,结合倒排索引的思想,对文档集合中的文档与查询问题进行匹配评分。第二阶段为重新排序阶段(re-ranking),该阶段会对第一阶段产生的评分结果进一步优化排序,并最终输出排序后的结果,展示的流程所示。这两个阶段共同确保了搜索结果的相关性和准确性。

从上图可以看出,倒排表包含两列:第一列为关键词,第二列为该关键词所在文档的ID。构建倒排表的主要目的是优化搜索速度。当用户在搜索引擎中输入查询内容时,系统能够在几毫秒内返回结果。在执行搜索任务时,关键词对应文档ID的出现频率是评分的重要参考。例如,在上图中,Color和Sky均出现在804号文档中,因此804文档被命中的次数较多,评分会更高,最终在检索结果中的排名也会更靠前。这种机制确保了相关性更高的文档优先展示给用户。关键词检索并非依据语义,而是通过问题与文档中重复单词的数量进行匹配。这就导致一个难题:如果文档和问题在语义上相关,但没有共同的单词,关键词检索就无法找到相关文档,如下面的例子所示。

当文档和问题语义相关但无重复词汇时,关键词检索会失效,无法找到相关文档。这时需要借助语言模型通过语义识别进行检索。接下来,我们将利用语言模型优化关键词搜索的两个阶段,具体所示。

举报有用(0分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号