一句话定义:句向量(Sentence AI 词典:Embedding">Embedding)是把一整句话(或一段话)变成一串固定长度的数字,让“意思”可以像坐标一样被计算距离。
一串数字是怎么来的
无论输入是 5 个字还是 500 个字,输出永远是同样长度的一串数字:几百到一千多维不等。常见做法分两步:编码器(通常是 Transformer)先读完整句,为每个位置生成一个带上下文的向量;然后做一次池化(pooling):把所有位置的向量逐维取平均,或者取某个专门位置的输出,将一串向量压成一个向量。
关键在于这个向量要经过专门训练,目标是让意思相近的句子,向量在空间里也靠近。常见训练方式是对比学习:拿一对同义句做正例、一堆无关句做负例,让模型把正例拉近、负例推开。这样训出来的空间才有“语义距离”的意义。
打个比方:给每道菜填一张固定格式的评分卡,甜、咸、辣、鲜……一共几百栏。无论这道菜是一个包子还是一桌宴席,最后都填出同样长的一张卡;两张卡逐栏对比,就知道两道菜像不像。区别在于,这张卡是模型自己学出来的一套隐性维度,你说不清第 37 栏代表什么,但它管用。
它和词向量不是同一个东西
词向量(Word Embedding)是“一个词一个点”,句向量是“一句话一个点”。表层的差别是数量,真正的差别在下面三点:
| 词向量 Word Embedding | 句向量 Sentence Embedding | |
|---|---|---|
| 粒度 | 词 | 整句 / 整段 |
| 一句输入产出 | 每个词各一个向量 | 只有一个向量 |
| 语序信息 | 静态词向量不含 | 含(读完整句再压缩) |
| 训练目标 | 预测上下文词 | 让语义相近的句子靠近 |
| 常见用途 | 词相似度、作为底层特征 | 语义检索、去重、聚类、分类 |
1. 上下文。静态词向量里,“苹果手机”和“吃苹果”中的“苹果”是同一个点;句向量读完整句后才压缩,天然带上下文。
2. 不能靠平均蒙混。把词向量逐维平均确实能凑出一个向量,但那是词袋,语序全丢:“狗咬人”和“人咬狗”平均出来一模一样。而且“的、是、了”这类高频虚词会主导平均值,把所有人的句子都往同一个方向拉。
3. 训练目标不同。词向量只要会“猜邻居词”;句向量要会判断“这两句是不是一个意思”,是专门的句子级训练。直接拿编码器最前面那个特殊位置的输出去当句向量,效果通常不好,因为它从没为这个任务被训练过。
对实际工作的意义
搜索因此从“关键词匹配”变成“意思匹配”:搜“退钱”能找到“申请退款”。RAG 检索、工单去重、评论聚类、意图分类,底层都是它。
几个上手要点:不同模型产出的向量不能混着比,换模型就要重建索引;算余弦相似度前一般先归一化;相似度阈值没有通用值,必须在自己数据上标定,有的模型随便两句就能到 0.8;选型时看它是否专门做过句子级训练,具体以官方页面为准;长文本还要留意输入长度上限,超长会被截断,而截断往往悄悄发生在你最在意的那半句话上。
