AI2025-03-3125 分钟

构建文本嵌入模型

从 Sentence-BERT 到对比学习(SimCSE),再到 Matryoshka 嵌入和 MTEB 基准评估——系统讲解如何构建和优化高质量文本嵌入模型。

构建文本嵌入模型

构建文本嵌入模型

Q1. 为什么通过对比(相似/不相似样本)学习通常比仅学习相似样本能更有效地捕捉文本的语义或特定任务特征?

和 CLIP 的道理一样——只用正例会学到退化解(所有输入映射到同一点)。负例提供了“推力”,迫使模型学会区分不同语义的文本。比如学“猫和狗相似”不如学“猫和狗相似,但猫和汽车不相似”更有效,因为后者定义了相似性的边界。难负例(如“猫和狱狸不相似”)更能推动模型学到细粒度的语义差异。

Q2. 如何生成负例以提升模型性能?如何构建高质量的难负例,需要根据具体任务和数据来确定。

简单负例:同一batch内的其他样本自然作为负例(in-batch negatives),简单高效但太容易区分。难负例构建:1)用BM25检索与正例相似但不匹配的文档;2)用当前模型检索高分但错误的结果(在线挖掘);3)人工标注易混淆的样本对。注意难负例不能太难(否则可能是标注错误的正例),需要控制难度范围。

Q3. 双编码器和交叉编码器有什么区别?假设你需要构建一个大规模语义搜索引擎,你会优先选择哪种架构来计算查询与文档的相似度,为什么?

双编码器:query和文档分别编码为向量,算余弦相似度。文档向量可以离线预计算,检索时就是一次向量搜索,极快。交叉编码器:query和文档拼在一起联合编码,精度高很多但每对都要重新计算,无法预计算。大规模搜索引擎必须选双编码器做召回(百万级文档不可能每次都跟 query 拼接),然后用交叉编码器做重排序。

Q4. 多负例排序损失(MNR)、余弦相似度损失和softmax损失在训练嵌入模型时有哪些优缺点?在什么场景下,余弦相似度损失可能比MNR损失更合适?

MNR损失:用in-batch negatives做对比学习,batch越大效果越好,但需要大显存。余弦相似度损失:直接优化两个向量的余弦相似度接近目标值,适合有连续相似度标签的数据(如STS数据集),不需要负例。Softmax损失:把毄元选择当分类问题,稳定但灵活性低。余弦损失更适合的场景:有人工标注的相似度分数(而不是单纯的匹配/不匹配),或者数据量小不适合大batch的情况。

Q5. 为什么TSDAE选择使用特殊词元而非平均池化作为句子表征?

TSDAE是先编码再解码重建原句。用[CLS]特殊词元作为句子表征,它被迫把整个句子的信息压缩到一个向量里(因为解码器要从这一个向量重建整个句子)。平均池化会让信息分散在多个token中,每个token不需要承载全部信息,导致平均后的向量信息密度低。用单一词元的瓶颈设计能给予更强的训练信号,学到更紧凑的表征。

Q6. 相比有监督方法,TSDAE这类无监督预训练方法在处理领域外数据或进行领域适配时有何优缺点?

优点:1)不需要标注数据,只需要原始文本,领域适配成本极低;2)可以用目标领域的未标注文本做续训,快速适配新领域;3)学到的是通用的语义表征,泛化性好。缺点:1)没有任务监督信号,学到的表征可能不是任务最优的;2)在有充分标注数据时,效果通常不如有监督方法。实践中常用无监督做续训+少量标注数据微调的组合。

Q7. MTEB相比基础的语义相似度测试(STSB)有哪些改进?其中包括哪些类别的嵌入任务?

STSB只测一个维度(句子相似度),MTEB是多任务综合评测,更全面反映嵌入质量。包括的任务类别:1)语义文本相似度(STS);2)分类;3)聚类;4)重排序;5)检索;6)bitextmining(双语句对匹配);7)速度。改进在于:多任务、多数据集、多语言,避免了在单一任务上过拟合,更能反映模型的真实嵌入能力。

Q8. 如何根据用户偏好反馈数据,持续提升RAG系统的重排序模型性能,需要根据具体任务和数据来确定。

用用户点击/跳过行为作为隐式反馈,构建“查询-正例文档-负例文档”三元组训练数据。具体流程:1)记录用户点击的文档作为正例,展示但未点击的作为负例;2)用这些数据对重排序模型做对比学习微调;3)定期用新的反馈数据继续微调,实现持续优化。注意要处理位置偏差(用户倾向于点击靠前的结果)。

Q9. 如果一个RAG系统没有人类用户,仅供AI agent使用,如何自动收集AI agent的反馈,持续提升RAG系统的重排序模型性能,需要根据具体任务和数据来确定。

用agent的行为作为隐式反馈:1)跟踪agent实际引用了哪些检索文档,引用的为正例,未引用的为负例;2)让agent在生成回答后自评检索结果的有用性(打分);3)用任务完成质量作为间接反馈,如果任务失败,说明检索结果可能不好;4)用强模型判断弱模型的检索结果质量,生成训练数据。本质是把“人类点击”替换成“agent引用”。

Q10. 随着新数据和新概念的不断产生,如何检测何时需要更新文本嵌入模型,实现增量的持续学习,需要根据具体任务和数据来确定。

检测时机:1)监控检索质量指标(如MRR、召回率),显著下降时触发更新;2)检测新数据中的OOV(未见过的词/概念)比例,超过阈值时更新。增量学习:1)用新数据继续对比学习微调,但要混合旧数据缓解灾难性遗忘;2)用EWC等正则化方法限制重要参数的变化幅度;3)更新后要重新计算全部文档的嵌入向量,确保一致性。

RELATED

AI2025-04-01

为分类任务微调表示模型

深入讲解为分类任务微调表示模型的完整流程:分类头设计、全量微调 vs LoRA 的选择、小样本场景下的 SetFit 方案,以及过拟合防范与模型评估。

Read next25 分钟
AI2025-03-30

多模态大模型

解析多模态大模型的核心架构:CLIP 的对比学习、ViT 图像 patch 编码、图文跨模态对齐机制,以及 VQA、图像描述等多模态任务的技术方案。

Read next45 分钟