在使用余弦相似度之前,是否有任何理由(不)对向量进行 L2 归一化?

Is there any reason to (not) L2-normalize vectors before using cosine similarity?

我正在阅读论文“改进分布相似性 Levy 等人从 Word Embeddings 中吸取教训,在讨论他们的超参数时,他们说:

Vector Normalization (nrm) As mentioned in Section 2, all vectors (i.e. W’s rows) are normalized to unit length (L2 normalization), rendering the dot product operation equivalent to cosine similarity.

然后我回想起 R text2vec 包中 sim2 向量相似度函数的默认值是首先是 L2 范数向量:

sim2(x, y = NULL, method = c("cosine", "jaccard"), norm = c("l2", "none"))

所以我想知道,标准化 余弦(无论是在 text2vec 方面还是在一般情况下)的动机可能是什么。我试图阅读 L2 范数,但主要是在使用欧几里德距离之前进行归一化的背景下出现的。在词向量 spaces/embeddings 的余弦相似度的情况下,我找不到(令人惊讶的)关于 L2-norm 是否会被推荐或反对的任何信息。而且我不太具备计算分析差异的数学技能。

所以这是一个问题,意思是在从文本数据中学习的词向量 spaces 的上下文中(或者只是可能由 tfidf、ppmi 等加权的共现矩阵;或者像 GloVe 这样的嵌入),并计算单词相似度(目标当然是使用最能反映真实世界单词相似度的向量 space+metric)。
在计算 vectors/words 之间的余弦相似度之前,是否有任何理由(不)在词特征 matrix/term-co-occurrence 矩阵上使用 L2 范数?

text2vec 自动处理一切 - 它将使行具有单位 L2 范数,然后调用点积来计算余弦相似度。

但是如果矩阵已经有单位为 L2 范数的行,那么用户可以指定 norm = "none" 并且 sim2 将跳过第一个归一化步骤(节省一些计算)。

我理解困惑 - 可能我需要删除 norm 选项(标准化矩阵不需要太多时间)。

如果您想获得余弦相似度,则无需标准化为 L2 范数,然后再计算余弦相似度。无论如何,余弦相似度都会对向量进行归一化,然后取两者的点积。

如果您正在计算欧几里德距离,那么如果距离或矢量长度不是重要的区分因素,您需要进行归一化。如果矢量长度是一个区分因素,那么不要按原样归一化和计算欧几里得距离。