真实面经题目 · 原创解析
BGE/GTE 这类 Embedding 模型如何训练,为什么不能直接用 BERT-base 余弦召回?
这题考检索向量模型的训练目标差异,重点是 BGE/GTE 这类 embedding 模型面向语义召回训练,而原始 BERT-base 不天然适合直接做余弦检索。
真实面经题目 · 原创解析
这题考检索向量模型的训练目标差异,重点是 BGE/GTE 这类 embedding 模型面向语义召回训练,而原始 BERT-base 不天然适合直接做余弦检索。
BGE、GTE 这类 embedding 模型通常是面向检索和语义匹配训练的双塔或编码器模型,目标是让相关 query-doc、句对或文本对在向量空间里更近,不相关样本更远。训练数据会包含查询与正样本、难负样本、批内负样本,常用对比学习、排序损失、InfoNCE 或多任务语义匹配目标,并在向量归一化、hard negative mining、指令前缀和多领域数据上做适配。BERT-base 的预训练目标主要是 masked language modeling 等语言理解目标,它学到的是上下文 token 表示,不保证 [CLS] 或平均池化后的句向量适合余弦距离召回。直接拿 BERT-base 算余弦,常见问题是向量各向异性强、query 和 document 没有被检索目标对齐、难负样本区分差、长短文本尺度不稳。更合理的做法是用专门的 embedding 模型,或在 BERT 基础上用检索数据做 sentence embedding/dual encoder 微调,并用 Recall@K、MRR、NDCG、线上点击或人工相关性评估,而不是只看预训练模型名。
BERT-base 预训练让模型理解上下文 token,适合做分类、抽取、序列标注等下游任务的底座;检索 embedding 模型的目标是把整段文本压成可比较的向量,并让向量距离服务召回排序。两者训练目标不同。
检索模型训练通常围绕 query、positive document 和 negative documents 组织。模型要拉近相关文本,推远不相关或难负样本。批内负样本、人工构造难负样本、弱监督点击数据和高质量语义对都会影响向量空间质量。
余弦检索要求向量方向能表达语义相关性。对比学习、排序损失或 InfoNCE 会直接优化相似度排序,让相关文本在归一化向量空间靠近。没有这类目标,余弦距离只是一个后处理选择,不代表模型已学会检索对齐。
BERT 的 [CLS] 在预训练中不是专门为通用句向量召回优化的,平均池化也不能自动解决问题。直接余弦可能受各向异性、词面重叠、文本长度和领域差异影响,难以区分语义相近但词不同或词相近但意图不同的样本。
Embedding 模型通常要明确 query 和 document 的输入模板、是否加指令前缀、向量维度、归一化、ANN 索引、召回阈值和 rerank 连接方式。训练目标和线上检索链路要一致,否则离线向量相似度好看也未必带来业务收益。
判断模型好坏应看 Recall@K、MRR、NDCG、人工相关性、难负样本命中、跨领域泛化和线上指标。不要因为 BERT-base 参数更多或更经典,就默认它做向量召回更好。
可以。关键不是 BERT 架构不能用,而是要用检索相关的正负样本、对比学习或排序目标训练成 sentence embedding 或 dual encoder。
随机负样本往往太容易,模型只学到粗粒度主题差异。难负样本能逼模型区分词面相似但语义不相关、或领域内细粒度意图不同的文本。
双塔先离线编码文档,线上编码 query 后做 ANN 召回,速度快;cross-encoder 同时看 query 和 document,交互更充分但成本高,通常用于 rerank。
归一化后点积等价于余弦相似度,减少向量范数对检索的干扰,也更适合许多对比学习目标和向量索引。