当前位置: 首页 > backend >正文

开源!RAG竞技场(3):语义分割的RAG(Semantic Chunking RAG)

本项目已开源:

地址:https://github.com/ZehaoJia1024/RAG-Arena

⭐项目包含多种RAG算法的讲解、从零实现、以及评估。
⭐相关算法正在持续更新中…


🏆当前评分:

算法名称简介最终得分 (满分5)
RAG最基础的 RAG 实现,作为后续所有优化的基准。3.47
Semantic Chunking RAG语义分割的RAG3.43

Semantic Chunking RAG

本notebook旨在演示如何通过 语义分割(Semantic Chunking) 技术来优化检索增强生成(RAG)流程。

传统分割方法的局限性

传统的文本分割方法,如固定大小分割,常常会粗暴地切断句子或语义完整的段落,导致上下文信息丢失,从而影响检索的准确性和最终答案的质量。

为什么使用语义分割?

语义分割是一种更智能的文本分块策略。它不依赖于固定的字符数,而是通过分析句子之间的语义相似度来决定分割点。当相邻句子之间的语义差异较大时,意味着一个主题可能已经结束,新的主题即将开始,这便是一个理想的分割点。

Semantic Chunking RAG流程

在这里插入图片描述
在这里插入图片描述

简单来说,Semantic Chunking的过程,就是判断两个相邻句子之间是否存在语义关联,而语义关联是通过嵌入向量的相似度判断的。

Semantic Chunking的核心思路就是:

若相邻句子的嵌入向量相似度更高,那么就认为这两句话在讲同一件事情,它们应当处在同一个文本块中。

import regex as re
import numpy as np
from rag_evaluate import Embedder, LLMJudge, load_data, ReplyModel
import warnings
import torch
warnings.filterwarnings('ignore')  # 忽略所有的警告

加载评估的相关数据。

documents, QA = load_data(data_dir='data')

定义语义分割(Semantic Chunking)函数

这是我们流程的核心。semantic_chunk_documents 函数实现了将长文档智能地分割成语义连贯的文本块的逻辑。其工作流程如下:

  1. 分割成句子: 使用正则表达式将整篇文档分割成独立的句子。这是语义分析的基本单位。
  2. 生成句子嵌入: 调用 embedder 将每个句子转换成一个高维向量。这个向量代表了句子的语义信息。
  3. 计算相邻距离: 遍历所有相邻的句子对,计算它们嵌入向量之间的余弦距离(1 - 余弦相似度)。距离越大,表示两个句子的语义差异越大。
  4. 确定分割阈值: 我们不使用固定的距离阈值,而是计算所有相邻距离的百分位数(例如95%)。这意味着只有当两个句子的语义差异大于数据集中95%的句子对时,我们才认为这里应该是一个分割点。这种自适应的阈值比硬编码更鲁棒。
  5. 执行分割: 再次遍历句子,如果一个句子与其后继者的距离超过了我们计算出的阈值,我们就在此处创建一个新的文本块(Chunk)。否则,将后继句子加入到当前块中。
  6. 整合与清理: 将所有生成的块汇总,并清理GPU缓存以释放内存。
def semantic_chunk_documents(documents, embedder, percentile_threshold=95):"""对每个文档进行语义分割。"""# doc_chunks = []# 遍历每个文档for di, document in enumerate(documents):print(f"开始处理文档{di + 1}")# 1. 将文本块分割成句子sentences = re.split(r'(?<=[。!?\n])', document)sentences = [s.strip() for s in sentences if s.strip()]print(f"分割得到{len(sentences)}个句子")# 2. 为每个句子生成嵌入embeddings = embedder.embed(sentences)# 3. 计算相邻句子的余弦距离distances = []for i in range(len(embeddings) - 1):similarity = embedder.similarity([embeddings[i]], [embeddings[i + 1]])[0][0]distance = 1 - similaritydistances.append(distance)# 4. 根据百分位数确定分割阈值breakpoint_distance_threshold = np.percentile(distances, percentile_threshold)print(f"分割阈值: {breakpoint_distance_threshold}")# 5. 根据阈值进行分割chunks = []current_chunk_sentences = [sentences[0]]for i in range(len(distances)):# 如果两句之间的距离大于阈值if distances[i] > breakpoint_distance_threshold:chunks.append("\n".join(current_chunk_sentences))current_chunk_sentences = [sentences[i+1]]else:current_chunk_sentences.append(sentences[i+1])# 添加最后一个块chunks.append("\n".join(current_chunk_sentences))print(f"共得到{len(chunks)}个文本块")doc_chunks.extend(chunks)del embeddingstorch.cuda.empty_cache()return doc_chunks
执行语义分割

现在,我们调用刚刚定义的 semantic_chunk_documents 函数来处理我们加载的文档。

这个过程会遍历每个文档,执行上述的分割逻辑,并将所有文档产生的小块(chunks)合并到一个列表中。最后,我们打印出总的块数和前几个块的内容,以直观地感受一下分割的效果。

# 用作语义分割的嵌入模型
embedder = Embedder()# 执行结构化分割
chunks = semantic_chunk_documents(documents, embedder)print(f"--- 语义分割完成,共 {len(chunks)} 个块 ---")
# 查看前4个块
for i, chunk in enumerate(chunks[:4]):print(f"【块 {i+1}】:\n{chunk}\n")
    开始处理文档1分割得到386个句子分割阈值: 0.7188476562499999共得到21个文本块开始处理文档2分割得到220个句子分割阈值: 0.673828125共得到12个文本块开始处理文档3分割得到504个句子分割阈值: 0.77962646484375共得到27个文本块--- 语义分割完成,共 60 个块 ---【块 1】:# DeepSeek-R1:通过强化学习激发大语言模型的推理能力## DeepSeek-AIresearch@deepseek.com### 摘要我们介绍了第一代推理模型DeepSeek-R1-Zero和DeepSeek-R1。DeepSeek-R1-Zero是通过大规模强化学习(RL)训练的模型,无需将监督微调(SFT)作为初步步骤,展现出显著的推理能力。通过强化学习,DeepSeek-R1-Zero自然涌现出许多强大且有趣的推理行为。【块 2】:然而,它面临着可读性差和语言混合等挑战。【块 3】:为解决这些问题并进一步提升推理性能,我们引入了DeepSeek-R1,该模型在强化学习之前融入了多阶段训练和冷启动数据。DeepSeek-R1在推理任务上的性能可与OpenAI-o1-1217相媲美。为支持研究社区,我们开源了DeepSeek-R1-Zero、DeepSeek-R1,以及基于Qwen和Llama从DeepSeek-R1蒸馏得到的六个稠密模型(1.5B、7B、8B、14B、32B、70B)。|模型|GPQA Diamond(单次通过率)|SWE-bench Verified(已解决)|AIME 2024(单次通过率)|MMLU(百分位)|MATH-500(单次通过率)|Codeforces(单次通过率)||----|----|----|----|----|----|----||DeepSeek-R1|71.5|72.6|79.8|90.8|97.3|96.3||OpenAI-o1-1217|75.7|84.8|79.2|91.8|96.4|96.6||DeepSeek-R1-32B|62.1|59.1|79.8|90.8|97.3|96.3||OpenAI-o1-mini|60.0|60.0|63.6|85.2|90.0|93.4||DeepSeek-V3|49.2|48.9|39.2|88.5|90.2|58.7|图1 | DeepSeek-R1的基准性能### 1. 引言近年来,大语言模型(LLMs)经历了快速迭代和演进(Anthropic, 2024;Google, 2024;OpenAI, 2024a),与通用人工智能(AGI)的差距逐渐缩小。最近,训练后处理已成为完整训练流程的重要组成部分。研究表明,它能提高推理任务的准确性,与社会价值观保持一致,并适应用户偏好,同时与预训练相比所需的计算资源相对较少。在推理能力方面,OpenAI的o1系列模型(OpenAI, 2024b)首次通过增加思维链(Chain-of-Thought)推理过程的长度引入了推理时缩放。这种方法在数学、编码和科学推理等各种推理任务中取得了显著改进。然而,有效测试时缩放的挑战仍然是研究社区的一个开放问题。【块 4】:先前的几项工作探索了各种方法,包括基于过程的奖励模型(Lightman等人,2023;Uesato等人,2022;Wang等人,2023)、强化学习(Kumar等人,2024)以及蒙特卡洛树搜索和波束搜索等搜索算法(Feng等人,2024;Trinh等人,2024;Xin等人,2024)。然而,这些方法都没有取得与OpenAI的o1系列模型相当的通用推理性能。在本文中,我们迈出了使用纯强化学习(RL)提高语言模型推理能力的第一步。我们的目标是探索大语言模型在没有任何监督数据的情况下发展推理能力的潜力,专注于通过纯强化学习过程实现自我进化。具体来说,我们使用DeepSeek-V3-Base作为基础模型,并采用GRPO(Shao等人,2024)作为强化学习框架来提高模型在推理任务中的性能。在训练过程中,DeepSeek-R1-Zero自然涌现出许多强大而有趣的推理行为。经过数千次强化学习步骤后,DeepSeek-R1-Zero在推理基准测试中表现出卓越性能。例如,在AIME 2024上的单次通过率从15.6%提高到71.0%,通过多数投票,该分数进一步提高到86.7%,与OpenAI-o1-0912的性能相当。然而,DeepSeek-R1-Zero面临着可读性差和语言混合等挑战。为解决这些问题并进一步提升推理性能,我们引入了DeepSeek-R1,它结合了少量冷启动数据和多阶段训练流程。具体来说,我们首先收集数千条冷启动数据来微调DeepSeek-V3-Base模型。之后,我们像DeepSeek-R1-Zero一样进行面向推理的强化学习。在强化学习过程接近收敛时,我们通过对强化学习检查点进行拒绝采样来创建新的监督微调数据,并结合来自DeepSeek-V3在写作、事实问答和自我认知等领域的监督数据,然后重新训练DeepSeek-V3-Base模型。用新数据微调后,检查点会经历额外的强化学习过程,同时考虑所有场景的提示。经过这些步骤,我们获得了一个称为DeepSeek-R1的检查点,其性能与OpenAI-o1-1217相当。我们进一步探索了从DeepSeek-R1到较小稠密模型的蒸馏。使用Qwen2.5-32B(Qwen, 2024b)作为基础模型,直接从DeepSeek-R1进行蒸馏的性能优于在其上应用强化学习。这表明较大基础模型发现的推理模式对于提高推理能力至关重要。我们开源了蒸馏后的Qwen和Llama系列(Dubey等人,2024)。值得注意的是,我们的蒸馏14B模型大幅优于最先进的开源模型QwQ-32B-Preview(Qwen, 2024a),而蒸馏的32B和70B模型在稠密模型的推理基准上创下了新纪录。

向量化:为文本块和问题创建嵌入

在这里,我们执行两个向量化任务:

  1. 向量化所有文本块: 我们将上一步中通过语义分割得到的所有 chunks 逐一转换成嵌入向量。这些向量构成了我们可供检索的知识库。
  2. 向量化所有问题: 同样地,我们将 QA 数据集中的所有 queries(问题)也转换成嵌入向量。

这样,问题和知识库中的文本块就被置于同一个高维语义空间中,我们可以通过计算它们向量之间的距离来判断其相关性。

# 加载问题与正确答案
queries = [qa["question"] for qa in QA['data']]
answers_gt = [qa["answer"] for qa in QA['data']]# 对所有的文本块向量化
chunk_embeddings = []
for i, chunk in enumerate(chunks):print(f"\r正在向量化文本块 {i+1}/{len(chunks)}", end='')chunk_embedding = embedder.embed(chunk)chunk_embeddings.append(chunk_embedding)# 对所有的问题向量化
query_embeddings = embedder.embed(queries)
正在向量化文本块 60/60

检索(Retrieval):查找最相关的文本块

这是 RAG 中的 “R”(Retrieval)环节。我们的目标是,对于每一个问题,从我们庞大的知识库(chunks)中找出最可能包含答案的几个文本块。

过程如下:

  1. 计算相似度: 我们使用 embedder.similarity 函数计算每个问题向量与所有文本块向量之间的余弦相似度。
  2. 获取 Top-K: 对于每个问题,我们从相似度得分中选出最高的 k 个文本块。在这里,我们设置 k=3,意味着为每个问题检索3个最相关的上下文片段。
  3. 展示结果: 我们打印出每个问题及其检索到的 Top-K 文本块和对应的相似度分数,以便直观地检查检索质量。一个好的检索结果应该在语义上与问题高度相关。
similarity = embedder.similarity(query_embeddings, chunk_embeddings)
k = 3
top_k_indices = embedder.get_top_k(similarity, k)
for i, query in enumerate(queries[:1]):retrieved_chunks = []print(f"问题:{query}")print("-" * 30)for doc_idx in top_k_indices[i]:print(f"文本块(相似度{similarity[i, doc_idx]:.4f}):\n{chunks[doc_idx][:100]}......")print("=" * 30)
    问题:在后训练过程中,为什么Qwen3模型在经过“思考模式融合”和“通用RL”阶段后,在AIME’24和LiveCodeBench等具有挑战性的任务上性能反而有所下降?------------------------------文本块(相似度0.8228):#### 思考模式融合和通用RL的效果为了评估后训练期间思考模式融合和通用强化学习(RL)的有效性,我们对Qwen-32B模型的各个阶段进行了评估。除了前面提到的数据集,我们还引入了几个内部基准来......==============================文本块(相似度0.7271):# Qwen3技术报告Qwen团队https://huggingface.co/Qwenhttps://modelscope.cn/organization/qwenhttps://githu......==============================文本块(相似度0.7197):#### 聊天模板设计为了更好地集成两种模式并使用户能够动态切换模型的思考过程,我们为Qwen3设计了聊天模板,如表9所示。具体而言,对于思考模式和非思考模式的样本,我们分别在用户查询或系统消息中......==============================

生成(Generation):基于检索到的内容回答问题

这是 RAG 中的 “G”(Generation)环节。现在我们已经为每个问题找到了相关的上下文信息,下一步是利用这些信息来生成一个流畅、准确的答案。

我们执行以下步骤:

  1. 实例化生成模型: 我们加载 ReplyModel,它封装了一个大型语言模型(LLM)。
  2. 构建提示(Prompt): 对于每个问题,我们将问题本身和上一步检索到的 retrieved_chunks 一起打包,形成一个完整的提示。这个提示会明确指示 LLM:“请根据以下上下文信息来回答这个问题”。
  3. 生成答案: 我们将构建好的提示发送给 LLM,并获取其生成的答案。

通过提供明确的上下文,我们引导 LLM 基于我们提供的事实进行回答,而不是依赖其内部可能过时或不相关的知识,从而大大减少“幻觉”现象。

llm = ReplyModel()
answers = []
for i, query in enumerate(queries):retrieved_chunks = []for doc_idx in top_k_indices[i]:retrieved_chunks.append(chunks[doc_idx])answer = llm.answer(query, retrieved_chunks)answers.append(answer)print(query)print(answer)print("=" * 30)
    在后训练过程中,为什么Qwen3模型在经过“思考模式融合”和“通用RL”阶段后,在AIME’24和LiveCodeBench等具有挑战性的任务上性能反而有所下降?根据提供的文档,Qwen3模型在后训练过程中,在AIME’24和LiveCodeBench等具有挑战性的任务上性能下降的原因是由于模型在更广泛的通用任务上训练,这可能损害了其处理复杂问题的专业能力。文档中提到,虽然思考模式融合和通用RL在许多基准测试中带来了提升,但在这两个特定任务上,性能实际上有所下降。推测这种退化是由于模型在更广泛的通用任务上训练,导致其专业能力被稀释。因此,开发团队选择接受这种性能权衡,以增强模型的整体多功能性。==============================在针对轻量级模型的“强到弱蒸馏”管道中,在线蒸馏(Online Distillation)阶段的具体实现方式是什么?根据提供的文档,在线蒸馏(Online Distillation)阶段的具体实现方式是:从教师logits蒸馏使学生模型能够扩展其探索空间并增强其推理潜力。在实验中,通过比较蒸馏后的性能和计算成本,发现在线蒸馏比强化学习取得了显著更好的性能,同时仅需要约1/10的GPU小时。此外,在线蒸馏后的模型在AIME’24和AIME’25基准上的pass@64分数与初始检查点相比有所提高,而强化学习并未导致pass@64分数的任何改进。这表明在线蒸馏通过利用更强的教师模型来指导学生模型学习,从而提升了模型的性能。==============================Qwen3的开发团队在预训练数据筛选和模型后训练阶段,具体实施了哪些伦理审查(Ethical Review)流程来确保模型的安全性并减少偏见?根据提供的文档,Qwen3的开发团队在预训练数据筛选和模型后训练阶段实施了以下伦理审查(Ethical Review)流程来确保模型的安全性并减少偏见:1. **多语言数据注释系统**:开发了一个多语言数据注释系统,对超过30万亿token进行了多个维度的注释,如教育价值、领域、域和安全性。这有助于提高训练数据的质量和多样性,并支持更有效的数据过滤和组合。2. **数据过滤过程**:在预训练数据的构建过程中,采用了严格的两阶段过滤过程:查询过滤和响应过滤。查询过滤阶段使用Qwen2.5-72B-Instruct来识别和删除不易验证的查询,包括包含多个子问题或请求一般文本生成的查询。此外,排除了无需使用CoT推理即可正确回答的查询,以防止模型依赖表面猜测,并确保仅包含需要更深层次推理的复杂问题。3. **响应质量评估**:在生成响应的过程中,使用了QwQ-32B(Qwen团队,2025)为每个剩余查询生成N个候选响应。当QwQ-32B始终无法生成正确解决方案时,人类注释者会手动评估响应的准确性。对于Pass@N为正的查询,应用了更严格的过滤标准以删除不正确的最终答案、包含大量重复、明显表明没有充分推理的猜测、思考和总结内容之间存在不一致、涉及不适当的语言混合或风格转变,或涉嫌与潜在验证集项目过于相似的响应。4. **后训练阶段的监督微调(SFT)**:在后训练阶段,对推理RL模型进行持续监督微调(SFT),并设计聊天模板以融合两种模式(思考和非思考)。这有助于确保模型在不同思考预算下表现一致良好,同时管理和发展推理行为。5. **内部基准测试**:在后训练过程中,引入了几个内部基准来监控其他能力,包括CounterFactQA、LengthCtrl、ThinkFollow和ToolUse等。这些基准测试帮助评估模型在不同任务上的表现,确保模型在安全性和减少偏见方面达到预期目标。这些流程共同确保了Qwen3模型在预训练和后训练阶段的安全性,并有效减少了潜在的偏见。==============================与Qwen2.5-MoE相比,Qwen3的MoE模型在架构设计上引入了哪些关键的改变?根据提供的文档,Qwen3的MoE模型在架构设计上引入了以下关键改变:1. **专家数量和激活数量**:Qwen3 MoE模型总共有128个专家,每个token激活8个专家。而Qwen2.5-MoE可能有不同的专家数量和激活数量,但具体数值未在文档中明确说明。2. **没有共享专家**:与Qwen2.5-MoE不同,Qwen3-MoE设计中不包含共享专家。3. **全局批处理负载平衡损失**:Qwen3 MoE模型采用了全局批处理负载平衡损失(Qiu等人,2025)来促进专家专业化。4. **训练策略**:Qwen3 MoE模型的训练策略可能有所改进,包括使用更先进的训练策略和更大的训练token规模,这些因素有助于提升模型性能。这些改变使得Qwen3 MoE模型在参数效率和性能方面相比Qwen2.5-MoE有所提升。==============================在“思考模式融合”阶段,Qwen3模型是如何通过显式训练(explicitly trained)来学习并实现“思考预算(Thinking Budget)”这一能力的?根据提供的文档,Qwen3模型在“思考模式融合”阶段通过显式训练学习并实现“思考预算(Thinking Budget)”这一能力的机制是:一旦模型学会以非思考和思考模式响应,它自然会发展出处理中间情况的能力——基于不完整的思考生成响应。这种能力为实现对模型思考过程的预算控制奠定了基础。具体而言,当模型的思考长度达到用户定义的阈值时,我们手动停止思考过程并插入停止思考指令:“考虑到用户的时间有限,我现在必须直接根据思考给出解决方案。” 插入此指令后,模型将根据其截至该点积累的推理继续生成最终响应。值得注意的是,这种能力不是显式训练的,而是应用思考模式融合的自然结果。==============================相较于以往的多阶段训练框架(如GTE、E5),Qwen3 Embedding系列在训练流程中引入了哪三项关键创新?根据提供的文档,Qwen3 Embedding系列在训练流程中引入了以下三项关键创新:1. **多阶段训练流程**:结合了大规模无监督预训练和高质量数据集上的有监督微调,从而提升了模型的性能。2. **有效的模型合并策略**:通过模型合并增强了Qwen3 Embedding系列的鲁棒性和适应性。3. **利用Qwen3大语言模型进行跨领域和语言的文本数据合成**:Qwen3大语言模型不仅作为骨干模型,还在合成高质量、丰富多样的训练数据方面发挥关键作用,从而增强了训练流程。==============================Qwen3的重排序模型和嵌入模型采用了相同的两阶段训练流程,请解释在第一阶段的弱监督训练中,重排序模型是如何利用合成数据进行优化的?根据提供的文档,Qwen3的重排序模型和嵌入模型确实采用了类似的两阶段训练流程。在第一阶段的弱监督训练中,重排序模型利用合成数据进行优化的方式如下:1. **合成数据的生成**:合成数据是通过Qwen3 32B模型生成的,涵盖了多种类型的任务,如检索、双语挖掘、语义文本相似性和分类等。这些合成数据确保了模型在预训练期间能够适应各种相似性任务。2. **数据的多样性与质量**:合成数据通过多样化的提示策略生成,以提高生成数据的多样性和真实性。例如,在文本检索任务中,使用来自Qwen3的多语言预训练语料库来合成数据,并为每个文档分配特定角色,以模拟潜在用户查询该文档的情况。3. **弱监督训练阶段**:在第一阶段,重排序模型使用大规模弱监督训练数据进行预训练。这些数据是通过基础模型的文本理解和生成能力直接合成的,而不是从开放域来源收集。这种方法允许在合成提示中任意定义所需对数据的各种维度,如任务、语言、长度和难度,从而提高了数据的可控性和质量。4. **优化目标**:在弱监督训练阶段,重排序模型使用对比损失函数进行优化,该损失函数旨在最大化正样本对的相似性分数,同时最小化负样本对的相似性分数。这有助于模型学习到更有效的相关性评估能力。5. **后续阶段的微调**:在第一阶段弱监督训练之后,重排序模型会使用高质量的合成数据进行有监督微调,进一步优化模型性能。这一阶段的微调利用了合成数据的质量提升,以及模型合并技术,以增强模型的泛化能力和鲁棒性。综上所述,Qwen3的重排序模型在第一阶段的弱监督训练中,通过生成高质量、多样化的合成数据,并利用对比损失函数进行优化,从而提升了模型的相关性评估能力。随后的有监督微调进一步优化了模型性能。==============================请详细描述附录A.1中提到的,为合成检索文本对所采用的两阶段生成流程(配置阶段和查询生成阶段)的具体步骤和目的。根据提供的文档,附录A.1中提到的为合成检索文本对所采用的两阶段生成流程(配置阶段和查询生成阶段)的具体步骤和目的如下:### 1. 配置阶段**目的**:确定生成文本对的配置参数,以确保生成的数据符合所需的维度和质量要求。**具体步骤**:- **角色分配**:为每个文档分配特定的角色,以模拟潜在用户查询该文档的情况。这一步骤通过检索模型从角色库中为每个文档识别前五个角色候选,并将这些文档与其角色候选一起呈现给提示。- **多维提示设计**:提示包含各种维度,如查询类型(如关键字、事实、摘要、判断)、查询长度、难度和语言。这种多维方法确保了合成数据的质量和多样性。- **数据合成**:利用Qwen3 32B模型作为数据合成的基础模型,生成跨越检索、双语挖掘、分类和语义文本相似性(STS)等类别的多样化文本对。这些合成数据对的质量通过使用Qwen3 32B模型来确保。### 2. 查询生成阶段**目的**:根据配置阶段确定的参数,生成满足特定要求的查询,以便检索对应的文档。**具体步骤**:- **模板使用**:使用指定的模板,根据角色、段落和要求生成查询。模板要求输入角色、段落和要求,并生成满足要求并可用于检索段落的查询。- **参数指导**:使用第一阶段选择的配置来指导查询的生成,明确指定生成查询的所需长度和语言。- **JSON格式输出**:以JSON格式返回结果,键为生成查询的语言,值为生成的查询内容。### 总结配置阶段的主要目的是确定生成文本对的配置参数,确保生成的数据符合所需的维度和质量要求。查询生成阶段的主要目的是根据配置参数生成满足特定要求的查询,以便检索对应的文档。这两个阶段共同作用,确保生成的合成数据在多样性和质量上都达到高标准。==============================Qwen3的重排序模型是如何将相似性评估构建为一个分类问题,并最终计算出相关性分数的?请描述其具体机制和数学表达式。Qwen3的重排序模型将相似性评估构建为一个二元分类问题,具体机制和数学表达式如下:### 机制描述:1. **输入格式**:重排序模型的输入遵循特定的模板,包括指令、查询和文档。输入格式如下:```<|FunctionCallBegin|><Instruct>: {指令}<Query>: {查询}<Document>: {文档}<|FunctionCallEnd|>```2. **任务定义**:根据给定的查询和指令,判断文档是否符合要求。答案只能是“是”或“否”。3. **模型处理**:使用LLM聊天模板,并将相似性评估任务构建为二元分类问题。LLM的输入遵循上述模板。4. **输出计算**:模型输出下一个标记为“是”或“否”的可能性,通过概率计算相关性分数。### 数学表达式:相关性分数 $ score(q, d) $ 的计算公式为:$$score(q, d) = \frac{e^{P(yes | I, q, d)}}{e^{P(yes | I, q, d)} + e^{P(no | I, q, d)}}$$其中:- $ P(yes | I, q, d) $ 是模型预测文档 $ d $ 对查询 $ q $ 符合要求(“是”)的概率。- $ P(no | I, q, d) $ 是模型预测文档 $ d $ 不符合要求(“否”)的概率。该公式通过将概率转换为分数,量化了文档与查询的相关性。分数越高,表示文档越符合查询的要求。==============================报告强调了使用Qwen3 32B模型合成大规模训练数据,请问在数据合成过程中,团队遵循了哪些具体的伦理准则或偏见缓解措施来确保生成数据的公平性和无害性?根据提供的文档,没有具体提及在数据合成过程中遵循的伦理准则或偏见缓解措施。因此,无法确定报告中是否强调了相关的伦理准则或偏见缓解措施。==============================

最后,我们对Semantic Chunking RAG进行评估:

judge = LLMJudge()
judge.evaluate(queries, answers_gt, answers)
    1 正在评估问题:在后训练过程中,为什么Qwen3模型在经过“思考模式融合”和“通用RL”阶段后,在AIME’24和LiveCodeBench等具有挑战性的任务上性能反而有所下降?--------------------{'scores': {'Correctness': 5, 'Completeness': 3, 'Clarity & Conciseness': 5}, 'reasoning': '生成答案准确捕捉了正确答案的核心因果关系(通用任务训练稀释专业能力)和团队权衡决策,语义等价性完整。但在完整性上遗漏了正确答案中关于『其他基准测试表现提升』这一关键对比信息,导致关键信息点缺失。语言表达简洁流畅,逻辑清晰,无冗余或歧义。', 'final_score': 4.333333333333333}====================2 正在评估问题:在针对轻量级模型的“强到弱蒸馏”管道中,在线蒸馏(Online Distillation)阶段的具体实现方式是什么?--------------------{'scores': {'Correctness': 3, 'Completeness': 2, 'Clarity & Conciseness': 4}, 'reasoning': '生成答案描述了在线蒸馏中学生模型如何通过logits对齐进行微调,这是在线蒸馏的一部分内容,因此在正确性上部分符合。然而,它遗漏了正确答案中的关键点,如在线蒸馏在性能提升、计算成本降低以及与强化学习的对比结果等核心优势,完整性较差。语言表达较为清晰,结构合理,没有明显冗余或混乱之处,因此清晰简洁性得分较高。', 'final_score': 3.0}====================3 正在评估问题:Qwen3的开发团队在预训练数据筛选和模型后训练阶段,具体实施了哪些伦理审查(Ethical Review)流程来确保模型的安全性并减少偏见?--------------------{'scores': {'Correctness': 1, 'Completeness': 1, 'Clarity & Conciseness': 5}, 'reasoning': '生成答案未能提供任何正确的信息,与正确答案完全不符,导致正确性和完整性得分极低。然而,语言表达简洁清晰,没有冗余或结构问题,符合高清晰度和简洁性标准。', 'final_score': 2.3333333333333335}====================4 正在评估问题:与Qwen2.5-MoE相比,Qwen3的MoE模型在架构设计上引入了哪些关键的改变?--------------------{'scores': {'Correctness': 5, 'Completeness': 3, 'Clarity & Conciseness': 5}, 'reasoning': '生成答案正确指出了Qwen3-MoE的两个关键架构变化(无共享专家和全局批处理负载平衡损失),与正确答案的对应部分完全一致,因此正确性得5分。但遗漏了正确答案中明确提到的专家数量/激活数量配置(128专家激活8个)以及训练策略改进这两个信息点,属于遗漏了部分核心对比维度,因此完整性扣2分得3分。答案语言表述简洁清晰,分点明确,无冗余或歧义,因此清晰简洁性得5分。', 'final_score': 4.333333333333333}====================5 正在评估问题:在“思考模式融合”阶段,Qwen3模型是如何通过显式训练(explicitly trained)来学习并实现“思考预算(Thinking Budget)”这一能力的?--------------------{'scores': {'Correctness': 1, 'Completeness': 1, 'Clarity & Conciseness': 1}, 'reasoning': '生成答案完全未尝试回答问题,直接声明无法作答,导致正确性和完整性严重缺失。正确答案明确指出Qwen3通过思考模式融合的自然结果实现思考预算,而生成答案未提供任何相关信息。清晰度评分也低,因答案内容为空白,无法体现语言质量。', 'final_score': 1.0}====================6 正在评估问题:相较于以往的多阶段训练框架(如GTE、E5),Qwen3 Embedding系列在训练流程中引入了哪三项关键创新?--------------------{'scores': {'Correctness': 4, 'Completeness': 4, 'Clarity & Conciseness': 5}, 'reasoning': "生成答案的三项创新与正确答案存在表述差异但核心一致:1) 将正确答案的'多阶段训练'细化为'弱监督+监督微调'两个阶段,且强调数据合成来源创新;2) 模型合并技术细节更具体(slerp技术);3) 未明确提及'跨领域和语言'的数据合成特性,但保留了数据合成的核心思想。完整性上遗漏了正确答案中'跨领域语言'的关键维度,Clarity方面表达清晰简洁。", 'final_score': 4.333333333333333}====================7 正在评估问题:Qwen3的重排序模型和嵌入模型采用了相同的两阶段训练流程,请解释在第一阶段的弱监督训练中,重排序模型是如何利用合成数据进行优化的?--------------------{'scores': {'Correctness': 1, 'Completeness': 1, 'Clarity & Conciseness': 5}, 'reasoning': '生成答案未提供任何与问题相关的信息,直接声明无法回答,导致正确性和完整性均为最低分。语言表达清晰简洁,但内容完全偏离了正确答案的核心信息。', 'final_score': 2.3333333333333335}====================8 正在评估问题:请详细描述附录A.1中提到的,为合成检索文本对所采用的两阶段生成流程(配置阶段和查询生成阶段)的具体步骤和目的。--------------------{'scores': {'Correctness': 4, 'Completeness': 3, 'Clarity & Conciseness': 5}, 'reasoning': '生成答案正确捕捉了两阶段流程的核心目的(增强多样性/生成高质量查询)和主要步骤(角色分配、参数配置、查询生成),但存在以下差异:1) 配置阶段遗漏了多维提示设计的具体维度(如语言、STS类别)和数据合成的技术细节(Qwen3 32B模型的应用);2) 查询生成阶段未提及模板使用和JSON格式输出的关键步骤;3) 对角色分配的具体实现方式(检索模型从角色库筛选)描述不够准确。语言表达简洁清晰,逻辑连贯,但部分技术细节缺失影响了信息完整性。', 'final_score': 4.0}====================9 正在评估问题:Qwen3的重排序模型是如何将相似性评估构建为一个分类问题,并最终计算出相关性分数的?请描述其具体机制和数学表达式。--------------------{'scores': {'Correctness': 5, 'Completeness': 3, 'Clarity & Conciseness': 5}, 'reasoning': "生成答案在核心机制和数学表达上与正确答案完全一致,正确性满分。但遗漏了正确答案中关于输入模板的具体格式(如<|FunctionCallBegin|>标记)和任务定义中'答案只能是是或否'的细节,完整性扣2分。语言表达清晰简洁,分点明确,数学公式准确,逻辑性强,清晰简洁性满分。", 'final_score': 4.333333333333333}====================10 正在评估问题:报告强调了使用Qwen3 32B模型合成大规模训练数据,请问在数据合成过程中,团队遵循了哪些具体的伦理准则或偏见缓解措施来确保生成数据的公平性和无害性?--------------------{'scores': {'Correctness': 5, 'Completeness': 3, 'Clarity & Conciseness': 5}, 'reasoning': '生成答案正确传达了无法回答的结论,与正确答案的核心观点一致,因此正确性得5分。但生成答案未明确说明文档中没有提及伦理准则这一关键前提,导致完整性扣分,仅得3分。语言表达简洁清晰,无冗余或歧义,因此清晰简洁性得5分。', 'final_score': 4.333333333333333}====================最终得分:3.43

得到最终的评分:3.43
从结果来看,Semantic Chunking RAG的评分与标准的RAG几乎一致,没有带来明显的性能提升。
这可能是因为在Semantic Chunking时,有时会导致文本块的长度太长,从而在生成阶段无法得到高质量的回复。

http://www.xdnf.cn/news/15109.html

相关文章:

  • 解释sync.WaitGroup的用途和工作原理。在什么情况下应该使用它?
  • XSS(ctfshow)
  • Camera2API笔记
  • 创建本地软件仓库(rhel7与rhel9)
  • [C#] 使用TextBox换行失败的原因与解决方案:换用RichTextBox的实战经验
  • JavaScript 树形菜单总结
  • Datawhale AI 夏令营:基于带货视频评论的用户洞察挑战赛 Notebook(下篇)
  • git中的fork指令解释
  • 第1讲:C语言常见概念
  • 【NVIDIA-H100-UFM故障分析实战】GPU 节点反复 “掉线又上线“?300 条日志揪出 InfiniBand 链路抖动真凶
  • SYM32第二十天 ESP8266-01S和电脑实现串口通信(3)
  • 深入理解Java虚拟机:Java内存区域与内存溢出异常
  • RMSNorm/LayerNorm原理/图解及相关变体详解
  • 2025企业私有化知识库工具选型指南——标普智元深度解读
  • 谷粒商城高级篇
  • FPGA设计思想与验证方法系列学习笔记001
  • 数组的应用示例
  • 【前端】jQuery数组合并去重方法总结
  • [论文阅读]Text Compression for Efficient Language Generation
  • 无缝矩阵与普通矩阵的对比分析
  • 「按键精灵安卓/ios辅助工具」动态验证码该怎么得到完整的图片
  • 电脑被突然重启后,再每次打开excel文件,都会记录之前的位置窗口大小,第一次无法全屏显示。
  • Prompt提示词的主要类型和核心原则
  • QTextCodec的功能及其在Qt5及Qt6中的演变
  • OKHttp 核心知识点详解
  • [Xmos] Xmos架构
  • Docker-构建镜像并实现LNMP架构
  • 【运维实战】解决 K8s 节点无法拉取 pause:3.6 镜像导致 API Server 启动失败的问题
  • 在指定conda 环境里安装 jupyter 和 python kernel的方法
  • vscode和插件用法