前言

大家好啊,我是大家的老朋友北极熊,今天我们来给大家介绍一下国内的reranker。

在信息检索领域,如何高效、准确地对搜索结果进行排序,一直是研究的重点。但是国内外比较出名的reranker模型仍然比较少,国内的话,主要是以智源研究院推出的BGE(BAAI General Embedding)系列模型和博查AI的Semantic Reranker API 最为引人注目。今天我们就将对这两者进行深入探讨,分析其特点,通过示例代码展示如何在实际项目中使用,并对比其排序效果。

一、BGE模型概述

BGE是由北京智源人工智能研究院开发的通用语义向量模型,旨在提升中英文语义检索的精度和整体语义表征能力。自2023年发布以来,BGE经历了多个版本的迭代,包括BGE v1.0、v1.5以及多语言支持的BGE-M3等。最新版本BGE Re-Ranker v2.0在多个主流基准测试中取得了领先成绩,支持更多语言和更长的文本长度,并引入了“文本+图片”混合检索能力 (hub.baai.ac.cn)。

BGE模型的主要特点包括:

  • 高精度的语义匹配:通过深度学习技术,BGE能够捕捉文本之间的深层语义关系,提升检索结果的相关性。
  • 多模态支持:最新版本支持文本与图片的混合检索,拓宽了应用场景。
  • 开源可商用:BGE模型以开源方式发布,开发者可以根据需要自行部署和调整。

BGE的基本使用示例

使用sentence-transformers库可以快速加载BGE模型,并计算文本相似度。

from sentence_transformers import SentenceTransformer, util
import time
begin = time.time() 
# 加载BGE模型
model = SentenceTransformer("BAAI/bge-reranker-large")

# 定义查询和候选文档
query = "人工智能的发展趋势"
documents = [
    "人工智能在医疗领域的应用",
    "最新的人工智能研究成果",
    "人工智能与机器学习的区别",
    "未来人工智能的发展方向"
]

# 计算嵌入向量
query_embedding = model.encode(query, convert_to_tensor=True)
doc_embeddings = model.encode(documents, convert_to_tensor=True)

# 计算相似度
scores = util.pytorch_cos_sim(query_embedding, doc_embeddings)[0]

# 按相似度排序
doc_scores = sorted(zip(documents, scores.tolist()), key=lambda x: x[1], reverse=True)

# 输出排序结果
for idx, (doc, score) in enumerate(doc_scores, 1):
    print(f"{idx}. 相关性得分: {score:.4f}, 文档: {doc}")

end = time.time()
print(f"BGE模型用时为{(end - begin)}s")

二、博查Rerank API概述

博查AI推出的 Semantic Reranker API 是一种基于文本语义的排序模型,旨在提升搜索应用和RAG(Retrieval-Augmented Generation)应用中的搜索结果准确性。该API通过深层语义匹配,对初步检索得到的文档进行重新排序,确保最相关的内容呈现在前列 (open.bochaai.com)。

博查Rerank API的主要特点包括:

  • 即插即用:开发者无需训练模型,只需通过API调用即可实现高效的语义重排序。
  • 高效性:API响应速度快,适合实时应用场景。
  • 灵活性:支持多种参数配置,满足不同应用需求。

博查Rerank API的使用示例

import requests
import json

# 设置API密钥和端点
API_KEY = "your_api_key_here"
API_URL = "https://api.bochaai.com/v1/rerank"

# 定义查询和待排序文档
data = {
    "query": "人工智能的发展趋势",
    "documents": [
        "人工智能在医疗领域的应用",
        "最新的人工智能研究成果",
        "人工智能与机器学习的区别",
        "未来人工智能的发展方向"
    ],
    "model": "gte-rerank",
    "top_n": 3,
    "return_documents": True
}

headers = {
    "Authorization": f"Bearer {API_KEY}",
    "Content-Type": "application/json"
}

response = requests.post(API_URL, headers=headers, json=data)

if response.status_code == 200:
    results = response.json()["data"]["results"]
    for idx, item in enumerate(results, 1):
        print(f"{idx}. 相关性得分: {item['relevance_score']:.4f}, 文档: {item['document']['text']}")
else:
    print(f"请求失败: {response.status_code}, {response.text}")

三、BGE与博查Rerank API的排序效果对比

我们分别使用BGE模型和博查Rerank API对相同的文本进行重排序,并对比它们的排序结果。

3.1 排序结果对比

提问的query:人工智能的发展趋势

BGE模型

在这里插入图片描述

博查AI推出的 Semantic Reranker API

在这里插入图片描述

3.2 结果分析

从结果来看,首先是排序结果,我们通过直觉对比,博查 Semantic Reranker API 的排序结果似乎更符合我们的预期,

然后从时间成本上来看,博查 Semantic Reranker API 只用了 0.5 秒就完成了排序,BGE模型却花了 5.3 秒,这还不提最开始加载模型时,还需要先下载2.4G的模型。

当然了,BGE模型的运行速度是取决于你使用的机器的,可能我使用的是CPU,所以比较慢,同时 BGE模型 在语义匹配方面的能力也是不容忽视的,更加适合用于离线任务和自定义检索系统。

不过他们的主要区别在于,

  • BGE是开源模型,我们在使用时需要在自己的机器上运行,需要维护服务器;
  • 博查的Semantic Reranker API是提供API服务,我们在使用时只需要几行代码即可添加使用,省时省力。

总结

BGE模型和博查Rerank API各有优势,BGE适用于定制化需求,博查Rerank API则适合快速集成。开发者可根据项目需求选择最适合的方案。

当然,我们不可否认的是,两者都是国内做的非常出色的模型。未来,我们期待还会有更加智能的重排序技术,进一步提升信息检索的效率和准确性。

🔗 系列文章推荐:

【搜索引擎不想告诉你的事(一):你的搜索姿势可能全错了】

【搜索引擎不想告诉你的事(二):你看到的内容只是他们想让你看到的!】

【搜索引擎不想告诉你的事(三):SEO与搜索引擎的相爱相杀】

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐