微信扫码
添加专属顾问
我要投稿
深入探索BGE模型技术亮点与预训练策略。核心内容:1. BGE模型技术亮点:高效预训练与多任务场景下的通用能力2. RetroMAE预训练算法:基于句子级别的句向量生成3. 编码与重建:RetroMAE预训练步骤详解
点击上方“海边的拾遗者”,选择“星标”公众号
第一时间获取价值内容
04
第四部分 bge模型:采用RetroMAE预训练算法
2023年8月2日,北京智源人工智能研究院发布的中英文语义向量模型BGE(hf地址:https://huggingface.co/BAAI/bge-large-zh,GitHub地址:https://github.com/FlagOpen/FlagEmbedding/blob/master/README_zh.md),以下是BGE的技术亮点
4.1 RetroMAE的预训练步骤
目前主流的语言模型的预训练任务都是token级别的,比如MLM或者Seq2Seq,但是这种训练任务难以让模型获得一个高质量的基于句子级别的句向量,这限制了语言模型在检索任务上的潜力。针对这个弊端,目前有两者针对检索模型的预训练策略
所谓编码,即Mask(EN)掉一小部分token然后通过BERT编码得到句子嵌入sentence embedding,具体步骤如下
4.1.2 解码Decoding
有个细节是,这里的Mask(DE)输入带上位置嵌入了,即句子嵌入[图片]和带有位置的掩码输入被组合成以下序列 [图片]
其中,[图片],表示[图片]的嵌入,在[图片]的基础上增加了一个额外的位置嵌入p
接下来,通过优化以下目标,学习解码器[图片]来重构原始句子X [图片]
其中,CE是交叉熵损失
由于在解码器部分采用了极其简单的网络结构跟非常激进的mask比例,从而使得解码任务变得极具挑战性,迫使encoder去生成高质量的句向量才能最终准确地完成原文本重建
前面提及的解码策略有一种缺陷,就是训练信号只来源于被mask掉的token,而且每个mask掉的token都是基于同一个上下文重建的。于是研究人员提出了一种新的解码方法:Enhanced Decoding,具体做法如下
a) 首先生成两个不同的输入流H1(query)跟H2(context)
其中是句子嵌入,
是标记嵌入(在这个地方没有标记被掩码),
是位置嵌入相当于
是sentence embedding + Position embedding
为sentence embedding和token embedding + position embedding
其中一个和常规decoder不一样的地方是,H1作为Q,H2作为KV
H1中的每个token embedding去H2中查找比较重要的上下文:包括H2被采样到的 token,以及初始token embedding都能看到[这里的初始embedding就是sentence embedding],至于对角线上的因代表的各自自身,故看不到
为方便大家更好、更快的理解,我再举个例子,比如:
最终RetroMAE的损失由两部分相加得到,其一是encoder部分的MLM损失,其二是deocder部分自重建的交叉熵损失
4.2 bge模型的微调
数据格式
{"query": str, "pos": List[str], "neg":List[str]}
难负样本挖掘
难负样本是一种广泛使用的提高句子嵌入质量的方法。可以按照以下方法挖掘难负样本
python -m FlagEmbedding.baai_general_embedding.finetune.hn_mine \
--model_name_or_path BAAI/bge-base-en-v1.5 \
--input_file toy_finetune_data.jsonl \
--output_file toy_finetune_data_minedHN.jsonl \
--range_for_sampling 2-200 \
--use_gpu_for_searching
python -m FlagEmbedding.baai_general_embedding.finetune.hn_mine \
--model_name_or_path BAAI/bge-base-en-v1.5 \
--input_file toy_finetune_data.jsonl \
--output_file toy_finetune_data_minedHN.jsonl \
--range_for_sampling 2-200 \
--use_gpu_for_searching
近日,智源发布了BGE家族新成员——通用语义向量模型BGE-M3(其开源仓库及技术报告、模型链接)
多语言Multi-Linguality 支持超过100种语言,具备领先的多语言、跨语言检索能力
具体而言,BGE-M3训练集包含100+种以上语言,既包含每种语言内部的语义匹配任务(Language X to Language X),又包含不同语言之间的语义匹配任务(Language X to Language Y)
丰富且优质的训练数据帮助BGE-M3建立了出色的多语言检索(Multi-Lingual Retrieval)与跨语言检索能力(Cross-Lingual Retrieval)
2. 多粒度Multi-Granularity 全面且高质量地支撑“句子”、“段落”、“篇章”、“文档”等不同粒度的输入文本,最大输入长度为 8192
具体而言,BGE-M3目前可以处理最大长度为8192 的输入文本,极大地满足了社区对于长文档检索的需求。在训练BGE-M3时,智源研究员在现有长文本检索数据集的基础之上,通过模型合成的方式获取了大量文本长度分布多样化的训练数据
与此同时,BGE-M3通过改进分批(batch)与缓存(cache)策略,使得训练过程具备足够高的吞吐量与负样本规模,从而确保了训练结果的质量。基于数据与算法双层面的优化处理,BGE-M3得以高质量的支持“句子”、“段落”、“篇章”、“文档”等不同粒度的输入文本
3. 多功能Multi-Functionality 一站式集成了稠密检索、稀疏检索、多向量检索三种检索功能
4.3.2 训练数据
在训练数据上,包括
“You are a curious AI assistant, please generate one specific and valuable question based on the following text.
The generated question should revolve around the core content of this text, and avoid using pronouns (e.g., ”this”). Note that you should generate only one question, without including additional content:”
如BGE模型一致,BGE-M3模型训练分为三个阶段:
从形式上看,在给定一个x表示的查询q时,从语料库[图片]中检索出以y表示的文档[图片]:
其中
[图片]属于密集检索、稀疏/词汇检索或多维检索中的任何一种函数
y可以是另一种语言,也可以是与x相同的语言
M3-Embedding统一了嵌入模型的所有三种常见检索功能,即稠密检索、词性(稀疏)检索和多向量检索
故,查询和段落之间的相关性得分是通过两个嵌入式eq和ep之间的内积来衡量:
slex,在词汇检索上,输出嵌入式也用于估算每个词条的重要性
而估算词的重要程度,可以方便词汇检索 具体而言,对于查询中的每个术语t(一个术语对应一个token),术语权重的计算公式为如下:
其中是将隐藏状态映射到浮点数的矩阵 如果一个术语t在查询中出现多次,只保留其最大权重,用同样的方法计算段落中每个术语的权重 在估算术语权重的基础上,查询和段落之间的相关性得分由查询和段落中共存术语(表示为
,也就是交集)的联合重要性计算得出(Based on the estimation term weights, the relevance score between query and passage is computed by the joint importance of the co-existed terms (denoted as q ∩ p) with in the query and passage):
进一步对修正后的损失函数进行积分和归一化处理:
整个训练过程是一个两阶段的工作流程,如下所示:
首先,使用弱监督数据对文本编码器进行预训练,其中只有密集检索是以对比学习的基本形式进行训练的
其次,自我知识蒸馏应用于第二阶段,在此阶段对嵌入模型进行微调,以建立三种检索功能。在这一阶段中,将使用标注数据和合成数据,并根据ANCE方法为每个查询引入硬负样本
由于引入了大量文本长度差异极大的训练数据,常规的对比学习训练方法的效率非常低下 一方面,长文本会消耗相当多的显存,大大的限制了训练时的batch size 其次,短文本不得不填充至更长的长度以对齐同一批次的长文本,这样就引入了大量无意义的计算 此外,训练数据的长度差异容易使得不同GPU之间的计算负荷分布不均并引发相互等待,造成不必要的训练延时
→为了减少文本建模时的显存消耗,我们将一批数据分成多个小批。对于每个小批,我们利用模型编码文本,收集输出的向量同时丢弃所有前向传播中的中间状态,最后汇总向量计算损失。通过这种方式,可以显著增加训练的batch size(且当建模长文本或者向量模型很大时,都可以采用此来扩大batch size)
长文本优化
由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:
(1)点击页面最上方“海边的拾遗者”,进入公众号主页。
(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。
感谢支持,比心。
投稿或交流学习,备注:昵称-学校(公司)-方向,目前群人数过多,只能通过助手拉入技术交流群。
记得备注呦
方向有很多:面试内推、机器学习、深度学习,python,推荐算法,广告算法,搜索算法,多模态,大模型等。
推荐两个专辑给大家:
来都来了,喜欢的话就请分享、点赞、爱心三连再走吧~~~
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费场景POC验证,效果验证后签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-07-25
2025-01-01
2025-01-21
2024-05-06
2024-09-20
2024-07-20
2024-07-11
2024-06-12
2024-08-13
2024-12-26
2025-04-21
2025-04-19
2025-04-17
2025-04-15
2025-04-13
2025-04-10
2025-04-07
2025-04-03