从词向量到句向量:语义表示技术的演化之路

内容纲要

这一篇讲的是 从词向量到句向量的演化史,这其实是 NLP 中一条“从土路走向高速公路”的演进轨迹,下面正式开始👇


一、引言

在自然语言处理中,词(word)是最小的可处理单位,但句子(sentence)才是语义的完整承载者。词向量的成功(如 Word2Vec)解决了词语表示问题,但如何将一句话变成一个“语义可比较、可运算”的向量呢?

这就是句向量(Sentence Embedding)要解决的问题。它是文本相似度、语义搜索、问答系统、对话系统等核心模块的底座。

本文将带你走一遍从词向量到句向量的进化之路,理解为什么“平均词向量”不够用,BERT 不能直接拿来用,以及 Sentence-BERT 是如何一鸣惊人的。


二、第一代:平均词向量(Word2Vec / GloVe)

理念: 把句子里每个词的向量取平均,表示整个句子。

# Word2Vec 句向量 = 所有词向量的平均
sentence_vector = np.mean([word_vec[w] for w in sentence], axis=0)

优点:

  • 快速、简单,几行代码就能搞定。
  • 在短文本中效果尚可。

缺点:

  • 忽略词序、结构、上下文。
  • 语义表达能力有限,比如 “我不喜欢苹果” 和 “我喜欢苹果” 的句向量几乎相同。

三、第二代:基于 RNN/CNN 的句子编码器

理念: 使用 RNN(如 LSTM/GRU)或 CNN 提取整个句子的上下文特征。

代表模型:

  • InferSent(Facebook 提出,使用 Bi-LSTM + max pooling)
  • Universal Sentence Encoder(Google 提出,有 Transformer 和 DAN 两种架构)
输入句子 → 编码器(Bi-LSTM / CNN / Transformer) → 固定长度向量

优点:

  • 考虑了词序和上下文。
  • 可通过有监督学习优化句向量质量。

缺点:

  • 训练成本高。
  • 泛化能力依赖于训练任务,可能不通用。

四、第三代:BERT 本体 VS 句向量之痛

你可能会问:“BERT 不是很强吗?为啥不能直接拿来算句向量?”

BERT 本体的设计初衷是做分类(如问答、NER),而非直接学习句向量。当你直接用 BERT 的 [CLS] 向量表示句子,再拿来算相似度时,会发现效果 非常不稳定(在 STS 数据集上表现很差)。

# BERT 输出中 CLS 向量的位置
cls_vec = outputs.last_hidden_state[:, 0, :]

问题原因:

  • 没有使用相似度损失进行训练。
  • 向量不满足“相似句子靠近”的空间分布特性。

五、第四代:Sentence-BERT 的横空出世

提出者: 德国达姆施塔特工业大学,2019 年

核心思想:

  • 用 Siamese 网络结构 + BERT 编码器
  • 加入句对监督信号(如 STS-B),直接优化句子间语义距离
句子A → BERT → 向量A
句子B → BERT → 向量B
→ 计算相似度 → MSE/Triplet/Contrastive 损失训练

优点:

  • 支持余弦相似度直接计算。
  • 与 BERT 兼容,可直接用 huggingface 中预训练模型。

代码使用:

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('paraphrase-MiniLM-L6-v2')
vec = model.encode("我爱自然语言处理")

效果对比(STS-B dev):

方法 Spearman 相关系数
BERT + CLS 0.61
BERT + mean pooling 0.66
SBERT 0.84 ✅

六、第五代:跨模态 / 指令微调 / 多语言句向量

句向量也在不断拓展边界:

  • 多语言:LaBSE、LASER 等支持上百种语言互相比较。
  • 跨模态:CLIP 用图片+文本做匹配,生成共同空间。
  • 指令微调:像 text-embedding-ada-002,可理解任务背景、指令目标。
  • LLM embedding:如 Mistral、Gemma、ChatGLM 提取的句向量也在流行。

这些新范式正在逐步取代静态的 embedding,往“任务感知”方向演进。


七、总结:哪种句向量适合你?

场景 推荐技术
快速相似度、轻量部署 Word2Vec 平均向量
强语义理解、中文处理 Sentence-BERT(中文版本)
多语言任务 LaBSE / LASER
搜索引擎、问答召回 SBERT + 向量数据库
多模态语义检索 CLIP / BLIP 系列
智能体语义感知 OpenAI Embedding / 指令微调模型

引用资料

  1. Reimers, N., & Gurevych, I. (2019). Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks. arXiv:1908.10084
  2. Cer, D. et al. (2018). Universal Sentence Encoder. arXiv:1803.11175
  3. Mikolov, T. et al. (2013). Efficient Estimation of Word Representations in Vector Space. arXiv:1301.3781
  4. Huggingface Sentence Transformers:https://www.sbert.net/
  5. OpenAI Text Embeddings:https://platform.openai.com/docs/guides/embeddings

Leave a Comment

您的电子邮箱地址不会被公开。 必填项已用*标注

close
arrow_upward