一句话定义:L2 归一化(AI 词典:Embedding">Embedding Normalization)就是把一条嵌入向量(embedding)的长度统一缩成 1,只留方向、丢掉大小。
原理:一条 embedding 就是一串小数,比如 [0.6, 0.8]。它的 L2 范数是各分量平方和再开根号:√(0.36+0.64)=1。把每个分量除以该范数,向量就落到长度恒为 1 的“单位球面”上。三维、上千维同理,只是画不出来。
打个送快递的比方:方向是“往东北走三公里再往南两公里”,长度是“总共走了多远”。归一化相当于规定“地址只报朝向,距离一律记作 1”,于是两两比较时,比的就是朝向是否一致。
为什么不做会乱:余弦相似度(cosine similarity)只看夹角,公式是 cosθ = (a·b)/(|a||b|)。两个向量做内积(dot product)时,结果里含着 |a|、|b| 这些长度因子。若一边长 100、一边长 1,内积的大小几乎由长度决定,方向上的细微吻合会被淹没。排序于是变成“谁长谁靠前”,而不是“谁相关谁靠前”——对某些模型,长文本的向量范数天然偏大,长文档就会凭长度压制真正相关的结果。
归一化之后 |a|=|b|=1,内积恰好等于余弦相似度,这也是向量库敢用内积索引的原因:快,且结果与余弦一致。同理,归一化后欧氏距离的排序也和余弦一致(||a−b||² = 2−2cosθ)。
| 做法 | 比的是什么 | 排序依据 |
|---|---|---|
| 原始向量内积 | 方向 + 长度 | 长度会干扰排序 |
| L2 归一化后内积 | 只看方向 | 等价于余弦相似度 |
| 逐维标准化(z-score) | 每一维的分布 | 与“比方向”不是一回事 |
容易混的地方:标准化(standardization)是减均值除标准差,针对单维分布;L2 归一化针对整条向量的长度。前者是特征预处理,后者是相似度计算的前置条件,别互相替代。
实操提醒:入库和查询要用同一套规则,一边归一化一边不做,检索结果会整体漂移。除以范数一般是一行代码,但要处理零向量(全零向量没有方向,范数为 0,需特判)。有些 embedding 模型输出本身已经归一化,选向量库的“余弦”和“内积”选项时二选一即可,避免重复处理;具体以你所用模型和向量库的官方页面为准。
对普通人的意义:你在网盘、客服知识库里搜出来的结果好不好,取决于这次看不见的除法做没做。它不花什么算力,却是检索质量的分水岭。
