use*_*004 8 normalization cosine-similarity vector-space text2vec
我正在阅读 Levy 等人的论文“Improving Distributional Comparison\nwith Lessons Learned from Word Embeddings”,在讨论他们的超参数时,他们说:
\n\n\n\n\n向量归一化 (nrm)正如第 2 节中提到的,所有向量(即 W\xe2\x80\x99s 行)都归一化为单位长度(L2 归一化),使点积运算等效于余弦相似度。
\n
然后我想起sim2Rtext2vec包中向量相似度函数的默认值首先是 L2 范数向量:
sim2(x, y = NULL, method = c("cosine", "jaccard"), norm = c("l2", "none"))\nRun Code Online (Sandbox Code Playgroud)\n\n所以我想知道,归一化和余弦(无论是在 text2vec 方面还是一般情况下)的动机可能是什么。我尝试阅读 L2 范数,但大多数情况下它是在使用欧几里德距离之前进行标准化的背景下出现的。我(令人惊讶地)找不到任何关于在词向量空间/嵌入的余弦相似性的情况下是否推荐或反对 L2 范数的任何信息。而且我不太具备计算分析差异的数学技能。
\n\n所以这里有一个问题,意味着在从文本数据学习的词向量空间的背景下(要么只是可能由 tfidf、ppmi 等加权的共现矩阵;或者像 GloVe 这样的嵌入),并计算词相似度(目标是当然使用最能反映现实世界单词相似性的向量空间+度量)。
简而言之,在计算向量/单词之间的余弦相似度之前,是否有任何理由(不)在单词特征矩阵/术语共现矩阵上使用 L2 范数?
如果您想获得余弦相似度,则无需标准化为 L2 范数,然后计算余弦相似度。无论如何,余弦相似度都会对向量进行归一化,然后取两者的点积。
如果您正在计算欧几里德距离,那么如果距离或向量长度不是重要的区分因素,则需要进行归一化。如果向量长度是一个区别因素,则不要按原样标准化并计算欧几里德距离。
text2vec自动处理所有事情 - 它将使行具有单位 L2 范数,然后调用点积来计算余弦相似度。
但是,如果矩阵已经具有单位 L2 范数的行,则用户可以指定norm = "none"并sim2跳过第一个标准化步骤(节省一些计算)。
我理解混乱 - 可能我需要删除norm选项(标准化矩阵不需要太多时间)。