Q2528RAG 检索增强真题解析RAG(检索增强生成)AgentAlpha 社区真题库约 8 分钟更新 2026-09-29

Embedding 有哪几种算法你了解过吗

Embedding 有哪几种算法你了解过吗

1️⃣ 考察意图

面试官想考察你对 Embedding 技术发展脉络的广度与深度,而非简单罗列算法名称。这是典型的“概念+工程取舍”题,刁钻点在于:你是否能区分静态与上下文嵌入的适用场景,并给出具体选型理由(如为什么 RAG 场景用 BERT 而非 Word2Vec)。答好了能展示你对表示学习从 Word2Vec 到多模态对齐的全局理解,以及在实际系统(如搜索、RAG)中做 trade-off 的硬实力。

2️⃣ 标准答

Embedding 算法按发展阶段和特性可分为三大类:静态嵌入、上下文嵌入和专用/多模态嵌入。下面逐一拆解,并给出工程选型建议。

1. 静态嵌入:Word2Vec、GloVe、FastText

  • Word2Vec:核心是 CBOW(上下文预测当前词)和 Skip-gram(当前词预测上下文)。训练快,适合大规模语料。但缺点明显:词向量固定,无法处理一词多义(如“苹果”既指水果又指公司)。
  • GloVe:基于全局词共现矩阵,利用矩阵分解学习词向量。相比 Word2Vec 的局部窗口,GloVe 能捕捉全局统计信息,在类比任务上表现更好。但同样无法解决多义词问题。
  • FastText:引入子词(subword)嵌入,将词拆成字符 n-gram。优势:能处理 OOV(未登录词),对形态丰富的语言(如德语、中文)更友好。工程取舍:子词嵌入增加了模型参数量,训练速度比 Word2Vec 慢 2-3 倍,但召回率提升约 5-10%(通用知识)。

2. 上下文嵌入:ELMo、BERT、GPT

  • ELMo:基于双向 LSTM,生成动态词向量。每个词的表示取决于上下文,解决了多义词问题。但 LSTM 的序列计算导致推理慢,且无法并行。
  • BERT:Transformer 双向编码,通过 Masked Language Model 预训练。输出是上下文相关的 token 级向量。实际落地的坑:BERT 的 [CLS] 向量用于句子级任务时,效果常不如平均池化(avg pooling),因为 [CLS] 在预训练中只用于分类,未充分优化句子表示。解法:在微调时显式添加句子级损失(如对比学习),或直接使用 Sentence-BERT 的池化策略。
  • GPT:单向自回归,适合生成任务。其 embedding 层在 RAG 中用于检索时,因单向注意力导致语义捕捉不完整,效果通常比 BERT 差 10-15%(通用知识)。

3. 专用/多模态嵌入:OpenAI ada-002、BGE、CLIP

  • OpenAI ada-002:1536 维,通用性强,适合英文 RAG。但成本高(每百万 token 约 $0.13),且无法本地部署。
  • BGE(BAAI):中文社区首选,支持多语言。BGE-large 在 MTEB 中文榜上领先,且开源可微调。工程取舍:BGE 的维度(1024)比 ada-002 低,但检索精度相当,适合对延迟敏感的场景(如实时搜索)。
  • CLIP:图文对齐模型,将图像和文本映射到同一向量空间。实际落地的坑:CLIP 对细粒度概念(如“红色跑车” vs “蓝色跑车”)区分能力弱,因为预训练数据中图像标签粗粒度。解法:用领域数据微调 CLIP,或结合视觉特征(如 ViT 的 patch 级向量)做二次匹配。

总结选型建议:

  • 静态场景(如关键词匹配、小规模语料):FastText 性价比最高,兼顾 OOV 和速度。
  • RAG/搜索:优先 BERT 类(如 Sentence-BERT)或 BGE,平衡精度与部署成本。
  • 多模态:CLIP 作为基线,微调后用于图文检索。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从三个层面回答:静态嵌入、上下文嵌入和专用/多模态嵌入。静态嵌入如 Word2Vec 和 FastText,适合固定词义场景,但无法处理多义词;上下文嵌入如 BERT 和 ELMo,通过动态表示解决多义词问题,但推理成本高;专用嵌入如 BGE 和 CLIP,针对特定任务优化。总结一句:选型取决于场景——静态任务用 FastText,RAG 用 BERT 类,多模态用 CLIP。”

4️⃣ 高频追问 & 应对

追问 1:你提到 BERT 的 [CLS] 向量效果不好,那在 RAG 中具体用什么策略生成句子 embedding?

应对策略:常用三种策略:1)平均池化(avg pooling):对所有 token 向量取平均,简单且稳定,在 Sentence-BERT 中默认使用。2)对比学习微调:如 SimCSE,通过正负样本对训练,使相似句子向量更接近。3)加权池化:用注意力权重对 token 加权,如 BGE 的 last_hidden_state 加权。工程上,平均池化是安全基线,对比学习微调可提升 3-5% 召回率(通用知识),但需要标注数据。

追问 2:在电商搜索场景中,Word2Vec 和 BERT 的召回率差异有多大?为什么?

应对策略:Word2Vec 的召回率通常比 BERT 低 10-20%(通用知识),原因在于:1)Word2Vec 无法处理同义词(如“手机”和“移动电话”),而 BERT 通过上下文理解语义等价。2)Word2Vec 对长尾词(如“Type-C 充电线”)的 OOV 问题严重,FastText 虽能缓解但不如 BERT 的子词 tokenizer。但 Word2Vec 推理速度快 100 倍以上(通用知识),适合对延迟要求极高的场景(如毫秒级搜索)。

追问 3:CLIP 在图文检索中,为什么对细粒度概念区分弱?如何改进?

应对策略:CLIP 预训练数据(如 LAION-5B)的图像标签粗粒度,导致模型对颜色、材质等细节不敏感。改进方法:1)领域微调:用电商图文对(如“红色跑车” vs “蓝色跑车”)微调 CLIP,损失函数用 InfoNCE。2)多级匹配:先 CLIP 粗筛,再用 ViT 的 patch 级向量做细粒度匹配(如计算局部区域相似度)。3)引入文本增强:用 LLM 生成细粒度描述(如“红色金属漆跑车”),丰富训练数据。

5️⃣ 避坑 · 常见错误答法

  • ❌ 只罗列算法名称(如“Word2Vec、BERT、GPT”),不解释区别和适用场景。 → ✅ 按发展脉络分类,并给出每个算法的 trade-off(如静态 vs 动态、速度 vs 精度)。
  • ❌ 说“BERT 的 embedding 比 Word2Vec 好”,忽略场景差异。 → ✅ 明确说明:静态任务(如关键词匹配)用 FastText 更快,语义理解任务(如 RAG)用 BERT 更准。
  • ❌ 混淆 token embedding 和 sentence embedding,认为 BERT 的 [CLS] 直接可用。 → ✅ 指出 [CLS] 的局限性,并给出池化策略(平均池化、对比学习微调)。

6️⃣ 简历呼应

  • 如果你有 RAG 项目:从“选型对比”切入,比如“在 RAG 中,我对比了 BGE 和 OpenAI ada-002,发现 BGE 在中文场景下召回率相当,但成本降低 80%”。强调工程取舍(精度 vs 成本)。
  • 如果你只做过传统 NLP:用“静态到动态的演进”类比,比如“Word2Vec 像固定词典,BERT 像上下文感知的翻译器”。展示对表示学习本质的理解。
  • 如果你是校招无项目:聚焦“论文复现 demo”,比如“我复现了 Sentence-BERT 的对比学习训练,在 STS-B 任务上达到 85% 准确率”。突出动手能力和对细节的掌握(如池化策略)。
  • 《Efficient Estimation of Word Representations in Vector Space》(Word2Vec 原始论文)
  • 《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》
  • 《Learning Transferable Visual Models From Natural Language Supervision》(CLIP 论文)
  • 《BGE: A High-Performance Chinese Embedding Model》(BAAI 技术报告)
  • 《SimCSE: Simple Contrastive Learning of Sentence Embeddings》(对比学习微调)
—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。