RAG系统进阶:混合检索与重排序的工程实践

超越朴素RAG的检索瓶颈 朴素RAG(检索增强生成)系统的标准流程是:文本分块→向量化→余弦相似度检索→拼接prompt→生成回答。但在生产环境中,这种方案的检索准确率往往不超过60%。本文分享如何通过混合检索和重排序将准确率提升到85%以上。 混合检索:双路召回 稀疏检索:BM25的回归 BM25基于词项频率和文档频率,对精确关键词匹配有天然优势。在专业领域(医疗、法律)中,术语的精确匹配至关重要: from rank_bm25 import BM25Okapi tokenized_corpus = [doc.split() for doc in corpus] bm25 = BM25Okapi(tokenized_corpus) scores = bm25.get_scores(query.split()) 稠密检索:语义理解的利器 稠密检索通过Embedding模型捕获语义相似性,能处理同义词和跨语言匹配。当前推荐的Embedding模型: BGE-M3:支持多语言、多粒度 GTE-large:在MTEB榜单表现优异 Voyage-2:商用级别,支持动态维度 融合策略:RRF算法 Reciprocal Rank Fusion(RRF)是最常用的融合算法,它不依赖原始分数,只利用排名信息: def rrf_fusion(sparse_results, dense_results, k=60): fused_scores = {} for rank, doc in enumerate(sparse_results): fused_scores[doc.id] = fused_scores.get(doc.id, 0) + 1 / (k + rank + 1) for rank, doc in enumerate(dense_results): fused_scores[doc.id] = fused_scores.get(doc.id, 0) + 1 / (k + rank + 1) return sorted(fused_scores.items(), key=lambda x: x[1], reverse=True) RRF的优势在于无需调参,且对两个检索系统的分数尺度不敏感。 重排序:精排阶段 粗排阶段获取Top-50候选后,需要用更精确但更慢的模型进行重排序。 交叉编码器重排序 Cross-Encoder将query和document拼接后输入Transformer,输出相关性分数。相比Bi-Encoder,精度更高但速度慢100倍: from sentence_transformers import CrossEncoder reranker = CrossEncoder("BAAI/bge-reranker-v2-m3") scores = reranker.predict([(query, doc.text) for doc in candidates]) ColBERT晚期交互 ColBERT采用折中方案:预计算文档的token级别向量,在查询时进行token级别的最大相似度交互: # ColBERT的Late Interaction def colbert_score(query_embeddings, doc_embeddings): # query: [Q, D], doc: [N, D] sim_matrix = query_embeddings @ doc_embeddings.T # [Q, N] max_per_query = sim_matrix.max(axis=1) # [Q] return max_per_query.sum() ColBERT在保持接近Cross-Encoder精度的同时,速度提升约10倍。 分块策略对检索的影响 检索质量不仅取决于检索算法,分块策略同样关键: 固定长度分块:简单但可能切断语义完整性,建议设置10-20%重叠 语义分块:利用句子边界或段落结构,保持语义完整 递归分块:先按大单元(章节)切分,再按小单元(段落)细分 父子分块:检索用小块(200token),生成用大块(父块,1000token) 实践中,父子分块策略效果最好:小块保证检索精度,大块提供完整上下文。 检索质量评估体系 建立RAG评估体系需要以下指标: 检索阶段:Recall@K、MRR(Mean Reciprocal Rank)、NDCG 生成阶段:Faithfulness(忠实度)、Answer Relevancy(答案相关性)、Context Precision(上下文精度) 推荐使用RAGAS框架进行自动化评估: ...

2026-07-16 · 1 min · 170 words · 硅基 AGI 探索者

从数据标注到RLHF:对齐全流程实践

大模型的能力由预训练决定,但大模型的行为由对齐决定。一个能力强大但不对齐的模型,就像一个天才但不守规矩的员工——潜力越大,风险越大。本文将从工程实践角度,完整梳理从数据标注到RLHF的对齐流程。 一、对齐的全景图 大模型对齐不是单一技术,而是一个多阶段流水线: 预训练模型(Base Model) ↓ 有监督微调(SFT) — 学习"怎么回答" ↓ 奖励模型训练(RM) — 学习"什么是好回答" ↓ 强化学习优化(RLHF/DPO) — 优化"回答得更好" ↓ 安全对齐(Safety) — 确保"不回答不该回答的" 每个阶段都有不同的数据需求、训练方法和评估标准。 二、数据标注:对齐的基石 2.1 SFT数据标注 SFT数据是"指令-回复"对,教模型如何回答问题。看似简单,但质量差异巨大。 常见标注问题: 标注者倾向于写"教科书式"回答,缺乏多样性 不同标注者风格不一致,导致模型输出不稳定 安全相关的边界case标注不一致 最佳实践: 标注规范结构: 1. 任务定义: 清晰定义每种指令类型的预期回答格式 2. 质量标准: - 准确性: 信息正确,无幻觉 - 完整性: 覆盖问题要点 - 简洁性: 不冗余 - 安全性: 不含有害内容 3. 风格指南: 自然口语化,不要过于"AI腔" 4. 边界case: - 事实性问题 → 给出准确答案+来源 - 观点性问题 → 给出多角度分析 - 创意性问题 → 发挥创意但不越界 2.2 偏好数据标注(RLHF/DPO用) 偏好数据是"同一问题的两个回复,标注哪个更好"。这是对齐的核心数据。 ...

2026-07-13 · 3 min · 457 words · 硅基 AGI 探索者

大模型微调中的灾难性遗忘问题

大模型微调中的灾难性遗忘问题 你花两周微调了一个医疗领域的LLM,效果很好——医疗问答准确率从60%提升到90%。但用户反馈说模型的代码能力下降了,数学推理也退化了。这就是灾难性遗忘——在学习新知识的同时遗忘了旧知识。 灾难性遗忘的成因 神经网络的"跷跷板效应" 灾难性遗忘的根源在于神经网络的参数共享。同一个参数既参与医疗问答,也参与代码生成。当你用医疗数据微调时,参数向医疗任务最优的方向移动,必然偏离代码任务的最优点。 这和人类学习不同——人类学医不会导致忘记编程。因为人脑的功能区域相对独立,学习新知识不会覆盖旧知识的神经回路。而神经网络中,所有知识共享同一组参数。 影响遗忘程度的因素 微调数据量:数据越多,参数移动幅度越大,遗忘越严重。用10万条数据微调比1万条遗忘更严重。 学习率:学习率越大,参数更新越激进,遗忘越快。 数据分布偏移:微调数据和预训练数据分布差异越大,遗忘越严重。从通用文本微调到高度专业的医疗数据,分布偏移大,遗忘严重。 参数规模:小模型更容易遗忘(参数少,冲突大),大模型相对抗遗忘(参数冗余度高,不同知识可以"住"在不同参数子空间中)。 遗忘的度量 通用能力保留率 在微调前后,用一套通用基准测试(MMLU、HumanEval、GSM8K等)评估模型,对比分数变化。通用能力保留率 = 微调后分数 / 微调前分数。 特定能力遗忘率 针对特定能力设计测试集——代码生成、数学推理、创意写作等——分别度量微调前后的表现。通常关注的是退化超过5%的能力维度。 表示漂移度量 更底层的方法是度量模型内部表示的变化。用微调前后的模型对同一组文本生成嵌入向量,计算嵌入分布的偏移。偏移越大,遗忘风险越高。 缓解策略 策略一:低秩适应(LoRA) LoRA是缓解遗忘最实用的方法。它冻结原始参数,只训练低秩增量矩阵。原始知识完整保留在冻结的参数中,新增知识写入低秩矩阵。 LoRA天然抗遗忘——原始参数没变,通用能力不会退化。但代价是新增能力的深度有限——低秩矩阵的表达能力受限,很难学到需要大幅参数调整的能力。 实践中,LoRA的遗忘率通常<5%,远低于全参数微调的15-30%。对于大多数领域微调场景,这个trade-off是值得的。 策略二:经验回放(Experience Replay) 在微调数据中混入一定比例的通用数据。比如90%医疗数据+10%通用数据。通用数据起到"锚定"作用,防止参数过度偏移。 回放数据的选择很关键: 均匀采样:从预训练数据中均匀采样,覆盖面广但效率低 困难样本采样:采样最容易被遗忘的任务数据,精准防御 梯度匹配采样:选择梯度方向和新数据相反的样本,抵消偏移 回放比例的调优:太高(30%+)会稀释领域微调效果,太低(<5%)防遗忘效果不足。实践中10-15%是常用值。 策略三:弹性权重整合(EWC) EPC的核心思想是给每个参数一个"重要性权重"——越重要的参数(对已有任务越关键),正则化强度越大,越不应该修改。 具体实现:在微调前计算Fisher信息矩阵(近似参数重要性),在损失函数中加入正则化项: Loss = L_task + λ Σ F_i (θ_i - θ*_i)² 其中F_i是参数重要性,θ*_i是原始参数值。重要参数(F_i大)的偏移被惩罚,不重要参数可以自由更新。 EWC的效果取决于Fisher信息矩阵的估计质量。在实践中,Fisher估计的计算成本不低,且估计精度有限。这使得EWC在理论上有吸引力,但实践中不如LoRA和回放方法使用广泛。 策略四:参数隔离 最极端的防遗忘策略——给新任务分配专用参数,完全不影响旧任务参数。Adapter和Prefix Tuning属于这个方向。 Adapter在Transformer层之间插入小的适配模块,冻结原始参数。优点是零遗忘,缺点是增加了推理计算量和参数量。 Prefix Tuning在每个注意力层前加入可学习的前缀token,冻结模型参数。比Adapter更轻量,但表达能力也受限。 策略五:渐进式解冻 不冻结所有参数,而是从顶层开始逐步解冻。先只微调最后几层,评估遗忘程度;如果可接受,继续解冻更深层。这种渐进式方法在遗忘和能力提升之间找到更精细的平衡。 多任务持续学习 当你需要让模型同时学习多个领域时——医疗、法律、金融——遗忘问题更复杂。多任务交替训练会导致"跷跷板效应"——医疗能力上升则法律能力下降,反之亦然。 多任务混合训练 将多个领域的数据混合训练,而非交替训练。这能避免"学新忘旧"的问题。但要求各领域数据量均衡,否则大领域会"淹没"小领域。 模块化微调 为每个领域训练独立的LoRA模块,推理时根据任务选择加载。这是2026年的主流方案——一个基座模型+多个LoRA适配器,按需加载。 优势:零跨领域干扰、模块可独立更新、按需加载节省显存。 劣势:推理时需要路由策略判断使用哪个模块、管理多个模块的复杂性增加。 实践建议 基于我们在硅基AGI平台的微调经验,推荐以下流程: 首选LoRA:90%的场景下LoRA够用,遗忘率低、效率高 混入10%通用数据:作为保险,防止意外遗忘 使用小学习率:1e-5到5e-5之间,温和更新 分层学习率:底层用更小的学习率(1e-6),高层可以用更大的学习率 定期评估通用能力:每500步跑一次通用基准,发现退化立即调整 结语 灾难性遗忘是大模型微调中不可避免的trade-off——没有"免费的午餐",学习新知识和保留旧知识之间总是存在张力。关键不是"消除"遗忘,而是将遗忘控制在可接受范围内。LoRA+回放+定期评估的组合方案,在2026年仍然是性价比最高的实践路径。随着模型规模增大和训练方法改进,遗忘问题会逐步缓解,但永远不会消失——它是深度学习架构的基本特性。 ...

2026-07-13 · 1 min · 77 words · 硅基 AGI 探索者

大模型训练数据的质量评估框架:从数据到智能的基石

大模型训练数据的质量评估框架:从数据到智能的基石 垃圾进,垃圾出——这句计算机科学的古老格言在大模型时代有了更深刻的含义。GPT-4级别的模型需要万亿token的训练数据,而数据质量的微小差异在规模效应下会被放大到惊人的程度。本文将系统介绍我们团队在实践中总结的大模型训练数据质量评估框架。 评估维度总览 我们将数据质量评估分为六个核心维度,每个维度都有可量化的指标体系: 1. 准确性 准确性是最基础也最难以大规模验证的维度。对于事实性内容,我们使用知识图谱进行交叉验证——将训练数据中的实体关系三元组抽取后,与Wikidata等可信知识库比对。在我们的实验中,原始爬取数据中约12%的事实性陈述存在不同程度的错误或过时。 对于无法自动验证的内容,我们采用抽样人工审核,样本量根据数据来源的信任度分级确定。高信任源(如已发表论文)抽样率1%,低信任源(如UGC内容)抽样率5%。 2. 多样性 多样性评估使用两种方法:主题分布的均匀度和风格分布的覆盖度。我们使用预训练的文本分类器将数据分到500+主题类别中,计算Shannon熵作为多样性指标。同时使用风格分类器评估文本风格分布,确保技术文档、文学创作、日常对话等不同风格都有充分覆盖。 一个容易被忽视的问题是模板内容的过度集中。很多网页包含大量重复的导航、版权声明等模板文本。我们使用MinHash算法去重,在最近一次数据清洗中,模板内容占原始数据量的23%,去除后训练效率提升了约15%。 3. 时效性 知识有保鲜期。2026年的模型不应还在大量学习2020年的信息。我们按时间衰减加权,对最近3年的数据给予更高权重。同时,对于快速变化的领域(如AI技术、法律法规),时效性要求更加严格。 时效性得分 = Σ (doc_score × time_weight(doc_date)) time_weight = exp(-Δt / half_life) 不同领域的半衰期不同:技术类约6个月,人文类约5年,数学类几乎无衰减。 4. 安全性 安全性评估包括三个子维度:有害内容过滤、隐私信息脱敏、版权合规检测。我们使用多级过滤管道,包括基于规则的正则过滤、基于分类模型的内容审核、以及基于LLM的细粒度判断。 值得注意的是,安全过滤和保留有用信息之间存在张力。过度过滤会损失模型的应对能力——模型需要"见过"有害内容才能学会拒绝它。我们的策略是在预训练阶段进行适度过滤,在对齐阶段进行针对性训练。 5. 语言质量 语言质量评估包括语法正确性、表达连贯性、信息密度三个指标。我们使用预训练语言模型计算每段文本的困惑度,过滤掉高困惑度的低质量文本。信息密度使用文本压缩比来衡量——压缩比过低意味着冗余过多。 6. 知识密度 知识密度是我们的独创指标,衡量单位文本中包含的可结构化知识的丰富程度。具体方法是从文本中抽取实体和关系,计算每千token的知识三元组数量。学术论文的知识密度通常是社交媒体内容的10倍以上。 框架实现与工具链 我们将上述框架实现为一个可扩展的数据评估流水线: 采集层:支持Common Crawl、自有爬虫、API对接等多种数据源 清洗层:去重、格式归一化、模板去除、语言检测 评估层:六个维度并行评估,输出综合质量报告 决策层:基于评估结果自动决定数据是否进入训练集 整个流水线支持每日处理50TB原始数据,评估报告可视化展示各维度的分布和趋势。 质量与规模的权衡 在万亿token时代,质量与规模的权衡是核心决策。我们的实验表明,从5T token增加到10T token,如果新增数据质量低于已有数据,模型性能反而下降。但如果新增数据质量更高,即使总量减少20%,性能也能提升。 这给我们的启示是:数据规模是必要条件,但不是充分条件。在2026年,当大多数团队都能获取万亿token规模的数据时,数据质量将成为真正的竞争壁垒。 结语 训练数据质量评估不是一次性的工作,而是一个持续迭代的过程。随着模型能力的提升,对数据质量的要求也在不断提高。建立一套系统化、可量化、可扩展的数据评估框架,是大模型工程化不可或缺的基础设施。 本文同步发布于 硅基AGI论坛

2026-07-13 · 1 min · 54 words · 硅基 AGI 探索者

大模型蒸馏技术:让小模型拥有大智慧

大模型蒸馏技术:让小模型拥有大智慧 知识蒸馏是连接大模型和小模型的桥梁——让小模型以更低的成本获得接近大模型的能力。2026年,蒸馏技术已经从简单的输出模仿发展到多维度的知识传递,成为模型部署流程中不可或缺的一环。 蒸馏的基本原理 知识蒸馏的核心思想是让student模型学习teacher模型的行为。最基础的形式是软标签蒸馏:teacher模型对每个输入输出一个概率分布(软标签),student模型不仅学习正确答案,还学习teacher的输出分布。 软标签比硬标签(正确答案)包含更多信息。例如,在情感分类中,teacher可能输出"正面:0.7, 中性:0.2, 负面:0.1"。这个分布告诉student:这个样本倾向于正面,但与中性也有一定相似度——这种"暗知识"是硬标签无法提供的。 蒸馏方法的演进 输出层蒸馏 最早的蒸馏方法只关注最终输出。KL散度损失函数让student的输出分布逼近teacher的输出分布: L = α * KL(softmax(z_t/T) || softmax(z_s/T)) + (1-α) * CE(y, z_s) 其中z_t和z_s分别是teacher和student的logits,T是温度参数,α是损失权重。 温度T的作用至关重要。T=1时,蒸馏等同于标准训练;T较大时,软标签中的"暗知识"被放大,student能学到更多teacher的细微判断。最佳温度通常在2-10之间,需要根据任务调整。 中间层蒸馏 输出层蒸馏的局限是student只能在最终输出层面模仿teacher。但如果teacher和student的架构差异较大,输出层面的模仿可能不够有效。 中间层蒸馏让student的隐藏层表示逼近teacher的隐藏层表示。由于两个模型的隐藏层维度可能不同,通常需要一个线性映射将student的隐藏层投影到teacher的维度: L_hidden = MSE(W * h_s, h_t) 其中W是可学习的映射矩阵,h_s和h_t分别是student和teacher的隐藏层输出。 中间层蒸馏显著提升了student的性能——在我们的实验中,相比纯输出蒸馏,中间层蒸馏让student在推理任务上的准确率额外提升5-8个百分点。 注意力蒸馏 注意力蒸馏让student学习teacher的注意力分布。teacher的注意力模式包含了它"关注什么"的信息——这对理解teacher的推理过程很有价值。 注意力蒸馏在机器翻译等任务上特别有效,因为对齐信息(源语言的哪个词对应目标语言的哪个词)主要体现在注意力分布中。 渐进式蒸馏 渐进式蒸馏不是一次性蒸馏,而是分阶段进行:先用简单任务蒸馏,再逐步引入更复杂的任务。这类似于人类学习的"从易到难"过程。 在渐进式蒸馏中,每个阶段的teacher可以提供不同形式的指导:简单阶段提供软标签,复杂阶段提供推理过程(CoT),最复杂阶段提供完整的解题轨迹。 蒸馏大模型到小模型 选择合适的teacher-student对 不是所有大模型都适合做teacher,也不是所有小模型都适合做student。选择原则: Teacher选择:选择在目标任务上表现最好、输出分布最平滑的模型。输出分布越平滑,暗知识越丰富。经过RLHF训练的模型输出分布往往较尖锐(过度自信),不是最佳teacher。我们通常使用base模型(未经RLHF)作为teacher。 Student选择:student的架构应与teacher尽量相似,以最大化知识迁移效率。如果teacher是Transformer decoder,student也应该是。层数和宽度可以缩减,但基本结构应保持一致。 数据选择 蒸馏数据的质量和多样性比数量更重要。我们使用以下策略构建蒸馏数据集: Teacher生成数据:让teacher模型生成大量高质量的回答,作为student的训练数据。这比使用原始训练数据更有效,因为teacher的输出已经包含了它的"知识"。 难度分层:按任务难度对数据进行分层,确保student逐步学习从简单到复杂的模式。 领域覆盖:确保蒸馏数据覆盖student需要处理的所有领域。如果student主要用于代码生成,蒸馏数据应以代码为主。 实践效果 我们将一个70B模型蒸馏到7B模型,结果如下: 指标 Teacher (70B) Student (7B) Student (7B, 从头训练) MMLU 78.5 71.2 62.3 GSM8K 85.1 74.6 58.2 HumanEval 72.3 65.8 51.4 蒸馏相比从头训练的提升约9-16个百分点,且student的推理速度约为teacher的10倍。 ...

2026-07-13 · 1 min · 85 words · 硅基 AGI 探索者

大模型蒸馏技术:让小模型拥有大智慧

大模型蒸馏技术:让小模型拥有大智慧 知识蒸馏是连接大模型和小模型的桥梁——让小模型以更低的成本获得接近大模型的能力。2026年,蒸馏技术已经从简单的输出模仿发展到多维度的知识传递,成为模型部署流程中不可或缺的一环。 蒸馏的基本原理 知识蒸馏的核心思想是让student模型学习teacher模型的行为。最基础的形式是软标签蒸馏:teacher模型对每个输入输出一个概率分布(软标签),student模型不仅学习正确答案,还学习teacher的输出分布。 软标签比硬标签(正确答案)包含更多信息。例如,在情感分类中,teacher可能输出"正面:0.7, 中性:0.2, 负面:0.1"。这个分布告诉student:这个样本倾向于正面,但与中性也有一定相似度——这种"暗知识"是硬标签无法提供的。 蒸馏方法的演进 输出层蒸馏 最早的蒸馏方法只关注最终输出。KL散度损失函数让student的输出分布逼近teacher的输出分布: L = α * KL(softmax(z_t/T) || softmax(z_s/T)) + (1-α) * CE(y, z_s) 其中z_t和z_s分别是teacher和student的logits,T是温度参数,α是损失权重。 温度T的作用至关重要。T=1时,蒸馏等同于标准训练;T较大时,软标签中的"暗知识"被放大,student能学到更多teacher的细微判断。最佳温度通常在2-10之间,需要根据任务调整。 中间层蒸馏 输出层蒸馏的局限是student只能在最终输出层面模仿teacher。但如果teacher和student的架构差异较大,输出层面的模仿可能不够有效。 中间层蒸馏让student的隐藏层表示逼近teacher的隐藏层表示。由于两个模型的隐藏层维度可能不同,通常需要一个线性映射将student的隐藏层投影到teacher的维度: L_hidden = MSE(W * h_s, h_t) 其中W是可学习的映射矩阵,h_s和h_t分别是student和teacher的隐藏层输出。 中间层蒸馏显著提升了student的性能——在我们的实验中,相比纯输出蒸馏,中间层蒸馏让student在推理任务上的准确率额外提升5-8个百分点。 注意力蒸馏 注意力蒸馏让student学习teacher的注意力分布。teacher的注意力模式包含了它"关注什么"的信息——这对理解teacher的推理过程很有价值。 注意力蒸馏在机器翻译等任务上特别有效,因为对齐信息(源语言的哪个词对应目标语言的哪个词)主要体现在注意力分布中。 渐进式蒸馏 渐进式蒸馏不是一次性蒸馏,而是分阶段进行:先用简单任务蒸馏,再逐步引入更复杂的任务。这类似于人类学习的"从易到难"过程。 在渐进式蒸馏中,每个阶段的teacher可以提供不同形式的指导:简单阶段提供软标签,复杂阶段提供推理过程(CoT),最复杂阶段提供完整的解题轨迹。 蒸馏大模型到小模型 选择合适的teacher-student对 不是所有大模型都适合做teacher,也不是所有小模型都适合做student。选择原则: Teacher选择:选择在目标任务上表现最好、输出分布最平滑的模型。输出分布越平滑,暗知识越丰富。经过RLHF训练的模型输出分布往往较尖锐(过度自信),不是最佳teacher。我们通常使用base模型(未经RLHF)作为teacher。 Student选择:student的架构应与teacher尽量相似,以最大化知识迁移效率。如果teacher是Transformer decoder,student也应该是。层数和宽度可以缩减,但基本结构应保持一致。 数据选择 蒸馏数据的质量和多样性比数量更重要。我们使用以下策略构建蒸馏数据集: Teacher生成数据:让teacher模型生成大量高质量的回答,作为student的训练数据。这比使用原始训练数据更有效,因为teacher的输出已经包含了它的"知识"。 难度分层:按任务难度对数据进行分层,确保student逐步学习从简单到复杂的模式。 领域覆盖:确保蒸馏数据覆盖student需要处理的所有领域。如果student主要用于代码生成,蒸馏数据应以代码为主。 实践效果 我们将一个70B模型蒸馏到7B模型,结果如下: 指标 Teacher (70B) Student (7B) Student (7B, 从头训练) MMLU 78.5 71.2 62.3 GSM8K 85.1 74.6 58.2 HumanEval 72.3 65.8 51.4 蒸馏相比从头训练的提升约9-16个百分点,且student的推理速度约为teacher的10倍。 ...

2026-07-13 · 1 min · 85 words · 硅基 AGI 探索者

大模型微调的数据工程全流程

大模型微调的数据工程全流程 在大模型微调中,数据质量的重要性远超算法选择。同样的微调方法,高质量数据可以带来20-30%的效果提升,而低质量数据不仅无益,还可能损害模型的通用能力。本文系统梳理微调数据工程的全流程。 数据采集 来源规划 微调数据应该来自多个渠道,避免单一来源的偏见: 真实交互数据:从生产环境中收集用户与模型的交互数据,筛选高质量的对话。这是最有价值的数据来源,因为它反映了真实的使用模式。需要注意的是用户隐私保护和数据脱敏。 合成数据:使用更强大的模型生成训练数据。合成数据的优势是可以针对特定能力定向生成,劣势是可能继承教师模型的偏见。我们建议合成数据不超过总数据量的40%。 人工标注:领域专家编写的高质量样本。成本最高但质量最好,适用于关键能力的数据补充。 公开数据集:学术数据集和开源数据。需要注意许可协议和数据质量参差不齐的问题。 采样策略 数据采样的目标是确保训练集覆盖目标能力的各个方面。我们采用"能力矩阵"方法——定义需要微调的能力维度和难度等级,确保每个格子有足够的数据样本。 数据清洗 去重 数据去重看似简单,实则有不少坑。精确去重(完全相同的样本)只能去除最明显的冗余,大量近似重复的样本仍会浪费训练资源并导致过拟合。 我们采用了MinHash+LSH进行模糊去重,将Jaccard相似度超过0.7的样本对标记为近似重复,保留质量更高的那条。在一个10万条数据集上,模糊去重额外移除了约8%的样本。 质量过滤 低质量数据是微调效果的杀手。我们建立了多级质量过滤管道: 规则过滤:移除包含乱码、编码错误、过短或过长、重复模式严重的样本。这一步快速且成本低,可以过滤约10-15%的明显低质量数据。 模型过滤:使用一个训练好的质量评分模型对每条数据打分,低于阈值的被过滤。评分模型可以是一个在人类标注的质量数据上训练的小型分类器,也可以使用LLM-as-Judge。 人工抽检:随机抽取5-10%的样本进行人工检查,评估自动过滤的准确性,并校准过滤阈值。 格式规范化 微调数据的格式必须与模型的训练格式一致。常见问题包括:特殊token的不一致、对话角色的混淆、多轮对话中上下文的截断方式不一致等。 我们定义了严格的格式schema,使用JSON Schema验证每条数据的结构完整性。不符合schema的样本被标记并修复或丢弃。 数据增强 指令改写 同一条指令可以有多种表达方式。“帮我总结这篇文章"和"请概括以下内容的要点"在语义上等价但表达不同。通过指令改写增加表达多样性,可以提高模型的泛化能力。 我们使用LLM自动改写指令,每条原始指令生成3-5个改写版本。关键是要保持语义不变——我们用一个语义相似度模型过滤掉语义偏移过大的改写。 难度分层 同一任务的不同难度级别对模型学习很重要。如果数据全是简单任务,模型无法处理复杂场景;如果全是困难任务,模型难以学到基本模式。 我们为每个任务类型准备了三个难度级别的数据:简单(单步推理)、中等(2-3步推理)、困难(多步推理+边缘情况)。比例约为4:4:2。 数据混合策略 微调数据不仅要覆盖目标任务,还需要包含一定比例的通用数据,以防止灾难性遗忘——模型在学会新能力的同时忘记原有能力。 我们的数据混合方案: 60% 目标任务数据 25% 通用对话数据(从预训练数据中采样) 10% 安全对齐数据 5% 代码和推理数据 这个比例不是固定的,需要根据具体任务和模型表现进行调整。关键是监控模型在通用benchmark上的表现,确保微调没有显著损害通用能力。 质量评估 自动评估 在微调前,我们使用以下指标评估数据质量: 多样性指标:计算数据集的语义多样性分布,确保覆盖面足够 难度分布:统计不同难度级别的样本比例 毒性检测:使用分类器检测并移除有毒内容 偏见检测:检查数据是否存在性别、种族等方面的系统性偏见 消融实验 最终的数据质量需要通过微调实验来验证。我们采用消融实验——分别用完整数据集和去除某一部分后的数据集进行微调,比较效果差异。这帮助我们理解哪些数据对模型能力贡献最大。 结语 数据工程是微调中最耗时但也最值得投入的环节。在我们的实践中,数据工程占整个微调项目时间的60-70%,但也是回报最高的投入。好的数据可以让简单的微调方法超越复杂方法在差数据上的表现。数据为王,在微调领域依然是真理。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 56 words · 硅基 AGI 探索者

大模型微调的数据工程全流程

大模型微调的数据工程全流程 在大模型微调中,数据质量的重要性远超算法选择。同样的微调方法,高质量数据可以带来20-30%的效果提升,而低质量数据不仅无益,还可能损害模型的通用能力。本文系统梳理微调数据工程的全流程。 数据采集 来源规划 微调数据应该来自多个渠道,避免单一来源的偏见: 真实交互数据:从生产环境中收集用户与模型的交互数据,筛选高质量的对话。这是最有价值的数据来源,因为它反映了真实的使用模式。需要注意的是用户隐私保护和数据脱敏。 合成数据:使用更强大的模型生成训练数据。合成数据的优势是可以针对特定能力定向生成,劣势是可能继承教师模型的偏见。我们建议合成数据不超过总数据量的40%。 人工标注:领域专家编写的高质量样本。成本最高但质量最好,适用于关键能力的数据补充。 公开数据集:学术数据集和开源数据。需要注意许可协议和数据质量参差不齐的问题。 采样策略 数据采样的目标是确保训练集覆盖目标能力的各个方面。我们采用"能力矩阵"方法——定义需要微调的能力维度和难度等级,确保每个格子有足够的数据样本。 数据清洗 去重 数据去重看似简单,实则有不少坑。精确去重(完全相同的样本)只能去除最明显的冗余,大量近似重复的样本仍会浪费训练资源并导致过拟合。 我们采用了MinHash+LSH进行模糊去重,将Jaccard相似度超过0.7的样本对标记为近似重复,保留质量更高的那条。在一个10万条数据集上,模糊去重额外移除了约8%的样本。 质量过滤 低质量数据是微调效果的杀手。我们建立了多级质量过滤管道: 规则过滤:移除包含乱码、编码错误、过短或过长、重复模式严重的样本。这一步快速且成本低,可以过滤约10-15%的明显低质量数据。 模型过滤:使用一个训练好的质量评分模型对每条数据打分,低于阈值的被过滤。评分模型可以是一个在人类标注的质量数据上训练的小型分类器,也可以使用LLM-as-Judge。 人工抽检:随机抽取5-10%的样本进行人工检查,评估自动过滤的准确性,并校准过滤阈值。 格式规范化 微调数据的格式必须与模型的训练格式一致。常见问题包括:特殊token的不一致、对话角色的混淆、多轮对话中上下文的截断方式不一致等。 我们定义了严格的格式schema,使用JSON Schema验证每条数据的结构完整性。不符合schema的样本被标记并修复或丢弃。 数据增强 指令改写 同一条指令可以有多种表达方式。“帮我总结这篇文章"和"请概括以下内容的要点"在语义上等价但表达不同。通过指令改写增加表达多样性,可以提高模型的泛化能力。 我们使用LLM自动改写指令,每条原始指令生成3-5个改写版本。关键是要保持语义不变——我们用一个语义相似度模型过滤掉语义偏移过大的改写。 难度分层 同一任务的不同难度级别对模型学习很重要。如果数据全是简单任务,模型无法处理复杂场景;如果全是困难任务,模型难以学到基本模式。 我们为每个任务类型准备了三个难度级别的数据:简单(单步推理)、中等(2-3步推理)、困难(多步推理+边缘情况)。比例约为4:4:2。 数据混合策略 微调数据不仅要覆盖目标任务,还需要包含一定比例的通用数据,以防止灾难性遗忘——模型在学会新能力的同时忘记原有能力。 我们的数据混合方案: 60% 目标任务数据 25% 通用对话数据(从预训练数据中采样) 10% 安全对齐数据 5% 代码和推理数据 这个比例不是固定的,需要根据具体任务和模型表现进行调整。关键是监控模型在通用benchmark上的表现,确保微调没有显著损害通用能力。 质量评估 自动评估 在微调前,我们使用以下指标评估数据质量: 多样性指标:计算数据集的语义多样性分布,确保覆盖面足够 难度分布:统计不同难度级别的样本比例 毒性检测:使用分类器检测并移除有毒内容 偏见检测:检查数据是否存在性别、种族等方面的系统性偏见 消融实验 最终的数据质量需要通过微调实验来验证。我们采用消融实验——分别用完整数据集和去除某一部分后的数据集进行微调,比较效果差异。这帮助我们理解哪些数据对模型能力贡献最大。 结语 数据工程是微调中最耗时但也最值得投入的环节。在我们的实践中,数据工程占整个微调项目时间的60-70%,但也是回报最高的投入。好的数据可以让简单的微调方法超越复杂方法在差数据上的表现。数据为王,在微调领域依然是真理。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 56 words · 硅基 AGI 探索者

知识图谱增强的RAG系统实践

知识图谱增强的RAG系统实践 传统RAG系统基于向量相似度检索,在简单事实问答上表现优异,但在需要多跳推理、关系推理的场景中往往力不从心。知识图谱增强的RAG(GraphRAG)提供了一条可行的改进路径。 传统RAG的局限 向量检索的本质是"语义相似度匹配"——找到与query在embedding空间中最接近的文本片段。这种方式有三个固有局限: 第一,语义鸿沟。“谁是对手的合作伙伴?“这类问题,答案可能散落在多个文档中,每个文档与query的向量相似度都不高。第二,多跳推理缺失。回答"A的领导的母校在哪?“需要A→领导→母校的链条,纯向量检索难以完成。第三,全局视角缺乏。向量检索是局部的,无法提供知识全局结构的概览。 GraphRAG的核心理念 GraphRAG的核心是将非结构文本转化为结构化知识图谱,然后在图上进行检索和推理。整个流程分为三个阶段: 图谱构建 从原始文档中抽取实体和关系,构建知识图谱。这一步通常使用LLM完成:给定一段文本,让模型识别其中的实体(人、组织、地点等)及实体间的关系。抽取的三元组(头实体,关系,尾实体)被存入图数据库。 构建过程中需要特别注意实体消歧和实体对齐。“苹果"在不同语境下可能指水果或公司,需要通过上下文和已有图谱知识进行消解。我们采用了一个轻量级的实体链接模块,在抽取后立即进行规范化处理。 图检索 当用户提问时,系统首先从问题中抽取关键实体,然后在图谱中定位这些实体,并通过图遍历获取相关的子图。图检索的优势在于: 多跳遍历:自然支持A→B→C的链式推理 关系感知:不仅返回相关实体,还返回实体间的关系路径 全局结构:可以获取实体在知识网络中的位置信息 我们实现了混合检索策略:先用向量检索定位起始节点,再用图遍历扩展相关子图,最后将两者结果融合后送入LLM。 答案生成 将检索到的子图序列化为文本描述,连同原始问题一起送入LLM生成答案。子图序列化的方式很关键——我们需要将结构化的图数据转化为LLM能理解的自然语言,同时保留关系信息。 实践中的坑 在实践中,我们遇到了几个值得注意的问题: 图谱质量:LLM抽取的实体和关系并非完全准确,错误率在10-20%左右。我们引入了置信度评分机制,低置信度的三元组会被标记,在检索时降权处理。 图谱规模:对于大型文档集,图谱可能包含数百万节点,图遍历的效率成为瓶颈。解决方案是引入层级化图谱结构——将实体按类别分组,先在类别级别定位,再在组内精确遍历。 更新策略:知识图谱需要随文档更新而增量更新。全量重建代价太高,我们实现了基于变更检测的增量更新机制,只处理变化的文档段落。 效果对比 在我们的评测中,GraphRAG在多跳推理任务上的准确率比传统RAG高出约25个百分点,在简单事实问答上持平。代价是构建成本更高、系统复杂度更大。因此,GraphRAG更适合知识密集型、推理密集型的应用场景。 结语 知识图谱增强不是RAG的替代方案,而是补充方案。未来的RAG系统应该是多模态检索的统一体——向量检索负责语义匹配,图检索负责关系推理,全文检索负责精确匹配。三者协同,才能构建真正强大的知识问答系统。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 29 words · 硅基 AGI 探索者

知识图谱增强的RAG系统实践

知识图谱增强的RAG系统实践 传统RAG系统基于向量相似度检索,在简单事实问答上表现优异,但在需要多跳推理、关系推理的场景中往往力不从心。知识图谱增强的RAG(GraphRAG)提供了一条可行的改进路径。 传统RAG的局限 向量检索的本质是"语义相似度匹配"——找到与query在embedding空间中最接近的文本片段。这种方式有三个固有局限: 第一,语义鸿沟。“谁是对手的合作伙伴?“这类问题,答案可能散落在多个文档中,每个文档与query的向量相似度都不高。第二,多跳推理缺失。回答"A的领导的母校在哪?“需要A→领导→母校的链条,纯向量检索难以完成。第三,全局视角缺乏。向量检索是局部的,无法提供知识全局结构的概览。 GraphRAG的核心理念 GraphRAG的核心是将非结构文本转化为结构化知识图谱,然后在图上进行检索和推理。整个流程分为三个阶段: 图谱构建 从原始文档中抽取实体和关系,构建知识图谱。这一步通常使用LLM完成:给定一段文本,让模型识别其中的实体(人、组织、地点等)及实体间的关系。抽取的三元组(头实体,关系,尾实体)被存入图数据库。 构建过程中需要特别注意实体消歧和实体对齐。“苹果"在不同语境下可能指水果或公司,需要通过上下文和已有图谱知识进行消解。我们采用了一个轻量级的实体链接模块,在抽取后立即进行规范化处理。 图检索 当用户提问时,系统首先从问题中抽取关键实体,然后在图谱中定位这些实体,并通过图遍历获取相关的子图。图检索的优势在于: 多跳遍历:自然支持A→B→C的链式推理 关系感知:不仅返回相关实体,还返回实体间的关系路径 全局结构:可以获取实体在知识网络中的位置信息 我们实现了混合检索策略:先用向量检索定位起始节点,再用图遍历扩展相关子图,最后将两者结果融合后送入LLM。 答案生成 将检索到的子图序列化为文本描述,连同原始问题一起送入LLM生成答案。子图序列化的方式很关键——我们需要将结构化的图数据转化为LLM能理解的自然语言,同时保留关系信息。 实践中的坑 在实践中,我们遇到了几个值得注意的问题: 图谱质量:LLM抽取的实体和关系并非完全准确,错误率在10-20%左右。我们引入了置信度评分机制,低置信度的三元组会被标记,在检索时降权处理。 图谱规模:对于大型文档集,图谱可能包含数百万节点,图遍历的效率成为瓶颈。解决方案是引入层级化图谱结构——将实体按类别分组,先在类别级别定位,再在组内精确遍历。 更新策略:知识图谱需要随文档更新而增量更新。全量重建代价太高,我们实现了基于变更检测的增量更新机制,只处理变化的文档段落。 效果对比 在我们的评测中,GraphRAG在多跳推理任务上的准确率比传统RAG高出约25个百分点,在简单事实问答上持平。代价是构建成本更高、系统复杂度更大。因此,GraphRAG更适合知识密集型、推理密集型的应用场景。 结语 知识图谱增强不是RAG的替代方案,而是补充方案。未来的RAG系统应该是多模态检索的统一体——向量检索负责语义匹配,图检索负责关系推理,全文检索负责精确匹配。三者协同,才能构建真正强大的知识问答系统。 本文同步发布于 硅基AGI论坛

2026-07-12 · 1 min · 29 words · 硅基 AGI 探索者
鲁ICP备2026018361号