我正在阅读Levy等人的论文"Improving Distributional Similarity with Lessons Learned from Word Embeddings",并在讨论他们的超参数时,他们说:
向量归一化(nrm)如第2节所述,所有向量(即W的行)被归一化为单位长度(L2归一化),使点积运算等效于余弦相似度。
然后我回忆起R sim2
包中text2vec
向量相似性函数的默认值首先是L2范数向量:
sim2(x, y = NULL, method = c("cosine", "jaccard"), norm = c("l2", "none"))
所以我想知道,这可能是什么动机,正常化和余弦(在text2vec和一般情况下)。我试图阅读L2规范,但主要是在使用欧几里德距离之前进行归一化。在词向量空间/嵌入的余弦相似性的情况下,我无法(令人惊讶地)找到关于L2范数是推荐还是反对的任何内容。而且我没有足够的数学技能来解决分析差异。
所以这里有一个问题,意思是在从文本数据中学习的单词向量空间(或者只是共同矩阵可能由tfidf,ppmi等加权;或者像GloVe这样嵌入),以及计算单词相似性(目标是当然要使用最能反映真实世界单词相似性的向量空间+度量。 简单地说,在计算向量/单词之间的余弦相似度之前,是否有任何理由(不)在单词特征矩阵/术语共现矩阵上使用L2范数?
text2vec
自动处理所有内容 - 它会使行具有单位L2范数,然后调用点积来计算余弦相似度。
但是如果矩阵已经具有单位L2范数的行,那么用户可以指定norm = "none"
并且sim2
将跳过第一个归一化步骤(节省一些计算)。
我理解混乱 - 可能我需要删除norm
选项(它不需要花费太多时间来规范化矩阵)。
如果你想获得余弦相似性,你不需要标准化为L2范数,然后计算余弦相似度。无论如何,余弦相似性使矢量归一化,然后取两个点积。
如果您正在计算欧几里德距离,那么如果距离或矢量长度不是一个重要的区别因素,则需要进行标准化。如果矢量长度是一个区别因素,那么就不要将欧几里德距离标准化和计算。