六:Embedding 与常用编码方法¶
来源:http://mp.weixin.qq.com/s?__biz=MzYyNTk3Njg1NA==&mid=2247483808&idx=1&sn=dcd578534b98eb97c22feddf8d5b2ea1&chksm=f01eb2d9c7693bcfbe8ed5fd4f082582e6d373bca1cc7ebab709adceb9bb98c636d93e9595c6#rd
1. 学习定位¶
Embedding 是把离散对象映射到连续向量空间的方法。在大模型基础中,Embedding 既包括输入层的 token embedding,也包括用于语义检索、RAG、推荐、聚类、去重、相似度匹配的文本 embedding。 第六天的重点是“常用编码方法”。这里的“编码”不是 tokenizer 的 tokenization,而是把词、句子、段落、文档或 query 映射成向量表示:
离散文本或对象
-> encoder / embedding model
-> dense vector
-> similarity search / classification / retrieval / clustering
-
上下文表示:ELMo、BERT/Transformer hidden states、pooling。
-
现代文本 embedding:SBERT、SimCSE、BGE、E5、CONAN、对比学习与 hard negatives。
面试中 Embedding 常被问到: - embedding 和 one-hot 的区别。
-
Word2Vec 的 CBOW、Skip-gram、negative sampling。
-
GloVe 如何利用全局共现统计。
-
FastText 如何利用子词信息处理 OOV。
-
静态 embedding 和上下文 embedding 的区别。
-
句向量如何从 token hidden states 得到。
-
bi-encoder、cross-encoder、reranker 的区别。
-
contrastive loss、in-batch negatives、hard negatives 的作用。
-
BGE/CONAN 这类 embedding 模型如何服务 RAG 检索。
-
embedding 评测指标和常见工程问题。
2. Embedding 的基本定义¶
Embedding 的本质是一个映射函数:
其中x 可以是 token、word、sentence、document、image、user、item、query 等对象。输出向量通常是低维稠密实数向量,例如 128、384、768、1024、4096 维。
对于 NLP,embedding 的目标是让语义、句法、主题或任务相关相似的对象在向量空间中更接近。
例如:
在检索场景中,query 和 document 被编码到同一个向量空间,相关文档应该和 query 更接近。
3. One-Hot 编码¶
one-hot 是最简单的离散编码。假设词表大小为 V,每个 token 对应一个长度为 V 的向量,只有该 token 对应位置为 1,其余为 0。
示例:
-
向量稀疏,计算和存储低效。
-
任意两个不同 token 的距离相同,无法表达语义相似性。
-
无法处理词表外词。
Embedding table 可以看作从 one-hot 到稠密向量的线性映射:
实际实现不会构造 one-hot,而是直接按 token id 查表。4. Embedding Table 与神经网络输入¶
在 Transformer 中,token id 通过 embedding table 变成输入向量:
input_ids: [B, T]
embedding_table: [V, d_model]
hidden = embedding_table[input_ids]
hidden: [B, T, d_model]
5. 静态 Embedding 与上下文 Embedding¶
静态 embedding 为每个词分配一个固定向量。不管上下文如何变化,同一个词的向量不变。
这会带来多义词问题。bank 在“river bank”和“bank account”中含义不同,但静态词向量无法区分。
上下文 embedding 则由模型根据句子上下文动态生成:
Transformer hidden states 就是典型上下文表示。现代 LLM 内部的 token 表示会随上下文变化。
6. Word2Vec 总览¶
Word2Vec 是经典神经词向量方法,核心思想是通过局部上下文预测学习词表示。它基于分布式假设:
也就是:语义相似的词往往出现在相似上下文中。 Word2Vec 有两个经典结构: - CBOW:用上下文预测中心词。- Skip-gram:用中心词预测上下文。
训练后,词向量可以捕捉一定语义和句法规律,例如相似词接近、类比关系等。
7. CBOW¶
CBOW 是 Continuous Bag-of-Words。它用上下文词预测中心词。 示例句子:
如果中心词是learning,上下文是:
CBOW 的目标是:
它通常把上下文词向量平均或求和,然后预测中心词。CBOW 训练速度较快,对高频词表现较好,但对稀有词的建模可能不如 Skip-gram。
8. Skip-Gram¶
Skip-gram 用中心词预测上下文词。 目标是:
例如中心词是learning,模型要预测窗口内的 I, like, deep, models。
Skip-gram 对低频词通常更友好,因为每个中心词会产生多个训练样本。它训练成本可能高于 CBOW,但词向量质量常较好。
9. Negative Sampling¶
Word2Vec 原始 softmax 需要对整个词表计算概率:
当词表很大时,计算代价很高。negative sampling 用二分类目标近似这个过程。 对一个正样本(center, context),采样若干负样本 (center, negative_word)。模型学习:
常见目标:
negative sampling 的本质是避免每次更新整个词表,只更新少量正负样本,大幅提高训练效率。
10. Hierarchical Softmax¶
Hierarchical softmax 是另一种加速大词表 softmax 的方法。它把词表组织成一棵二叉树,每个词是叶子节点。预测某个词的概率转化为从根节点走到该叶子的路径概率。 原来 softmax 复杂度大约是:
hierarchical softmax 约为: Word2Vec 中常用 Huffman tree,让高频词路径更短,提高训练效率。11. GloVe¶
GloVe 是 Global Vectors for Word Representation。它试图结合全局矩阵分解和局部上下文窗口方法的优点。
Word2Vec 更强调局部窗口预测;GloVe 直接利用全局词-词共现矩阵。
设 X_ij 表示词 i 和词 j 在语料中的共现次数。GloVe 学习词向量,使:
f(X_ij) 是加权函数,用来降低极高频或极低频共现的影响。
GloVe 的核心是:词向量应该解释全局共现统计中的比例关系。
12. FastText¶
FastText 在 Word2Vec 基础上引入子词信息。它不是只为每个完整词学习向量,而是把词表示为字符 n-gram 向量的组合。 例如:
词向量可以由这些子词 n-gram 向量求和得到。 FastText 的优点: - 能利用词形结构。-
对形态丰富语言更友好。
-
可以为未登录词生成向量,只要其子词 n-gram 已见过。
-
对拼写变体、词缀、复合词有更强泛化。
缺点是它仍主要是静态词向量,不能根据上下文区分多义词。
13. 传统词向量的局限¶
Word2Vec、GloVe、FastText 都是经典静态或近似静态表示方法。它们有重要历史价值,也适合一些轻量任务,但在现代 LLM 语境下有明显局限: - 无法充分处理多义词上下文。
-
句子或文档 embedding 需要额外聚合。
-
训练目标较简单,难以捕捉复杂语义推理。
-
与现代 RAG 检索中的 query-document 对齐目标不完全一致。
-
对 instruction、任务意图、跨语言语义等支持有限。
现代文本 embedding 通常基于 Transformer encoder 或 decoder,并用对比学习、排序数据、检索数据和 instruction 数据训练。
14. 上下文 Embedding¶
上下文 embedding 由模型根据上下文动态生成。同一个 token 在不同句子中会有不同 hidden state。 BERT、RoBERTa、ELECTRA 等 encoder 模型会输出:
其中每个 token 的向量都融合了上下文信息。 这些 token-level hidden states 可以用于: - 序列标注-
实体抽取
-
token 分类
-
QA span 抽取
-
作为句向量 pooling 的基础
但直接使用 BERT 的 [CLS] 或平均池化并不一定得到高质量 sentence embedding。句向量模型通常需要专门训练。
15. Sentence Embedding¶
Sentence embedding 把一句话或一段文本编码成一个固定维度向量:
常见 pooling 方法: -[CLS] pooling:使用特殊 token 的 hidden state。
-
mean pooling:对有效 token hidden states 求平均。
-
max pooling:取每维最大值。
-
weighted pooling:按权重聚合 token 表示。
-
last token pooling:decoder-only embedding 模型中常见。
mean pooling 在很多 encoder-based sentence embedding 模型中很常见。pooling 时必须使用 attention mask 排除 padding。
16. SBERT¶
Sentence-BERT 使用 Siamese 或 triplet 网络结构,让 BERT 产生可直接比较的句向量。 传统 BERT 做句子对匹配时,通常把两句拼在一起输入 cross-encoder:
这种方式准确但慢,无法为大规模语料预先建索引。 SBERT 把两个句子分别编码成向量: 这样文档向量可以离线预计算,query 向量在线计算,适合语义检索、聚类和相似度匹配。17. SimCSE¶
SimCSE 是一种简单有效的句向量对比学习方法。 无监督 SimCSE 的核心是:同一个句子输入模型两次,由 dropout 产生轻微不同表示,把它们作为正样本对;batch 内其他句子作为负样本。 监督 SimCSE 使用 NLI 数据: - entailment pairs 作为正样本。
- contradiction pairs 作为 hard negatives。
它使用 contrastive learning 改善句向量空间的 alignment 和 uniformity,使语义相似句更近,不相似句更分散。
18. Bi-Encoder 与 Cross-Encoder¶
语义检索中常见两类架构:
Bi-Encoder:
query 和 document 分别编码成向量。
用 dot product 或 cosine similarity 比较。
可离线建库,检索快。
Cross-Encoder:
query 和 document 拼接后一起输入模型。
输出相关性分数。
交互充分,精度高,但计算慢。
Bi-Encoder embedding retrieval -> top-k candidates
Cross-Encoder reranker -> rerank candidates
LLM generation
19. Dense Retrieval¶
Dense retrieval 用稠密向量进行语义检索。 流程:
documents -> embedding model -> document vectors -> vector index
query -> embedding model -> query vector
similarity(query, doc) -> top-k docs
-
cosine similarity
-
L2 distance
如果向量已经 L2 normalize,dot product 和 cosine similarity 等价。 Dense retrieval 能捕捉语义相似,但可能不如 BM25 擅长精确关键词匹配。因此很多系统会使用 hybrid retrieval:dense + sparse。
20. Contrastive Learning¶
现代 embedding 模型常用对比学习。核心目标是让正样本更近,负样本更远。
给定 query q、正样本文档 d+、负样本文档 d-:
tau 是 temperature。batch 内其他样本常作为 in-batch negatives。
对比学习的关键在于:
- 正样本质量。
-
负样本数量。
-
hard negative 难度。
-
batch size 和跨 GPU negatives。
-
任务分布和 prompt/instruction 设计。
21. Negative Samples 与 Hard Negatives¶
negative samples 是与 query 不相关的样本。hard negatives 是表面相似但实际不相关,或模型容易混淆的负样本。 示例:
easy negatives 太容易,模型很快学会区分,训练信号有限。hard negatives 更能提升模型细粒度语义区分能力。 但 hard negatives 也有风险: - 假负样本:实际上相关却被标成负样本。-
过难负样本:训练早期导致不稳定。
-
采样偏差:模型只学到某类负例模式。
22. BGE 系列¶
BGE 是 BAAI General Embedding,是北京智源推出的一系列 embedding 模型。BGE 模型常用于语义检索、RAG、相似度匹配和 reranking 流水线。 BGE 的典型使用方式:
query_embedding = model.encode_queries(queries)
doc_embedding = model.encode_corpus(documents)
scores = query_embedding @ doc_embedding.T
-
Multi-Functionality:支持 dense retrieval、sparse retrieval、multi-vector retrieval。
-
Multi-Granularity:支持从短句到较长文档的不同粒度。
在面试中,BGE 可以作为现代 embedding 模型的代表,用来说明 embedding 如何服务 RAG 检索。
23. Instruction 与 Query/Passage 编码¶
很多 embedding 模型会区分 query 和 passage 的输入格式。query 可能需要加 instruction:
这样做的目的是让模型知道当前文本是“查询意图”,而不是普通句子。passage 则通常按文档内容编码。 对于 instruction-tuned embedding model,使用错误 instruction 或遗漏 query instruction 可能导致检索效果下降。 这和 chat model 的 chat template 类似:输入格式是模型训练分布的一部分。24. CONAN Embedding¶
CONAN embedding 是一个面向通用文本 embedding 的工作,核心关注如何利用更多、更好的负样本提升 embedding 能力。 它的主要思想包括: - dynamic hard negative mining:训练过程中动态挖掘更有挑战的 hard negatives,而不是只依赖预处理阶段固定负样本。
-
cross-GPU balancing loss:利用跨 GPU 的样本作为更多 negatives,同时处理多任务 batch size 不均衡问题。
-
prompt-response pairs:利用 LLM 产生或已有的问答/响应对作为 embedding 训练数据。
CONAN 的面试价值在于说明:现代 embedding 模型不只是选一个 encoder 做 pooling,更关键的是训练数据、负样本构造、对比学习目标和跨设备训练策略。
25. Multi-Vector 与 Sparse-Dense Hybrid¶
标准 dense embedding 通常把一段文本编码成单个向量。multi-vector retrieval 会为一个文本保留多个 token-level 或片段级向量,例如 ColBERT 风格。 对比:
Single-vector:
doc -> one vector
检索快,表达压缩强。
Multi-vector:
doc -> multiple vectors
细粒度匹配更强,存储和计算更高。
26. Embedding 的相似度计算¶
常见相似度包括:
dot product: q^T d
cosine similarity: q^T d / (||q|| ||d||)
L2 distance: ||q - d||_2
27. Embedding 评测¶
Embedding 评测要根据任务选择指标。 检索任务常用: - Recall@K
-
Precision@K
-
MRR
-
NDCG
-
MAP
语义相似度任务常用: - Spearman correlation
- Pearson correlation
分类或聚类任务常用: - accuracy
-
F1
-
clustering purity
-
normalized mutual information
MTEB 是常见文本 embedding 综合评测框架,覆盖检索、分类、聚类、语义相似度、reranking 等任务。但实际系统中,最终仍应使用自己的业务数据和任务指标验证。
28. Embedding 工程问题¶
Embedding 在 RAG 和检索系统中常见工程问题: - query 和 document 使用了不匹配的 encoder 或 instruction。
-
向量没有 normalize,导致相似度分布异常。
-
chunk 切分过长或过短。
-
embedding 模型与目标领域不匹配。
-
中英文、多语言、代码文本效果差异大。
-
hard negative 不足,召回结果语义很粗。
-
只用 dense retrieval,丢失关键词精确匹配。
-
只看 MTEB 排名,不做业务评测。
-
维度太高导致存储和检索成本大。
-
ANN 索引参数设置不当,召回率和延迟失衡。
embedding 不是孤立组件,它和 chunking、retrieval、reranking、generation、evaluation 一起决定 RAG 效果。
29. 面试中的核心表达¶
第六天内容可以压缩为:
Embedding 把离散对象映射成连续向量,使语义相近对象在向量空间中更接近。
one-hot 稀疏且不能表达语义相似;embedding 是可学习稠密表示。
Word2Vec 用局部上下文预测学习词向量,包括 CBOW 和 Skip-gram。
GloVe 利用全局词-词共现矩阵学习词向量。
FastText 引入字符 n-gram 子词信息,能处理 OOV 和形态变化。
静态词向量无法处理多义词;Transformer hidden states 是上下文 embedding。
句向量需要 pooling 或专门训练,SBERT/SimCSE 用对比学习改善句向量空间。
现代 embedding 模型如 BGE/CONAN 服务检索和 RAG,核心训练信号包括正负样本、hard negatives、in-batch negatives 和跨 GPU negatives。
30. 参考资料¶
-
Efficient Estimation of Word Representations in Vector Space: https://arxiv.org/abs/1301.3781
-
Distributed Representations of Words and Phrases and their Compositionality: https://arxiv.org/abs/1310.4546
-
GloVe: Global Vectors for Word Representation: https://nlp.stanford.edu/pubs/glove.pdf
-
Enriching Word Vectors with Subword Information: https://arxiv.org/abs/1607.04606
-
Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks: https://arxiv.org/abs/1908.10084
-
SimCSE: Simple Contrastive Learning of Sentence Embeddings: https://arxiv.org/abs/2104.08821
-
MTEB: Massive Text Embedding Benchmark: https://arxiv.org/abs/2210.07316
-
BGE Series Documentation: https://bge-model.com/tutorial/1_Embedding/1.2.1.html
-
BGE-M3: Multi-Linguality, Multi-Functionality, Multi-Granularity Text Embeddings: https://arxiv.org/abs/2402.03216
-
Conan-embedding: General Text Embedding with More and Better Negative Samples: https://arxiv.org/abs/2408.15710
-
OpenAI tiktoken 和 embedding 不同概念参考: https://github.com/openai/tiktoken
-
盘点经典 Embedding 算法:https://blog.csdn.net/xpy870663266/article/details/101849044
-
BGE 简介:https://zhuanlan.zhihu.com/p/676410726
预览时标签不可点<div class="