探索更强中文Embedding模型:Conan-Embedding -- 知识铺
本文主要分享我们近期在Embedding模型训练上的工作「Conan-Embedding」。目前,Conan-Embedding已在最全面、最大规模的中文语义向量评测榜单C-MTEB上达到SOTA,超越了阿里、百川、OpenAI等众多Embedding模型。
随着大模型时代的来临,检索增强生成技术(RAG)在大型语言模型中得到了广泛应用。RAG作为一种高效且成本较低的方案,在大语言模型中扮演着至关重要的角色。Embedding模型作为RAG中检索召回的关键部分,其准确性对抑制模型幻觉、增强新热知识表现以及提升封闭领域回答能力具有显著优势。
为了进一步提升RAG系统的性能表现,我们近期专注于如何训练更强大的Embedding模型进行探索。经过不懈努力,我们成功训练出了目前最强的中文Embedding模型「Conan-Embedding」,该模型已在C-MTEB上达到SOTA。
图1 C-MTEB榜单结果
模型链接
Conan-embedding-v1 是由腾讯BAC团队开发的Embedding模型,现已在Hugging Face平台开源,欢迎试用和探索。
评测榜单
MTEB Leaderboard 提供了一个展示不同Embedding模型性能的排行榜,由Hugging Face社区维护。
背景介绍
Embedding技术是将高维数据转换为低维向量表示的方法,它在自然语言处理和计算机视觉等多个领域都有广泛的应用。在文本处理中,Embedding技术可以将词或短语转换为固定长度的向量,这些向量能够捕捉词义和上下文信息。Embedding模型能够计算句子间的相似度,进而应用于检索、分类、召回和排序等多种任务。 随着技术的发展,Embedding模型取得了显著的进展。例如,Word2Vec和GloVe等模型能够生成高质量的词嵌入向量。Transformer架构的出现进一步推动了Embedding模型的进步,BERT、GPT等预训练语言模型通过大规模数据集训练,生成了更加丰富和精确的词嵌入表示。
主要方法
Embedding模型的训练通常依赖于对比学习,其中负样本的质量对模型性能至关重要。难负例挖掘是一种利用Teacher模型来寻找与Query有一定相关性但不如正样本相关的段落的方法,这使得对比损失更难区分正例和负例。尽管难负例挖掘在Embedding工作中非常重要,但这些方法往往被忽视,研究通常集中在模型架构、微调方法和数据选择上。
训练方法概览
在弱监督训练阶段,我们收集了7.5亿对数据集,并从中精选出4亿对。进入有监督训练阶段后,采用了动态难负例挖掘策略以实现对模型更加精准的微调。
Language Embedding模型训练流程
Language Embedding模型的训练通常采用一个多阶段方案,包括弱监督下的预训练阶段和有监督下的精调训练阶段。本项目严格遵循这一训练方式,将整个训练过程细分为预训练与微调两个阶段,具体训练流程如下:
预训练
-
数据准备
-
如图2(a)所示,在预训练阶段初期,我们依据Internlm2.5中阐述的标准数据过滤方法对原始数据集进行了处理。这一过程涉及多个步骤:首先是文档提取与语言识别,用于数据的初步格式化;随后,文本会经历基于规则的规范化及启发式过滤;接着,采用MinHash技术去除重复项;在安全过滤环节,则实施了域名阻止、毒性内容分类以及色情内容分类等措施;最后,在质量过滤阶段,通过广告分类和流畅度分类进一步确保了输出文本的质量。经过上述一系列严格过滤,最终筛选出了大约4.5亿对数据,留存率约为60%。
-
数据评分
-
bge-large-zh-v1.5是由智源发布的一个广受认可的基础embedding模型。鉴于其在数据评分方面的卓越表现,我们决定利用该模型对经过标准过滤后的每条数据进行评估。任何得分低于0.4的数据条目都将被剔除。此评分机制帮助我们进一步筛选出了约4亿对数据,留存率达到了89%。
-
损失函数
-
为了确保预训练阶段能高效而全面地利用数据,我们选择了InfoNCE Loss with In-Batch Negative作为损失函数。这种方法不仅有助于提升模型学习到的数据表征能力,还能够在一定程度上避免过拟合问题。 以上即为本项目在Language Embedding模型训练方面的主要方法论。
在机器学习领域,尤其是深度学习中,In-Batch Negative InfoNCE Loss是一种常用的对比学习损失函数,旨在通过mini-batch中的数据样本来优化模型的学习过程。### 基本原理 -
正样本与负样本
-
正样本是指与目标样本具有相同标签或高度相关性的样本。
-
负样本则是指与目标样本不同或不相关的样本。
-
在每个mini-batch中,除了目标样本的正样本外,其他所有样本都被视作负样本。
-
通过这种方法,可以最大化正样本对之间的相似度,同时最小化负样本对之间的相似度,从而提升模型的判别能力。
应用场景
-
有监督精调
-
在微调阶段,根据不同下游任务的需求进行特定任务的微调。
-
任务主要分为两大类:检索任务和语义文本相似性(STS)任务。
-
对于检索任务,通常采用InfoNCE Loss作为损失函数。
-
STS任务则涉及到判断两段文本之间的相似程度,常用交叉熵损失作为损失函数。
-
根据先前研究的结果,发现CoSENT损失在STS任务上的表现略优于传统的交叉熵损失,因此推荐在STS任务中使用CoSENT损失进行优化。
在Embedding模型的训练过程中,动态难负例挖掘是一种提高训练效率和效果的方法。传统的难负例挖掘方法通常在数据预处理阶段进行,为query选择与正样本有一定相关性但不如正样本相关的段落作为负样本。然而,这种方法的问题在于,随着训练的进行,模型权重不断更新,原有的难负例可能会变得不再困难,从而影响训练效果。
为了解决这个问题,我们提出了一种动态难负例挖掘方法。对于每个数据,我们记录当前难负例与Query的平均分数。每100次迭代后,如果分数的1.15倍小于初始分数且分数绝对值小于0.8时,我们就认为该负例不再困难,并进行新一轮的难负例挖掘。每次进行动态难负例挖掘时,如果需要替换难负例,我们使用到个案例作为负样本,其中表示第次替换,表示每次使用的难负例数。整个过程产生的成本仅相当于一个step迭代。相比于In-Batch Negative InfoNCE Loss,我们认为更高质量(更符合当前模型权重下)的难负例更为重要。
图3展示了动态难负例挖掘与标准难负例挖掘的样本正负例Score
- Steps变化曲线。可以看到,随着步数的增加,Standard-HNM的负例评分不再下降,而是出现震荡,这表明模型对该批负例的学习已完成。而Dynamic-HDM在检测到负例学习完毕后,会进行难负例的替换。
图3:动态难负例挖掘与标准难负例挖掘的样本正负例Score-Steps变化曲线分析
动态难负例挖掘机制: 在模型训练过程中,每100个步骤(steps)会进行一次难负例的检查。具体来说,如果一个负例的分数变为其初始得分的1.15倍以下,并且其分数的绝对值小于0.8,那么这个负例将不再被认为是困难的,并会被新的难负例所替换。 跨GPU的Batch均衡训练: 这一部分内容强调了在多GPU环境下进行训练时,如何保持Batch的均衡性,以提高训练效率和模型性能。
动态难负例挖掘流程
-
定期检查:训练过程中,每100个步骤对难负例进行一次检查。
-
评估标准:如果负例的分数低于其初始得分的1.15倍,并且分数的绝对值小于0.8,则认为该负例不再困难。
-
替换机制:对于不再困难的负例,将被新的难负例替换,以保持训练的挑战性。
跨GPU的Batch均衡训练要点
-
多GPU环境:在多个GPU上进行模型训练时,需要特别注意Batch的均衡分配。
-
效率与性能:保持Batch均衡有助于提高训练效率和模型的整体性能。
-
均衡策略:具体的均衡策略需要根据实际的硬件配置和训练需求来定制。
跨GPU的Batch均衡训练
对于Retri任务,通过利用多个GPU来合并更多的难负例,可以提高模型性能。而对于STS任务,则通过增加BatchSize来包含更多的样本,以促进模型学习更加鲁棒的排名关系。 为了进一步提高难样本的利用率,我们引入了跨GPU批次平衡损失(Cross-GPU Batch Balancing, CBB)。传统的训练方法往往在每次迭代中随机选择一个任务进行训练,比如在iter0中对STS样本应用STS对应的损失函数进行反向传播以获取梯度并更新权重,而在iter1中可能转而处理Retri或CLS任务。这种顺序随机任务训练方式可能导致单次优化搜索空间与嵌入模型的全局优化目标不匹配,进而引起训练过程中的不稳定性和难以达到全局最优解的问题。 鉴于此,我们的解决方案是在每一次前向-损失-后向-更新的过程中均匀地引入所有任务,以确保优化过程中的搜索空间稳定,并尽可能使每次模型更新的方向与全局最优解保持一致。CBB策略不仅加强了不同GPU间的协作,同时也促进了不同任务间的协同工作,从而实现了更优的Batch均衡效果。 如图4所示,为了在检索任务中充分利用更多的难样本,我们确保每个GPU(即gpu0、gpu1、gpu2、gpu3)拥有不同的负样本,同时共享相同的查询样本和正样本。对于Retri任务,每个GPU会计算其对应Batch的损失值,随后这些损失值会被汇总至gpu1上。至于STS任务,则在gpu4上执行,并计算相应的损失值。最后,所有任务的损失值被汇总起来,计算出该迭代周期内的综合CBB损失值。
Conan-Embedding模型概述
评分函数
在Conan-Embedding模型中,查询(Query)和正样本段落之间的相似度评分函数通常采用余弦相似度来定义。该函数基于两者共享的GPU数量,并通过一个缩放温度参数进行调整,经验性地设置为0.8。
实验细节
模型架构
Conan-Embedding基于BERT模型,并使用全连接层(FC Layer)将输出维度从1024扩展到1792,模型参数量为326M。最大输入长度为512个token。受OpenAI的text-embedding-v3启发,采用多尺度表征学习(MRL)技术,配置表示维度为256、512、768、1024、1536和1792,以提升模型性能和鲁棒性。
训练效率
采用混合精度训练和DeepSpeed ZERO-Stage 1以提高效率。
预训练阶段
使用AdamW优化器,初始学习率为1e-5,Warmup为0.05,Decay为0.001。预训练过程使用了64张华为Ascend 910B GPU,单次训练约138小时。
精调阶段
检索任务的BatchSize为4,STS任务的BatchSize为32,使用与预训练相同的优化器参数和学习率。精调过程使用了16张华为Ascend 910B GPU,单次训练约13小时。
数据情况
预训练数据概览
在预训练阶段,收集了约7.5亿个文本对,包括Wudao、Zhihu-KOL、SimCLUE等,涵盖标题-内容对、输入-输出对和问答对。高质量的LLM指令调优数据(如提示-响应对)经过规则过滤和筛选后,可以提升模型性能。此外,还利用现有文本语料库,使用LLM生成了一批数据。详细数据描述如下表所示: 表1 预训练数据概览
数据类型 | 描述 |
---|---|
标题-内容对 | |
输入-输出对 | |
问答对 | |
提示-响应对 | |
在精调阶段,为了增强模型对多种任务的适应性,我们选择了Retri、CLS和STS这三种常见的数据集。具体来说,对于分类(CLS)任务,我们将它与检索(Retri)任务合并处理:将同一类别的数据作为文本正例,而将不同类别的数据作为文本负例。这样的处理方式有助于模型更好地学习区分不同类别的特征。下表展示了微调阶段使用的数据量概览。
为了验证我们方法的有效性,我们在CMTEB基准上进行了详尽的消融实验。实验结果如下表所示,动态难负样本挖掘(DHNM)和跨GPU批次平衡(CBB)策略均显著优于直接微调模型的Vanilla方法。此外,Conan-Embedding在Retri和Rerank任务中也表现出了显著的性能提升,这表明随着负样本数量的增加和质量的提高,模型能够接触到更多具有学习价值的难负样本,从而有效提升了其召回能力。
模型比较说明
在预训练阶段结束后,我们对结果进行了评估。以下是三种不同方法的描述:
-
Baseline:表示预训练后的结果。
-
Vanilla:表示直接使用标准对比和CoSENT损失进行微调的模型。
-
DHNM:表示仅使用动态硬负挖掘方法的模型。
-
CBB Loss:表示仅使用跨GPU批次平衡损失的模型。
C-MTEB结果
MTEB(Massive Text Embedding Benchmark)是评估大规模文本Embedding模型的最权威和最流行的基准。C-MTEB是MTEB的一个子集,专门针对中文Embedding评估。它包含35个数据集,覆盖6个类别:分类、聚类、文本对分类、重排序、检索和STS。 我们的模型在C-MTEB基准上与其他模型的比较结果如下表所示。我们的模型在几乎所有任务上都超越了之前最先进的模型,包括参数量更大的Decoder-Only模型。
表4:C-MTEB结果
模型 | 任务1 | 任务2 | … | 任务35 |
---|---|---|---|---|
Baseline | ||||
… | ||||
Vanilla | ||||
… | ||||
DHNM | ||||
… | ||||
CBB Loss | ||||
… | ||||
最先进的模型 | ||||
… | ||||
Decoder-Only模型 | ||||
… | ||||
分析
为了有效评估跨GPU多任务批次均衡的效果,我们通过图5展示了采用CBB(Cross-Batch Balancing)策略前后的Loss-Iter曲线。具体来说,loss_retri
和loss_STS
分别表示在未启用CBB策略的情况下,多个任务按照迭代次数随机训练时,检索(Retrieval)和语义文本相似度(Semantic Textual Similarity, STS)两个任务的独立损失值。
观察结果
-
无CBB策略:在没有CBB策略的情况下,每个任务的损失值表现出明显的波动性,下降速度慢,且不同任务之间的同步性较差。这表明各任务间的优化目标存在差异,导致优化方向不一致,单个优化目标与整体优化目标不匹配。因此,简单地按序随机训练任务无法达到接近全局最优的结果。
-
启用CBB策略:相比之下,
loss_cross
代表了启用CBB策略后训练过程中的损失值变化。从图中可以看出,随着训练的推进,损失值呈现出较为平滑的下降趋势,最终的损失值为0.08,显著低于loss_retri
和loss_STS
之和(0.38)。这一结果表明,CBB策略不仅有助于减少训练过程中损失值的波动,还能加速损失值的下降,促进模型更快地达到更优解。
结论
CBB策略可以被视为一种有效的正则化技术,它有助于解决多任务学习中常见的优化目标不一致问题,提高模型训练的效率和效果。
图5展示了使用跨GPU多任务批次均衡(CBB)方法前后的损失曲线比较。在实际业务中,由于业务体系的庞大和标准的多变性,采用Embedding模型结合RAG技术是提升召回性能、快速适应标准变化和降低训练成本的有效途径。此外,Embedding模型也能在多业务场景下独立提供召回服务。我们已上线Conan-Embedding推理服务,并正在推进其在各种实际业务中的应用。欢迎大家联系我们使用Conan-Embedding,并提出宝贵意见。为了帮助大家系统学习大模型LLM,我整理了AI大模型的学习资源,包括入门思维导图、精品学习书籍手册、视频教程以及实战录播视频等,免费提供给大家。
篇幅有限,部分资料如下:
👉LLM大模型学习指南+路线汇总👈
💥大模型入门要点,扫盲必看!
💥既然要系统的学习大模型,那么学习路线是必不可少的,这份路线能帮助你快速梳理知识,形成自己的体系。
路线图很大就不一一展示了 (文末领取)
👉大模型入门实战训练👈
💥光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉 国内企业大模型落地应用案例集锦 👈
💥 《中国大模型落地应用案例集》概览
-
收录案例数量:两本《中国大模型落地应用案例集》共收录了151个案例。
-
案例时间跨度:这些案例均为近两年的优秀实践。
-
案例覆盖领域:案例覆盖了金融、医疗、教育、交通、制造等多个行业。 案例集的价值:
-
研究者视角:对于大模型技术的研究者来说,这些案例提供了丰富的实践参考。
-
业内人士视角:对于希望了解大模型技术在实际业务中应用的业内人士,这些案例具有重要的借鉴意义。 获取方式:
-
文末提供了领取《中国大模型落地应用案例集》的方式。
👉GitHub海量高星开源项目👈
💥收集整理了海量的开源项目,地址、代码、文档等等全都下载共享给大家一起学习!
👉LLM大模型学习视频👈
💥观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。 (文末领取)
📚 640份大模型行业报告(持续更新)
💥 报告概述
-
数量:640份
-
涵盖范围:从AI大模型的理论研究到技术实现,再到广泛的行业应用。
-
目标读者:科研人员、工程师以及所有对AI大模型有兴趣的爱好者。
-
价值:为读者提供深入的洞察与最新的信息,帮助理解并探索AI大模型领域的前沿动态。
🌟 特色亮点
-
全面覆盖:无论是基础理论还是最新技术,该报告合集都提供了详尽的解析。
-
持续更新:随着领域的发展,报告将不断更新,确保内容的时效性和相关性。
-
实用导向:除了理论知识,还有大量实际案例分析,有助于理论联系实际。
📚 获取方式
- 访问我们的官方网站或指定平台,下载您感兴趣的部分。
🛑 注意事项
- 在使用这些报告时,请确保遵守相关的版权法律法规。
希望这套报告能够成为您在AI大模型领域探索旅程中的得力助手。
👉获取方式:
这份完整版的大模型 LLM 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek002/post/202411/%E6%8E%A2%E7%B4%A2%E6%9B%B4%E5%BC%BA%E4%B8%AD%E6%96%87Embedding%E6%A8%A1%E5%9E%8BConan-Embedding--%E7%9F%A5%E8%AF%86%E9%93%BA/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com