句向量,顾名思义,就是一个句子的向量表示,它将可变长度的句子(由多个词语组成)映射成一个固定长度的、稠密的实数向量(通常是一个几百到上千维的数组)。

你可以把它理解为:
- 句子的“数字指纹”:每个句子都有一个独特的向量,语义相似的句子,其向量在空间中的距离也相近。
- 句子的“数学坐标”:在高维空间中,句子的含义被转化为一个点,语义运算(如比较、查找)就变成了空间中的几何运算。
核心目标:让计算机能够像理解数字一样,通过计算来处理和理解文本的语义。
为什么需要句向量?(从词向量到句向量)
要理解句向量,最好先看它的前身——词向量(如Word2Vec, GloVe)。
-
词向量的局限:
- 词向量为每个单词生成一个固定向量。“国王” - “男人” + “女人” ≈ “女王”。
- 问题:它无法直接处理句子,最简单的组合方式(如取词向量的平均值)会丢失词序和上下文信息。“猫追老鼠”和“老鼠追猫”的平均词向量可能一样,但语义完全不同。
-
句向量的优势:
- 整体性:将整个句子作为一个单元进行编码,能捕捉词与词之间的交互和句子结构。
- 上下文感知:同一个词在不同句子中可能有不同的含义(如“苹果”公司 vs. 吃“苹果”),好的句向量模型能根据上下文为同一个词生成不同的贡献,最终得到不同的句向量。
- 固定维度,便于计算:所有句子都被映射到同一维度的空间,便于后续的机器学习任务(分类、聚类、检索等)。
句向量的核心价值:语义相似度
这是句向量最直接、最重要的应用,通过计算两个句向量之间的余弦相似度或欧氏距离,可以量化它们的语义相似程度。
- 高相似度:
“今天天气真好”和“晴朗的好天气” - 低相似度:
“今天天气真好”和“请打开文档”
几乎所有上层应用都基于这个核心能力。
如何得到句向量?(主流方法演进)
句向量技术经历了几个发展阶段:
-
无监督句子编码(早期):
- 平均法:对句子中所有词的词向量取平均或加权平均(如TF-IDF权重)。
- SIF / uSIF:对词向量进行平滑逆频率加权后平均,再移除句子共有的“语料库主成分”,效果优于简单平均。
- Skip-Thought Vectors:用编码器-解码器架构,训练模型用当前句子预测上一句和下一句,编码器的输出作为句向量。
-
基于预训练模型的有监督微调(主流):
- BERT时代:BERT等Transformer模型的出现是革命性的,但原始的BERT是为“词”层面任务设计的,直接取
[CLS]标记的向量或词向量的平均作为句向量,效果往往不理想(被称为“BERT句向量坍缩”问题)。 - Sentence-BERT(SBERT):专门为解决BERT的句向量问题而生,它使用孪生/三元组网络结构,在自然语言推理等数据集上对BERT进行微调,让模型直接学习输出有语义意义的句向量。这是当前工业界最流行、最实用的方法之一。
- SimCSE:一种对比学习方法,通过“自己和自己对比”(将同一个句子通过两次不同的随机Dropout作为正样本,其他句子作为负样本),极大地提升了句向量的语义区分能力,简单而强大。
- BERT时代:BERT等Transformer模型的出现是革命性的,但原始的BERT是为“词”层面任务设计的,直接取
-
专用文本表示模型:
- OpenAI的text-embedding系列(如
text-embedding-ada-002,text-embedding-3):这些是专为生成高质量文本嵌入(句向量)而设计和训练的商用API,在众多基准测试中表现优异。 - Cohere的Embed模型、谷歌的Universal Sentence Encoder等。
- OpenAI的text-embedding系列(如
如何评估句向量的好坏?
常用的公开评测任务/数据集包括:
- 语义文本相似度:直接评估模型计算的句子相似度与人工打分之间的相关性(如STS-B数据集)。
- 语义搜索:给定一个查询句,从一堆候选句中找出最相关的(如MS MARCO)。
- 文本分类/聚类:使用生成的句向量作为特征,进行下游的分类或聚类任务,看准确率或纯度。
主要应用场景
- 语义搜索:比关键词搜索更智能,搜索“怎么给手机降温”,能匹配到“解决iPhone发热的方法”。
- 文本聚类/主题建模:将海量文档或评论按语义自动分组。
- 智能客服/问答系统:将用户问题与标准问题库进行语义匹配,找到最接近的答案。
- 推荐系统推荐,如根据你读过的新闻的句向量,推荐语义相近的其他新闻。
- 重复/近似问题检测:在社区论坛中识别重复提问。
- 作为下游任务的输入特征:为文本分类、情感分析等任务提供强大的语义特征。
总结与认知要点
- 核心是什么:句向量是句子的数字化、语义化表示,其核心能力是计算语义相似度。
- 关键突破:从静态词向量到上下文感知的预训练模型,再到专门针对句子语义的对比学习微调(如SBERT, SimCSE)。
- 使用建议:
- 入门/快速实现:直接使用 Sentence-Transformers库(基于SBERT)或 OpenAI/Cohere的Embedding API。
- 深入研究:理解对比学习和BERT微调的原理。
- 重要意识:没有“唯一正确”的句向量,其质量高度依赖于模型训练的数据和任务,为你的特定领域(如法律、医疗)微调模型,通常会获得比通用模型好得多的效果。
希望这份基础认知能帮助你建立一个清晰的框架!
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。