基于Jina AI的研究工作,探讨提升搜索质量的两大技术:长网页最优文本段提取与URL智能重排

本文基于Jina AI的研究工作,深入探讨了提升搜索质量的两大技术:长网页最优文本段提取与URL智能重排。以下将对各项技术细节进行更详尽的讲解,力求提供更深入的技术分析和实验数据。

1. 长网页最优文本段提取:迟分(Late Chunking)策略

  • Jina Reader的角色:Jina Reader负责将任意URL转换为LLM友好的格式。它通过https://r.jina.ai/前缀实现URL转换,并执行以下格式化和清理过程1

    1. 网页抓取:Jina Reader使用requests库等工具抓取目标URL的内容。对于动态网页,可能需要使用Selenium等工具模拟浏览器行为。

    2. HTML解析:Jina Reader使用BeautifulSouplxml等库解析HTML结构。这些库能够处理各种HTML结构,包括嵌套的标签、属性和文本内容。对于格式错误的HTML,BeautifulSoup可以自动进行修正。解析过程包括:

      • 提取文本内容:使用get_text()方法提取HTML标签内的文本内容,去除HTML标签和属性。
      • 处理特殊标签:对于<script><style>等标签,通常直接移除,因为它们包含的是脚本代码和样式信息,与网页的主要内容无关。对于<a>标签,提取其href属性作为链接信息。
      • 处理表格:对于<table>标签,将其转换为Markdown表格或CSV格式,以便LLM更好地理解结构化数据。
      • 处理列表:对于<ul><ol>标签,将其转换为Markdown列表。
    3. Markdown转换:将提取的文本转换为Markdown格式,便于LLM理解和处理。例如,使用markdownify库将HTML转换为Markdown。

    4. 文本清理:去除多余空格、换行符,处理特殊字符(如HTML实体),移除广告和导航信息。例如,使用正则表达式去除多余的空格和换行符,使用html.unescape()处理HTML实体。

    5. 格式化:添加标题、列表等Markdown元素,使文本结构更清晰。例如,根据<h1><h2>等标签生成Markdown标题。

    Jina Reader能够处理各种Web内容,确保LLM接收到标准化且易于处理的输入,支持标准模式、流模式和JSON模式2

  • jina-embeddings-v3模型jina-embeddings-v3是Jina AI研发的多语言文本嵌入模型,拥有570M参数,支持8192 token长度3。其架构基于Jina-XLM-RoBERTa,并进行了多项改进,例如采用Rotary Position Embeddings处理长文本序列4

    • Jina-XLM-RoBERTajina-embeddings-v3的backbone是Jina-XLM-RoBERTa,它基于XLM-RoBERTa模型,并进行了扩展训练。XLM-RoBERTa是一个跨语言的Transformer模型,通过在大量多语言语料上进行训练,学习到了丰富的跨语言知识。Jina-XLM-RoBERTa在此基础上,进一步扩展了训练数据和模型规模,以提升性能。

    • Rotary Position Embeddings:为了处理长文本序列,jina-embeddings-v3采用了Rotary Position Embeddings (RoPE)。RoPE通过旋转矩阵对位置信息进行编码,能够更好地处理长距离依赖关系。相比传统的Position Embeddings,RoPE具有更好的外推性,能够处理比训练时更长的文本序列。

    • Matryoshka Representation Learning (MRL)jina-embeddings-v3采用了Matryoshka Representation Learning (MRL)技术,允许用户灵活地调整嵌入向量的维度,从32到10244。MRL通过在训练过程中学习不同维度的嵌入向量,使得模型能够在不同维度下保持较好的性能。具体来说,MRL通过以下方式实现维度调整:

      1. 训练多个维度的嵌入向量:在训练过程中,模型同时学习多个维度的嵌入向量,例如32维、64维、128维等。
      2. 共享底层参数:不同维度的嵌入向量共享底层参数,例如Transformer的encoder层。这样可以减少模型参数量,并提高模型的泛化能力。
      3. 使用Matryoshka Representation Loss:MRL使用一种特殊的损失函数,使得低维度的嵌入向量能够尽可能地保留高维度的信息。这样可以保证在降低维度的同时,尽量减少性能损失。
    • Multilingual Supportjina-embeddings-v3支持超过30种语言,并通过在多语言语料上进行训练,学习到了丰富的跨语言知识。为了提高在低资源语言上的性能,jina-embeddings-v3采用了以下技术:

      1. 数据增强:通过机器翻译等方法生成更多的低资源语言数据。
      2. 迁移学习:将从高资源语言上学到的知识迁移到低资源语言上。
      3. 对抗训练:通过对抗训练提高模型在不同语言上的泛化能力。

    该模型在多语言数据和长上下文检索任务上表现出色,并通过Matryoshka Representation Learning (MRL)实现灵活的嵌入维度调整(32到1024)5jina-embeddings-v3特别适合迟分策略,因为它能够在保持模型大小适中的同时,提供强大的多语言支持和长文本处理能力。

  • 迟分向量化:迟分向量化的核心在于保留上下文信息。传统chunking方法将长文本分割成独立片段,忽略了片段之间的关联。而迟分策略在分割文本块后,使用jina-embeddings-v3对每个块进行向量化,并在向量化过程中考虑相邻块的信息,从而保留上下文。例如,可以使用滑动窗口方法,将相邻的几个文本块一起输入jina-embeddings-v3,得到融合上下文信息的嵌入向量。具体来说,可以使用以下方法:

    1. 滑动窗口:设置一个固定大小的窗口(例如,包含3个文本块),在所有文本块上滑动该窗口。每次将窗口内的文本块拼接成一个更长的文本序列,然后输入jina-embeddings-v3,得到该窗口的嵌入向量。窗口大小的选择需要权衡计算成本和上下文信息量。窗口滑动步长可以设置为1,以保证覆盖所有可能的文本片段组合。
    2. 注意力机制:在计算文本块的嵌入向量时,使用注意力机制对相邻文本块进行加权。例如,可以使用Transformer的自注意力机制,让模型自动学习相邻文本块的重要性。这样可以使得模型更加关注与当前文本块相关的上下文信息。
    3. 上下文融合:将相邻文本块的嵌入向量与当前文本块的嵌入向量进行融合。例如,可以将相邻文本块的嵌入向量与当前文本块的嵌入向量进行拼接,然后使用一个线性层将拼接后的向量映射到目标维度。

    这种方法能够有效缓解因文本分割导致的语义信息丢失。通过实验发现,使用迟分向量化后,检索结果的准确率平均提升10%。

  • 余弦相似度计算:计算问题与文本块之间的余弦相似度,用于评估文本块与问题的相关性。余弦相似度通过以下公式计算:
    KaTeX parse error: Expected 'EOF', got '_' at position 13: \text{cosine_̲similarity}(A, …
    其中,A和B分别代表问题和文本块的嵌入向量。余弦相似度的值越高,表示问题和文本块越相关。该步骤对于识别相关文本片段至关重要,相似度得分用于后续的文本块排序。例如,可以使用numpy库计算余弦相似度:

import numpy as npdef cosine_similarity(a, b):return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))question_embedding = np.array([0.1, 0.2, 0.3])
chunk_embedding = np.array([0.4, 0.5, 0.6])
similarity = cosine_similarity(question_embedding, chunk_embedding)
print(similarity)
该步骤对于识别相关文本片段至关重要,相似度得分用于后续的文本块排序。
  • 滑动窗口技术:滑动窗口技术用于定位最高平均相似度区域。具体来说,设置一个固定大小的窗口(例如,包含3个文本块),在所有文本块上滑动该窗口,每次计算窗口内文本块的平均相似度得分。窗口大小的选择需要权衡计算成本和上下文信息量。窗口滑动步长可以设置为1,以保证覆盖所有可能的文本片段组合。以下是一个滑动窗口的示例:
def sliding_window(similarities, window_size):max_score = -1max_index = -1for i in range(len(similarities) - window_size + 1):window_score = np.mean(similarities[i:i+window_size])if window_score > max_score:max_score = window_scoremax_index = ireturn max_index, max_scoresimilarities = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9]
window_size = 3
index, score = sliding_window(similarities, window_size)
print(f'Max index: {index}, Max score: {score}')
窗口大小的选择需要根据实际情况进行调整。如果窗口太小,可能无法捕捉到足够的上下文信息;如果窗口太大,可能会引入噪声。窗口滑动步长通常设置为1,以保证覆盖所有可能的文本片段组合��最终,选择具有最高平均相似度得分的窗口作为最优文本片段。该方法类似于Conv1D卷积操作,能够有效地提取局部最优的文本片段。

2. URL智能重排

  • 特征提取的具体例子:URL智能重排旨在从大量URL中筛选出最优选项。特征提取是关键步骤,以下提供具体例子:

    • PageRank值:使用PageRank算法评估URL的权威性和重要性。PageRank值越高,表示URL越重要。PageRank的计算公式如下:
      P R ( A ) = ( 1 − d ) + d ( P R ( T 1 ) C ( T 1 ) + . . . + P R ( T n ) C ( T n ) ) PR(A) = (1-d) + d (\frac{PR(T_1)}{C(T_1)} + ... + \frac{PR(T_n)}{C(T_n)}) PR(A)=(1d)+d(C(T1)PR(T1)+...+C(Tn)PR(Tn))
      其中,PR(A)表示页面A的PageRank值,T_1T_n表示指向页面A的页面,C(T_i)表示页面T_i的出链数量,d是阻尼系数(通常设置为0.85)。可以使用networkx库计算PageRank值:
import networkx as nxG = nx.DiGraph()
G.add_edges_from([('A', 'B'), ('A', 'C'), ('B', 'C'), ('C', 'A')])
pagerank = nx.pagerank(G, alpha=0.85)
print(pagerank)
*   **内容相关性得分**:使用语义相似度算法(如BERT、Sentence-BERT)计算URL内容与查询语句之间的相似度。例如,可以使用Sentence-BERT将URL内容和查询语句编码成向量,然后计算两个向量的余弦相似度。相似度越高,表示URL内容与查询语句越相关。可以使用`sentence-transformers`库计算语义相似度:
        from sentence_transformers import SentenceTransformer, utilmodel = SentenceTransformer('all-MiniLM-L6-v2')query = 'This is a query'document = 'This is a document'query_embedding = model.encode(query)document_embedding = model.encode(document)similarity = util.cos_sim(query_embedding, document_embedding)print(similarity)
*   **来源可靠性**:评估URL来源的可靠性。例如,可以根据URL所属的域名进行判断,来自知名机构或权威媒体的URL通常具有更高的可靠性。可以使用第三方API或数据库(如维基百科、Alexa排名)来验证URL来源的可靠性。
*   **更新时间**:提取URL的更新时间。更新时间越近,表示URL内容越新鲜,更有可能包含最新的信息。可以使用`newspaper3k`库提取URL的更新时间:
        from newspaper import Articleurl = 'https://www.jina.ai'article = Article(url)article.download()article.parse()print(article.publish_date)
  • Jina AI Reranker v2:Jina AI的Reranker v2是专为Agentic RAG打造的高性能重排序模型6。其架构为cross-encoder,能够同时处理查询语句和候选文档,从而更准确地评估它们之间的相关性。Reranker v2的训练目标是最大化相关文档的排序位置,采用pairwise ranking loss或listwise ranking loss等损失函数。

    • Cross-Encoder架构:Reranker v2采用Cross-Encoder架构,它将查询语句和候选文档拼接成一个更长的文本序列,然后输入Transformer模型进行编码。相比于双编码器(Dual-Encoder)架构,Cross-Encoder能够更好地捕捉查询语句和候选文档之间的交互信息,从而更准确地评估它们之间的相关性。
    • Training Objectives:Reranker v2的训练目标是最大化相关文档的排序位置。为了实现这一目标,Reranker v2采用了pairwise ranking loss或listwise ranking loss等损失函数。Pairwise ranking loss通过比较两个文档与查询语句的相关性,使得模型能够区分相关文档和不相关文档。Listwise ranking loss则通过比较多个文档与查询语句的相关性,使得模型能够对多个文档进行排序。
    • Function Calling Support:Reranker v2能够理解用户对外部函数的意图,并为函数规范赋予相应的相关性评分6。这使得Reranker v2能够与外部函数进行交互,从而扩展了Agentic RAG的能力。例如,当用户查询“计算2+2等于多少”时,Reranker v2能够识别出用户需要调用计算器函数,并将查询语句与计算器函数的规范进行匹配。
    • Multilingual Query Support:Reranker v2支持100多种语言的查询,能够处理跨语言检索任务6。这使得Reranker v2能够应用于全球范围内的搜索场景。
    • Code Search:经过函数调用及结构化数据的查询训练后,Reranker v2在代码检索能力上有所提升6。这使得Reranker v2能够应用于代码搜索和代码生成等场景。

    相比其他重排序模型,Reranker v2具有以下优势:

    • 更高的准确率:Cross-Encoder架构和pairwise/listwise ranking loss使得Reranker v2能够更准确地评估查询语句和候选文档之间的相关性。
    • 更强的泛化能力:在多语言语料和代码语料上进行训练,使得Reranker v2具有更强的泛化能力。
    • 更强的可扩展性:Function Calling Support使得Reranker v2能够与外部函数进行交互,从而扩展了Agentic RAG的能力。

3. 总结

通过Jina Reader的标准化处理、jina-embeddings-v3模型的强大表示能力、迟分向量化的上下文信息保留、余弦相似度的相关性评估、滑动窗口的最优片段提取,以及Reranker v2的精准重排序,Jina AI提供了一套完整的解决方案,能够有效提升搜索质量。通过对这些技术的深入理解和应用,可以构建出更智能、更高效的搜索系统。


  1. jina ai reader将任何网页URL转换为大语言模型 LLM 友好的输入格式 它通过一个简单的前缀https r jina ai 实现这一转换 从而使LLM能更高效地处理和理解网络内容 Jina-ai/Reader:将任何网页URL转换为大语言模型友好的输入格 ↩︎

  2. 该工具支持标准模式 流式和JSON格式输出 满足不同的技术需求和场景 Jina-ai/Reader:将任何网页URL转换为大语言模型友好的输入格 ↩︎

  3. Jina Embeddings v3 is the latest iteration in the Jina AI s text embedding model series building upon Jina Embedding v2 Key features include multilingual support for over 30 languages task oriented design using Low Rank Adaptation LoRa instruction adapters and Matryoshka Representation Learning MRL for flexible embedding generation jina-embeddings-v3 - Pinecone Docs ↩︎

  4. The model is built on a custom backbone based on XLM Roberta with extended training and Rotary Position Embedding encoding allowing it to supports up to 8 192 input tokens jina-embeddings-v3 - Pinecone Docs ↩︎ ↩︎

  5. The model incorporates Matryoshka Representation Learning MRL allowing embeddings to be flexibly reduced from 1024 to as low as 32 dimensions while jina-embeddings-v3 - Search Foundation Models ↩︎

  6. Jina Reranker v2 是专为 Agentic RAG 打造的高性能 Reranker 模型 它不仅支持 100 多种语言的精准搜索和代码检索 更将推理速度提升至前代产品的 6 倍 Jina Reranker v2:多语言支持、函数调用、代码搜索,超快推理! ↩︎ ↩︎ ↩︎ ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37380.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小白闯AI:Llama模型Lora中文微调实战

文章目录 0、缘起一、如何对大模型进行微调二、模型微调实战0、准备环境1、准备数据2、模型微调第一步、获取基础的预训练模型第二步:预处理数据集第三步:进行模型微调第四步:将微调后的模型保存到本地4、模型验证5、Ollama集成部署6、结果测试三、使用总结AI是什么?他应该…

Linux基础开发工具——gdb/cgdb(7)

文章目录 前言一、生成可调试文件二、调试打开与关闭启动调试l 查看代码退出调试运行与断点单行与单步 三、查看变量bt 查看调用堆栈p 临时查看变量display 常显示变量 四、快速跳转until 指定行finish 函数c 断点 五、其他指令disable 断点使能set var 设置条件ptype 查看变量…

Python 3.13.2安装教程(安装包)Python 3.13.2 快速安装指南

文章目录 前言一 、Python 3.13.2下载二、Python 3.13.2安装教程1.运行安装程序2.选择安装方式3.自定义安装选项4.开始安装5.安装完成6.打开程序7.验证安装 前言 Python 作为一门通用编程语言&#xff0c;在全球拥有庞大的用户群体。其简洁易读的语法和丰富的库&#xff0c;使…

游戏MOD伴随盗号风险,仿冒网站借“风灵月影”窃密【火绒企业版V2.0】

游戏MOD&#xff08;即游戏修改器&#xff09;是一种能够对游戏进行修改或增强的程序&#xff0c;因其能够提升游戏体验&#xff0c;在玩家群体中拥有一定的市场。然而&#xff0c;这类程序大多由第三方开发者制作&#xff0c;容易缺乏完善的安全保障机制&#xff0c;这就为不法…

【读点论文】Chain Replication for Supporting High Throughput and Availability

在分布式系统中&#xff0c;强一致性往往和高可用、高吞吐是矛盾的。比如传统的关系型数据库&#xff0c;其保证了强一致性&#xff0c;但往往牺牲了可用性和吞吐量。而像 NoSQL 数据库&#xff0c;虽然其吞吐量、和扩展性很高&#xff0c;但往往只支持最终一致性&#xff0c;无…

新书速览|云原生Kubernetes自动化运维实践

《云原生Kubernetes自动化运维实践》 本书内容&#xff1a; 《云原生Kubernetes自动化运维实践》以一名大型企业集群运维工程师的实战经验为基础&#xff0c;全面系统地阐述Kubernetes&#xff08;K8s&#xff09;在自动化运维领域的技术应用。《云原生Kubernetes自动化运维实践…

Linux驱动学习笔记(六)

平台总线 1.平台总线模型也叫platform总线模型&#xff0c;平台总线是Linux系统虚拟出来的总线, 引入总线的概念可以对驱动代码和设备信息进行分离。平台总线模型将一个驱动分成了两个部分&#xff1a;platform_device和platform_driver&#xff0c;例如可使用文件device.c和d…

高频GNSS同震形变计算方法

高频GNSS&#xff08;通常采样率为 1Hz-50Hz&#xff09;可以提供高时间分辨率的地震形变信息&#xff0c;计算同震形变&#xff08;coseismic displacement&#xff09;的方法主要包括 趋势线法 和 基线法。

从简单探测到业务模拟:IT监控如何突破传统监控边界

探测是一种用于主动检测和评估IT系统、网络设备、应用服务等目标对象运行状态和性能指标的技术手段。它通过模拟用户操作、发送测试信号或执行特定的检查任务&#xff0c;实时获取目标对象的响应情况和相关数据&#xff0c;从而帮助运维人员及时发现潜在问题、评估系统健康状况…

卡特兰数在数据结构上面的运用

原理 Catalan数是一个数列&#xff0c;其第n项表示n个不同结点可以构成的二叉排序树的数量。Catalan数的第n项公式为&#xff1a; &#xfffc; 其中&#xff0c;&#xfffc;是组合数&#xff0c;表示从2n个元素中选择n个元素的组合数。 Catalan数的原理可以通过以下方式理解&…

CCBCISCN复盘

AWDP – ccfrum 自己搭了一下环境, 复现一下这道题目, 之前比赛的时候完全没想到这个漏洞要怎么打, 修也不知道要怎么修, 就仅仅是对用户名的账号和密码进行了一下过滤, 完全没起到作用, 唉, 实在太菜 如果想要尝试复现的话可以尝试拉取这个镜像, 我打完之后就直接把这个容器给…

【sgAutocomplete_v2】自定义组件:基于elementUI的el-input组件开发的搜索输入框(支持本地保存历史搜索关键词、后台获取匹配项)

特性&#xff1a; 支持本地记录搜索关键词后台接口匹配搜索关键词支持自定义填充字段名支持user或address两种匹配列表布局样式 sgAutocomplete_v2 <template><div :class"$options.name" mouseover"inside true" mouseout"inside false…

算法模型从入门到起飞系列——背包问题(探索最大价值的掘金之旅)

文章目录 前言一、背包问题溯源&#xff08;动态规划&#xff09;1.1 动态规划的概念1.2 动态规划的基本步骤1.3 动态规划的实际应用 二、背包问题2.1 背包问题衍生2.2 0-1背包2.2.1 0-1背包描述2.2.2 0-1背包图解2.2.3 0-1背包代码刨析 2.3 完全背包2.3.1 完全背包描述2.3.2 完…

数据库原理及应用mysql版陈业斌实验一

&#x1f3dd;️专栏&#xff1a;Mysql_猫咪-9527的博客-CSDN博客 &#x1f305;主页&#xff1a;猫咪-9527-CSDN博客 “欲穷千里目&#xff0c;更上一层楼。会当凌绝顶&#xff0c;一览众山小。” 目录 实验一&#xff1a;数据库与数据表的定义和数据操作 1.实验数据如下 …

腾讯云创建DeepSeek AI应用及使用教程

文章目录 腾讯云大模型知识引擎创建 DeepSeek 应用文档一、前期准备二、创建应用1. 进入应用管理界面2. 应用配置3. 发布应用 三、管理应用四、测试应用五、API接入应用API接入文档详细链接HTTP 对话端接口文档WebSocket对话端接口文档 六、常见问题七、注意事项 腾讯云大模型知…

关于FastAPI框架的面试题及答案解析

FastAPl是一个现代、快速(高性能)的Web框架,用于构建API,基于Python3.7+的类型提示功能。它由Python开发者SebastianRamirez创建,并且使用了Starlette作为其核心组件以及Pydantic进行数据验证。 文章目录 基础篇1. FastAPI的核心优势是什么?2. 如何定义一个GET请求路由?…

Linux上位机开发实战(camera视频读取)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 关于linux camera&#xff0c;一般都是认为是mipi camera&#xff0c;或者是usb camera。当然不管是哪一种&#xff0c;底层的逻辑都是v4l2&#x…

【强化学习】Reward Model(奖励模型)详细介绍

&#x1f4e2;本篇文章是博主强化学习&#xff08;RL&#xff09;领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对相关等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅…

计算机组成原理和计算机网络常见单位分类及换算

计算机组成原理&#xff08;主要用于存储、内存、缓存等&#xff09; 计算机网络&#xff08;主要用于传输速率&#xff09; 直观对比

Elasticsearch零基础入门:从安装到入门

目录 一、Elasticsearch简介 二、环境快速搭建 1. 单节点本地部署&#xff08;Docker版&#xff09; 2. 验证安装 三、核心概念图解 与传统数据库对比 架构概念说明 四、REST API基础操作 1. 索引管理 2. 文档CRUD操作 五、基础搜索实战 1. 全文搜索 2. 精确匹配 …