embedding 模型如何训练
通用模型的内部向量并不等于一个好的 embedding。对比目标到底在优化什么,以及为什么难负样本决定成败。
你可能会以为 embedding 就是从语言模型内部取出来的一个向量。这么做当然可以,但结果很平庸。一个被训练来做下一 token 预测的模型,它的内部空间是为预测组织的,而不是为 embedding 真正的用途组织的:衡量两段文本是否含义相同。要得到一个好的 embedding 模型,就得专门朝这个方向训练——而做到这一点的目标函数是对比式的,其中有一个细节支配了其他一切。
embedding 需要什么,而预测不需要
检索用 embedding 的全部任务就是一个几何性质:含义相近的文本应该彼此靠近,含义不同的应该相隔很远,这样按距离做的相似度检索才能真正召回相关内容。
下一 token 预测模型从来没有为此优化过。它的内部表示是为了预测后续内容而成形的,于是意思相同但后续不同的两句话可能离得很远,而后续相似但意思不同的两句可能挨得很近。应急能用,做检索是错的。解决办法不是什么更聪明的取值技巧,而是一个直指距离性质的不同训练目标。
把对比目标用在文本上
训练思路就是那套用来对齐图像和描述文字的对比学习,只不过对准了文本对。你需要一些应该靠近的例子:
- 一个问题和一段能回答它的文字
- 同一句话的两种改述
- 一次查询和一篇用户真的点开了的文档
这些是正样本对(positive pairs)——应该彼此靠近的文本。训练把每一对正样本拉近,同时把它们推离批里的其他文本。经过几百万对之后,空间重新组织,「含义相同」变成了「位置邻近」,而这正是检索需要的性质。
正样本是容易想清楚的那一半。负样本——你要把它推开的那些——才是一好一坏的 embedding 模型分出胜负的地方。
为什么难负样本就是全部
拿到负样本最简单的办法,就是把批里其他每一段文本都当成负样本:对某个查询来说,它自己的那段文字是正样本,别人的都是负样本。这行得通,但这些负样本太容易了。随机一段文字通常和查询明显无关,模型几乎不费力气就学会了区分它们——在这个过程中也几乎没学到什么有用的东西。
真实检索里重要的区别都很细微。两段文字可能都提到了查询的关键词,但只有一段真正回答了它。如果模型一直只和随机、明显错误的负样本较劲,它就从来不需要学这个区别,而它在生产环境里恰恰就栽在这里。
**难负样本(hard negatives)**就是解法:与查询相似但错误的文本——同一主题、同一套词汇,但不是真正的答案。拿它们做训练,会逼模型去编码「切题」与「正确」之间那点细微差别,而检索质量恰恰取决于这点差别。CLIP 那套做法可以靠超大批次来获得负样本,文本检索却是生死系于刻意挖掘出的难负样本。
挖掘,以及它的风险
难负样本不会自己送上门——你得去找。标准做法是用一个现成的检索器取出某个查询的头部结果,把其中不是已知答案的那些当作难负样本。按构造来说,它们就是那些容易混淆的擦肩而过。
这里有个真实的风险:假负样本(false negatives)。这样挖出来的「难负样本」,实际上可能就是一个正确答案,只是没被标成正样本。训练会把它推开,等于教模型把一个正确答案当成错的——这会主动劣化这个空间。处理这件事——过滤、阈值、仔细标注——构成了打造一个好 embedding 模型的大部分实操手艺,也是高质量 embedding 数据集之所以值钱的原因。
要把握的平衡是:负样本要难到能教出真正的区别,又不能难到它们其实是伪装的正确答案。
塑造最终模型的几个选择
有几个决定决定了训练出来的 embedding 擅长什么:
什么算正样本,编码了你对相似的定义。用问答对训练,得到的就是为检索调好的模型;用改述对训练,得到的就是为语义等价调好的模型。这些配对就是任务定义。
对称还是非对称。 有些任务是同类对同类(两句话),有些是短对长(一个查询对一篇文档)。模型往往只为其中一种形态训练,而一个查询-文档模型在句对句比较上可能表现不佳,因为这两个任务的几何结构不同。
池化(pooling)。 模型为每个 token 产出一个向量;embedding 需要整个文本对应一个向量。怎么把它们合起来——取平均,或者指定一个汇总位置——是一个和训练目标一起端到端训练的设计选择。
一以贯之的主线是:定义 embedding 模型的与其说是它的架构,不如说是它被告知什么算相似。把这个定义和你的用例对上,再照看好负样本,剩下的就顺理成章。
要点回顾
- 通用模型的内部表示做不好 embedding,因为预测的几何结构不是相似度的几何结构——embedding 必须直接就距离来训练。
- 目标函数是对比式的:把正样本对(问答、改述、点击)拉近,把其他一切推远。
- 难负样本——相似但错误的文本——才是逼模型学会检索所依赖的那点「切题 vs 正确」区别的东西。
- 挖掘难负样本会带来假负样本的风险(未被标注的正确答案),而处理它们是大部分实操手艺所在。
- 正样本定义了相似的概念;对称性和池化塑造了模型擅长什么。
下一篇: 相似度检索