跳转到内容

Embeddings:把离散符号放进连续空间

Embedding 是把 token、句子或文档变成一串数字向量。理想情况下,语义相近的内容在向量空间里距离更近:“猫”和“狗”会比“猫”和“火箭”更接近。这样模型就能用连续数学处理离散语言,也让搜索、聚类、推荐和 RAG 成为可能。

早期词向量展示了“向量差”能编码关系;后来的上下文表示说明,同一个词在不同句子里应该有不同含义。例如“苹果发布手机”和“我吃了苹果”中的“苹果”不应完全相同。

工程版:向量质量取决于目标函数

Section titled “工程版:向量质量取决于目标函数”

训练 embedding 的方法很多:预测邻近词、语言建模、对比学习、监督微调。不同目标会产生不同几何结构。检索系统关心召回和排序,通常要评估向量维度、归一化、距离函数、分块策略和负样本质量。

在 LLM 中,输入嵌入层把 token ID 映射为向量;输出层常与嵌入层共享或相关。RAG 中的 embedding 模型则是外部索引的入口。不要把 embedding 当成”理解”的全部:它擅长相似度,但对数字、否定、时间和组合逻辑仍需额外评估。

核心公式:Word2Vec 的 Skip-gram 目标函数

Section titled “核心公式:Word2Vec 的 Skip-gram 目标函数”

Skip-gram 模型通过最大化中心词预测上下文词的概率来学习词向量:

J(θ)=1Tt=1Tcjc,j0logp(wt+jwt)J(\theta) = \frac{1}{T} \sum_{t=1}^{T} \sum_{-c \leq j \leq c, j \neq 0} \log p(w_{t+j} | w_t)

其中,条件概率使用 softmax 计算:

p(wOwI)=exp(vwOTvwI)w=1Wexp(vwTvwI)p(w_O | w_I) = \frac{\exp(v_{w_O}^{\prime T} v_{w_I})}{\sum_{w=1}^{W} \exp(v_w^{\prime T} v_{w_I})}

  • vwv_wvwv_w^{\prime} 分别是输入和输出词向量
  • WW 是词汇表大小
  • cc 是上下文窗口大小
import numpy as np
def cosine_similarity(v1, v2):
"""计算两个向量的余弦相似度"""
return np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
# 模拟简化的词向量(实际维度通常是 256-1024)
embeddings = {
'国王': np.array([0.5, 0.8, 0.2, 0.9]),
'王后': np.array([0.4, 0.7, 0.3, 0.85]),
'男人': np.array([0.6, 0.3, 0.1, 0.4]),
'女人': np.array([0.5, 0.2, 0.2, 0.35]),
'': np.array([0.1, 0.1, 0.9, 0.2]),
'': np.array([0.15, 0.12, 0.85, 0.25]),
}
# 展示类比关系:king - man + woman ≈ queen
king_man_woman = embeddings['国王'] - embeddings['男人'] + embeddings['女人']
similarity = cosine_similarity(king_man_woman, embeddings['王后'])
print(f"'国王-男人+女人' 与 '王后' 的相似度: {similarity:.3f}")
# 展示语义相似度
cat_dog_sim = cosine_similarity(embeddings[''], embeddings[''])
cat_king_sim = cosine_similarity(embeddings[''], embeddings['国王'])
print(f"猫-狗相似度: {cat_dog_sim:.3f}")
print(f"猫-国王相似度: {cat_king_sim:.3f}")

研究版:向量空间的几何与语义

Section titled “研究版:向量空间的几何与语义”

研究上,embedding 空间的几何结构揭示了语言的统计规律,但也存在系统性偏差。Word2Vec 的”king - man + woman ≈ queen”展示了类比关系的线性编码,但这种关系是否对所有社会文化概念都公平?研究表明,预训练词向量往往携带性别、种族和职业偏见,这些偏见会传递到下游任务。

上下文表示(如 ELMo、BERT)缓解了一些静态词向量的歧义问题,但引入了新的问题:不同层的表示捕捉了不同级别的语言结构(表层语法 vs 深层语义)。探测任务(probing)试图判断模型”知道”什么,但探测器的成功是否意味着模型真正掌握了概念,还是仅仅利用了统计线索?这仍是表示学习中的核心争论。

🔬 开放研究问题

该领域的关键问题与研究方向:

  1. 静态词向量(word2vec、GloVe)与上下文相关表示(ELMo)的本质区别是什么?这种演进是否是必然的?
  2. 负采样(negative sampling)的目标函数与隐式矩阵分解之间有何数学联系?
  3. 多语言或低资源语言的嵌入质量如何系统性地提升?词表构造对嵌入学习有何影响?

本文引用论文

  • Efficient Estimation of Word Representations in Vector Space — Tomas Mikolov et al. (2013)

    Word2Vec 提出了词向量(词嵌入)的概念:通过在大规模文本上训练神经网络,让语义相近的词 在向量空间中距离相近。"king - man + woman ≈ queen"的类比关系让世人看到了词嵌入的威力, 为后来所有语言模型的嵌入层奠定了基础。

  • Deep contextualized word representations — Matthew E. Peters et al. (2018)

    ELMo 提出了"语境化词嵌入"的概念:同一个词在不同语境中有不同的向量表示(例如 bank 在金融 和河岸两种语境中向量不同)。ELMo 用双向 LSTM 实现语境化,在多个 NLP 任务上刷新了 SOTA, 为 BERT 和后续预训练模型奠定了思想基础。

  • GloVe: Global Vectors for Word Representation — Jeffrey Pennington et al. (2014)

    GloVe 通过分解词共现矩阵来学习词向量,结合了基于计数的方法(LSA)和基于预测的方法 (Word2Vec)的优点。在词类比和词相似度任务上达到了当时最先进的性能, 是学术界广泛使用的基线词向量。

  • Distributed Representations of Words and Phrases and their Compositionality — Tomas Mikolov et al. (2013)

    word2vec 的 NeurIPS 版正篇,引入 Negative Sampling、Hierarchical Softmax 与 phrase-level 向量。之后 GloVe / fastText / 大模型 embedding 层的训练目标都受其影响。

  • Convolutional Neural Networks for Sentence Classification — Yoon Kim (2014)

    用 CNN + 预训练词向量做文本分类,证明"预训练 embedding + 简单架构"能打过手工特征工程,是预训练范式渗入 NLP 的早期标志。

  • ELECTRA: Pre-training Text Encoders as Discriminators Rather Than Generators — Kevin Clark et al. (2020)

    用 replaced token detection 替代 MLM,让小模型也能拿到 BERT-large 级表现。是"预训练目标决定样本效率"这条线索的代表作。