何时规范化句子嵌入 当您使用的相似度指标取决于向量的方向而不是其大小(幅度)时,您应该规范化句子嵌入(例如,使用 L2 规范化)。 例如,余弦相似度(一种用于比较嵌入的常用指标)计算向量之间的角度,这相当于 L2 规范化向量的点积。如果您的嵌入具有不同的大小(例如,由于模型架构或训练数据),规范化可确保相似度得分不会因向量长度而倾斜。 例如,像 BERT 或 RoBERTa 这样的模型本身不会产生规范化的嵌入,因此在计算相似度之前应用 L2 规范化通常是必要的。 相反,如果您的模型明确输出规范化的嵌入(例如,某些 sentence-transformers),则额外的规范化可能是多余的。
如果您跳过规范化会发生什么? 如果您不规范化嵌入,相似度得分可能会反映向量的方向和大小。 这可能会导致误导性的结果。 例如,与另一个向量方向稍微相似的长向量(大尺寸)可能产生比指向几乎相同方向的短向量更高的点积。 这会扭曲您试图衡量的语义相似性。 考虑两个嵌入:一个用于“温暖、阳光明媚的一天”(大小为 5),另一个用于“炎热的天气”(大小为 3)。 如果没有规范化,它们的点积可能会优先考虑大小而不是语义对齐,导致“炎热的天气”看起来不如它应该的那样与“温暖、阳光明媚的一天”相似。 规范化消除了这种偏差,确保比较纯粹侧重于方向对齐。
实际影响和权衡 规范化的计算成本很低,并且易于实施(例如,使用 sklearn.preprocessing.normalize
或手动 L2 缩放)。 跳过它可能会节省最少的计算时间,但存在不准确的相似度排名风险。 例如,在搜索系统中,未规范化的嵌入可能会优先考虑文本较长的文档(通常具有较大大小的嵌入)而不是较短但更相关的文档。 但是,并非总是需要规范化。 如果您的任务本质上依赖于大小(例如,检测嵌入在向量长度中的置信度得分),则保留原始嵌入是有意义的。 始终通过测试两种方法来验证:计算使用和不使用规范化的相似度,并检查哪种方法与您任务的真实情况或预期结果更好地对齐。