60 秒回答模板

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、线上点击或人工相关性评估,而不是只看预训练模型名。

考点 目标不同
难度 真实面经题
回答目标 讲清机制、训练与评估取舍

深入解析

01

先区分语言模型和检索模型

BERT-base 预训练让模型理解上下文 token,适合做分类、抽取、序列标注等下游任务的底座;检索 embedding 模型的目标是把整段文本压成可比较的向量,并让向量距离服务召回排序。两者训练目标不同。

02

BGE/GTE 训练强调正负样本

检索模型训练通常围绕 query、positive document 和 negative documents 组织。模型要拉近相关文本,推远不相关或难负样本。批内负样本、人工构造难负样本、弱监督点击数据和高质量语义对都会影响向量空间质量。

03

对比学习让余弦距离有意义

余弦检索要求向量方向能表达语义相关性。对比学习、排序损失或 InfoNCE 会直接优化相似度排序,让相关文本在归一化向量空间靠近。没有这类目标,余弦距离只是一个后处理选择,不代表模型已学会检索对齐。

04

原始 BERT 句向量有天然短板

BERT 的 [CLS] 在预训练中不是专门为通用句向量召回优化的,平均池化也不能自动解决问题。直接余弦可能受各向异性、词面重叠、文本长度和领域差异影响,难以区分语义相近但词不同或词相近但意图不同的样本。

05

实际系统还要考虑使用方式

Embedding 模型通常要明确 query 和 document 的输入模板、是否加指令前缀、向量维度、归一化、ANN 索引、召回阈值和 rerank 连接方式。训练目标和线上检索链路要一致,否则离线向量相似度好看也未必带来业务收益。

06

评估要看检索指标

判断模型好坏应看 Recall@K、MRR、NDCG、人工相关性、难负样本命中、跨领域泛化和线上指标。不要因为 BERT-base 参数更多或更经典,就默认它做向量召回更好。

易错点

  • 认为只要是 BERT 输出的向量,余弦距离就天然表示语义相关性。
  • 只讲模型结构,不讲 query-doc 正负样本、对比学习和 hard negative。
  • 把 BGE/GTE 说成一定是某个固定训练配方,忽略不同版本和数据细节可能不同。
  • 用分类准确率评价召回模型,不看 Recall@K、MRR、NDCG 和相关性标注。
  • 忽略输入模板、归一化、向量维度和 ANN 索引对线上效果的影响。
  • 把召回和 rerank 混为一谈,要求双塔 embedding 完成所有精排判断。

面试官追问

BERT 经过微调后能不能做召回?

可以。关键不是 BERT 架构不能用,而是要用检索相关的正负样本、对比学习或排序目标训练成 sentence embedding 或 dual encoder。

难负样本为什么重要?

随机负样本往往太容易,模型只学到粗粒度主题差异。难负样本能逼模型区分词面相似但语义不相关、或领域内细粒度意图不同的文本。

双塔召回和 cross-encoder rerank 有什么区别?

双塔先离线编码文档,线上编码 query 后做 ANN 召回,速度快;cross-encoder 同时看 query 和 document,交互更充分但成本高,通常用于 rerank。

为什么 embedding 模型常做向量归一化?

归一化后点积等价于余弦相似度,减少向量范数对检索的干扰,也更适合许多对比学习目标和向量索引。