专栏名称: Hugging Face
The AI community building the future.
目录
相关文章推荐
每天学点做饭技巧  ·  袜界绝绝子!你可能没穿过真正的“纯棉袜”!这 ... ·  昨天  
萧山发布  ·  来就对了!萧山让你“鲜掉眉毛”! ·  2 天前  
萧山发布  ·  来就对了!萧山让你“鲜掉眉毛”! ·  2 天前  
日食记  ·  简单又暖胃,打工人天选晚餐。 ·  5 天前  
润农畜牧报价  ·  2025年2月21日 ... ·  4 天前  
51好读  ›  专栏  ›  Hugging Face

社区供稿 | Jina Reranker v2: 多语言支持、函数调用、代码搜索,超快推理!

Hugging Face  · 公众号  ·  · 2024-07-05 10:30

正文

Jina Reranker v2 是专为 Agentic RAG 打造的高性能 Reranker 模型。它不仅支持 100 多种语言的精准搜索和代码检索,更将推理速度提升至前代产品的 6 倍。

作为 Jina AI 的最新力作,Jina Reranker v2 为 RAG 系统开发者带来前所未有的效率和准确性。这款模型具备以下特性:

  • 多语言支持 : 覆盖上百种语言,搜索效果领先 bge-reranker-v2-m3
  • Agentic RAG 增强 : 集成前沿函数调用和 Text-to-SQL 能力,为 Agentic RAG 提供强大支持;
  • 代码检索 : 在代码检索任务上表现尤其亮眼;
  • 超快推理 : 文档处理速度比 bge-reranker-v2-m3 快了足足 15 倍,相比 jina-reranker-v1-base-en 也有 6 倍提升。

立即访问 jina.ai/Reranker ,免费领取百万 token,亲身感受 Jina Reranker v2 的非凡实力。

此外,我们已在 Hugging Face 开源了模型,欢迎访问: https://hf.co/jinaai/jina-reranker-v2-base-multilingual

接下来,我们将深入探讨 Jina Reranker v2 的创新特性,并通过与前沿模型的全面对比,详细阐述其在任务精度和文档处理速度方面的卓越表现及背后的技术原理。

为什么需要 Reranker?

基于 Embeddings 的搜索模型通常采用双编码器架构,文档与查询均转换为 Embedding 存储,检索过程依赖两者 Embedding 的相似度匹配。然而,这种模式偶尔会忽视查询与匹配文档间的 token 级别细粒度语义差异,仅凭 Embedding “感知”彼此,可能导致检索精确度打折 —— 这就是 Reranker 模型介入解决的核心问题

Reranker 模型凭借交叉编码架构,弥补了语义解析的细粒度缺失。它将查询与文档视为统一整体进行编码,以评估相关性得分,而不是单一依赖 Embedding 对比。

研究表明 对于大多数 RAG(增强检索生成)系统,加入 Reranker 模型能显著提升语义匹配精准度,有效抑制信息误导现象

  • 论文地址 https://arxiv.org/pdf/2207.06300

Jina Reranker v2 的多语言支持

过去,Jina Reranker v1 在四大英语基准测试中展现出了顶尖的表现。现在,Jina Reranker v2 强势升级,新增了对超过百种语言的多语言支持,以及处理跨语言任务的强悍本领!

跨语言检索的图示 - 支持各种语言的相关文档

为了评估 Jina Reranker v2 的跨语言和英语语言能力,我们将其性能与以下三个基准测试中的类似 Reranker 模型进行比较:

MKQA : 多语言知识问题和答案

  • 这个数据集包含来自现实世界知识库的 26 种语言的问题和答案,旨在评估问答系统的跨语言性能。

BEIR : 包含多种 IR 评测任务的基准数据集

  • 这个开源存储库包含许多语言的检索基准,我们只关注英语任务,旨在评估神经或词汇检索器的检索准确性。

上图展示了 BEIR 每个 Reranker 的 NDCG@10 分数。结果显示,** jina-reranker-v2-base-multilingual 引入多语言能力并没有削弱其英语检索能力**;相反,在英语检索能力上,相比于之前的 jina-reranker-v1-base-en 版本,有显著提升。

AirBench :RAG 和 NeuralIR 领域的评测标准

  • 我们与智源研究院共同创建并发布了专为 RAG 系统设计的评测榜单  AirBench,包含中英双语的多领域检索数据集。值得一提的是,AirBench 使用了自动生成的 合成数据 ,确保模型无法过度拟合数据集。

在撰写本文时, Jina Reranker v2 在排行榜上超越了其他所有 Reranker 模型,在排行榜上名列第一

如何教会大模型使用工具

自从人工智能热潮兴起以来,人们发现 AI 模型在本应擅长的领域,如数学计算上表现并不尽如人意。例如,在与 Mistral-7b-Instruct-v0.1 的对话中,用户通过聊天界面请求 AI 进行数学计算,但得到的是错误的答案。实际上,203 乘以 7724 等于 1,567,972。

这类错误背后的原因,在于这些模型被训练来生成文本或完成非精确任务,而非数学运算或严谨推理,并且它们缺少处理复杂数学逻辑的内在机制。

Agentic RAG 优化了大语言模型的职能,使之专注于阅读理解与信息的自然语言整合。RAG 并不直接创造答案,而是从广泛资料中搜寻相关资讯,并以流畅自然的形式反馈给大模型。

Agentic RAG 的效果很大程度上取决于其数据来源的丰富度和检索策略的高效性 。面对存于文本数据库中的答案,它会运用多种文本检索技术,筛选出有价值的信息段。

遇到类似 "203 乘以 7724" 的直接计算问题时,传统的数据库就束手无策。这时,借助函数调用就成为了解题途径,它拓展了 Agentic RAG 的功能边界,使其能够触及到 math.js 这样的 REST API。

具体操作上,我们指导大语言模型依据 math.js 的 API 文档,构建出查询请求,如求解“203 与 7724 的乘积”。预期构建的调用链接为 http://api.mathjs.org/v4/?expr=203*7724 ,该请求反馈的 "1.567972e+6",即为最终答案,再由模型转述给用户。

以上例子展示了函数调用如何帮助大型语言模型避免在基础数学问题上出现错误,这也正是 Agentic RAG 框架的优势所在。 通过精确搜索并激活所需的函数和 API 接口,能够准确响应用户的自然语言指令

这需要与传统文本检索的语义理解不同,必须是任务和代码感知的。为此,我们已针对 Jina Reranker v2 进行了特别训练,使其对 SQL 数据库结构和函数调用指令更加敏感,这标志着向更深层次的任务理解与代码辅助迈出了一步。

结构化数据查询

尽管 Embedding 和 Reranker 模型已将非结构化数据作为主要处理目标,但在处理结构化表格数据方面,多数模型仍显不足。Jina Reranker v2 能够辨识查询结构化数据库(例如 MySQL 或 MongoDB)的意图,并依据输入查询为结构化表结构分配适当的相关性评分。

在大型语言模型生成 SQL 查询之前,Reranker 会检索最相关的表格,这一过程的示意图如下所示:

Agentic RAG 使用 SQL 查询检索数据,并作为上下文提供给大模型

我们用 NSText2SQL 数据集基准测试了 Jina Reranker v2 的查询感知能力。从原始数据集的“指令”列提取自然语言指令及其对应的表结构。下图展示了不同 Reranker 模型在自然语言查询中正确排列表结构的成功率,采用 recall@3 指标:

不同 Reranker 模型在 NSText2SQL 数据集上的 Recall@3 分数报告

函数调用更高效

Jina Reranker v2 不局限于处理 SQL 表查询,还能调用外部工具。我们为此在 Jina Reranker v2 中集成了函数调用功能,使之能够理解用户对这些外部函数的意图,并为函数规范赋予相应相关性评分。

以下示意图 (含实例) 展现了大型语言模型如何借助 Reranker 提高函数调用效能,进而改善 Agentic AI 的用户体验:

我们采用 ToolBench 基准测试来评估 Jina Reranker v2 的函数理解能力。该测试包含超过 16,000 个公开 API 及其合成的使用指令。在 recall@3 指标下,Jina Reranker v2 相较其他 Reranker 模型的表现如下:

不同 Reranker 模型在 ToolBench 数据集上的 Recall@3 分数报告

如图所示,Jina Reranker v2 基本达到了最先进的性能水平,并且模型体积减半,速度提升了近 15 倍

代码检索更精准

Jina Reranker v2 经过函数调用及结构化数据的查询训练后,在代码检索能力上,相较于同等规模的模型有所提升。我们通过 CodeSearchNet 基准测试评估其性能,该测试包括 docstring 和自然语言形式的查询,以及与之匹配的代码片段。

在 MRR@10 指标下,Jina Reranker v2 与其它 Reranker 模型的对比情况如下:

超快推理速度

尽管交叉编码的 Reranker 在预测检索文档的相关性上表现出色,但它们在推理速度上往往比 Embeddings 模型慢得多。为解决此问题,我们针对性地对 Jina Reranker v2 进行了优化。

  • 凭借独特的训练方式,Jina Reranker v2 仅用 278M 参数即达到顶尖精确度。相比之下,拥有 567M 参数的 bge-reranker-v2-m3 模型则更为庞大。 模型尺寸的减小是提升吞吐量 (每 50 毫秒处理文档数) 的第一要素

  • 即使与尺寸相近的模型对比,Jina Reranker v2 的速度也是我们之前 Jina Reranker v1 的六倍之多。这一进步归功于 Jina Reranker v2 中 采用的 Flash Attention 2 技术 ,它对基于 Transformer 架构模型中的注意力机制进行了内存和计算效率的优化。

在 RTX 4090 GPU 上,不同 Reranker 模型在每 50 毫秒内检索的文档数的吞吐量性能如下:

Jina Reranker v2 训练策略

  • 第一阶段: 基础训练
    初始阶段,我们用英文数据构建了模型的基础架构,专注于对比学习和三元组(查询、正确回答、错误回答)的训练,以及查询与函数、表结构的匹配训练。

  • 第二阶段: 跨语言能力提升
    随后,我们集成了跨语言数据集,以提升模型处理多语言检索任务的能力。

  • 第三阶段: 全面多语言优化
    我们扩展了训练集,涵盖了 100 多种不同资源水平的语言,以确保模型广泛覆盖多语言数据。

  • 第四阶段: 难负样本微调
    最后,基于第三阶段的性能分析,我们特别针对那些看似相关但实际错误的难负样本进行了模型的微调,以提高重排准确性。

这种分阶段的训练方法确保了模型在早期就对函数和表格架构等用例保持敏感,促使模型更专注于文档的语义内容而非仅仅语言结构。

Jina Reranker v2 的实际应用

通过 Reranker API

使用 Jina Reranker v2 最快捷的方式是通过其 API,无需部署模型,就能轻松提升搜索的相关性和 RAG 的准确性。

示例 1: 对函数调用进行排名

要对最相关的外部函数或工具进行排序,按以下格式组织查询和文档 (函数架构)。

curl -X 'POST' \
  'https://api.jina.ai/v1/rerank' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "jina-reranker-v2-base-multilingual",
  "query": "I am planning a road trip from Berlin to Munich in my Volkswagen VII. Can you calculate the carbon footprint of this trip?",
  "documents": [
    "{'
\''Name'\'': '\''getWeather'\'', '\''Specification'\'': '\''Provides current weather information for a specified city'\'', '\''spec'\'': '\''https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}'\'', '\''example'\'': '\''https://api.openweathermap.org/data/2.5/weather?q=Berlin&appid=YOUR_API_KEY'\''}",
    "{'
\''Name'\'': '\''calculateDistance'\'', '\''Specification'\'': '\''Calculates the driving distance and time between multiple locations'\'', '\''spec'\'': '\''https://maps.googleapis.com/maps/api/distancematrix/json?origins={startCity}&destinations={endCity}&key={API_KEY}'\'', '\''example'\'': '\''https://maps.googleapis.com/maps/api/distancematrix/json?origins=Berlin&destinations=Munich&key=YOUR_API_KEY'\''}",
    "{'
\''Name'\'': '\''calculateCarbonFootprint'\'', '\''Specification'\'': '\''Estimates the carbon footprint for various activities, including transportation'\'', '\''spec'\'': '\''https://www.carboninterface.com/api/v1/estimates'\'', '\''example'\'': '\''{type: vehicle, distance: distance, vehicle_model_id: car}'\''}"
  ]
}'

预期结果如下:

{
  "model""jina-reranker-v2-base-multilingual",
  "usage": {
    "total_tokens"383,
    "prompt_tokens"383
  },
  "results": [
    {
      "index"2,
      "document": {
        "text""{'Name': 'calculateCarbonFootprint', 'Specification': 'Estimates the carbon footprint for various activities, including transportation', 'spec': 'https://www.carboninterface.com/api/v1/estimates', 'example': '{type: vehicle, distance: distance, vehicle_model_id: car}'}"
      },
      "relevance_score"0.5422876477241516
    },
    {
      "index"1,
      "document": {
        "text""{'Name': 'calculateDistance', 'Specification': 'Calculates the driving distance and time between multiple locations', 'spec': 'https://maps.googleapis.com/maps/api/distancematrix/json?origins={startCity}&destinations={endCity}&key={API_KEY}', 'example': 'https://maps.googleapis.com/maps/api/distancematrix/json?origins=Berlin&destinations=Munich&key=YOUR_API_KEY'}"
      },
      "relevance_score"0.23283305764198303
    },
    {
      "index"0,
      "document": {
        "text""{'Name': 'getWeather', 'Specification': 'Provides current weather information for a specified city', 'spec': 'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}', 'example': 'https://api.openweathermap.org/data/2.5/weather?q=Berlin&appid=YOUR_API_KEY'}"
      },
      "relevance_score"0.05033063143491745
    }
  ]
}

示例 2: 对 SQL 查询进行排名

要获取用户查询与数据库表结构的相关性得分,可以使用以下 API 调用示例。

curl -X 'POST' \
  'https://api.jina.ai/v1/rerank' \
  -H 'accept: application/json' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
  -d '{
  "model": "jina-reranker-v2-base-multilingual",
  "query": "which customers bought a summer outfit in the past 7 days?",
  "documents": [
    "CREATE TABLE customer_personal_info (customer_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50));",
    "CREATE TABLE supplier_company_info (supplier_id INT PRIMARY KEY, company_name VARCHAR(100), contact_name VARCHAR(50));",
    "CREATE TABLE transactions (transaction_id INT PRIMARY KEY, customer_id INT, purchase_date DATE, FOREIGN KEY (customer_id) REFERENCES customer_personal_info(customer_id), product_id INT, FOREIGN KEY (product_id) REFERENCES products(product_id));",
    "CREATE TABLE products (product_id INT PRIMARY KEY, product_name VARCHAR(100), season VARCHAR(50), supplier_id INT, FOREIGN KEY (supplier_id) REFERENCES supplier_company_info(supplier_id));"
  ]
}'

预期的响应是:

{
  "model""jina-reranker-v2-base-multilingual",
  "usage": {
    "total_tokens"253,
    "prompt_tokens"253
  },
  "results": [
    {
      "index"2,
      "document": {
        "text""CREATE TABLE transactions (transaction_id INT PRIMARY KEY, customer_id INT, purchase_date DATE, FOREIGN KEY (customer_id) REFERENCES customer_personal_info(customer_id), product_id INT, FOREIGN KEY (product_id) REFERENCES products(product_id));"
      },
      "relevance_score"0.2789437472820282
    },
    {
      "index"0,
      "document": {
        "text""CREATE TABLE customer_personal_info (customer_id INT PRIMARY KEY, first_name VARCHAR(50), last_name VARCHAR(50));"
      },
      "relevance_score"0.06477169692516327
    },
    {
      "index"3,
      "document": {
        "text""CREATE TABLE products (product_id INT PRIMARY KEY, product_name VARCHAR(100), season VARCHAR(50), supplier_id INT, FOREIGN KEY (supplier_id) REFERENCES supplier_company_info(supplier_id));"
      },
      "relevance_score"0.027742892503738403
    },
    {
      "index"1,
      "document": {
        "text""CREATE TABLE supplier_company_info (supplier_id INT PRIMARY KEY, company_name VARCHAR(100), contact_name VARCHAR(50));"
      },
      "relevance_score"0.025516605004668236
    }
  ]
}

通过 RAG/LLM 框架集成

Jina Reranker 与现有的 LLM 和 RAG 编排框架集成,只需使用模型名称即可快速集成。详情请访问各自的文档页面了解如何集成 Jina Reranker v2: jina-reranker-v2-base-multilingual

Haystack by deepset : 在 Haystack 中,可以使用 JinaRanker 类集成 Jina Reranker v2: https://docs.haystack.deepset.ai/docs/jinaranker

from haystack import Document
from haystack_integrations.components.rankers.jina import JinaRanker

docs = [Document(content="Paris"), Document(content="Berlin")]

ranker = JinaRanker(model="jina-reranker-v2-base-multilingual", api_key="")

ranker.run(query="City in France", documents=docs, top_k=1)

LlamaIndex : Jina Reranker v2 可作为 JinaRerank 节点后处理器模块使用。 https://docs.llamaindex.ai/en/stable/examples/node_postprocessor/JinaRerank/

import os
from llama_index.postprocessor.jinaai_rerank import JinaRerank

jina_rerank = JinaRerank(model="jina-reranker-v2-base-multilingual", api_key="", top_n=1)

Langchain : 利用 JinaRerank 模块,在现有应用程序中集成 Jina Reranker 2,需要使用正确的模型名称来初始化 JinaRerank 模块。具体参考: https://python.langchain.com/v0.2/docs/integrations/document_transformers/jina_rerank/







请到「今天看啥」查看全文