代码之家  ›  专栏  ›  技术社区  ›  user3554004

在使用cosine相似度之前,有没有理由(不是)l2规范化向量?

  •  2
  • user3554004  · 技术社区  · 6 年前

    我在看报纸 "Improving Distributional Similarity with Lessons Learned from Word Embeddings" Levy等人在讨论超参数时说:

    矢量归一化(NRM) 如第2节所述,将所有向量(即ws行)归一化为单位长度(l2归一化),使点积运算等效于余弦相似性。

    然后我回忆起 sim2 R中的向量相似函数 text2vec 包首先是二级范数向量:

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

    所以我想知道,这一切的动机是什么,正常化 余弦(既指text2vec,也指一般情况)。我试着读了关于l2范数的书,但主要是在使用欧几里得距离之前,在规范化的背景下读到的。对于词向量空间/嵌入的余弦相似性,我无法(令人惊讶)找到是否建议使用l2范数的任何内容。我也没有足够的数学能力来计算分析差异。

    所以这里有一个问题,意思是在从文本数据中学习到的词向量空间的上下文中(或者仅仅是由tfidf、ppmi等加权的共现矩阵;或者像手套一样嵌入),以及计算词的相似性(目标当然是使用向量空间+最能参考的度量)。选择现实世界中的单词相似性)。
    简单来说,在计算向量/词之间的余弦相似性之前,是否有任何理由(不)在词特征矩阵/词共现矩阵上使用l2范数?

    2 回复  |  直到 6 年前
        1
  •  0
  •   Dmitriy Selivanov    6 年前

    text2vec 自动处理所有事情-它将使行具有单位l2范数,然后调用点积计算余弦相似度。

    但是,如果矩阵已经具有单位l2 norm的行,那么用户可以指定 norm = "none" sim2 将跳过第一个规范化步骤(保存一些计算)。

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

        2
  •  0
  •   Baktaawar David Maust    6 年前

    如果你想得到余弦相似性,你不需要规范化为L2范数,然后计算余弦相似性。余弦相似度将向量归一化,然后取二的点积。

    如果您正在计算欧几里得距离,那么如果距离或向量长度不是一个重要的区别因素,则需要进行规格化。如果矢量长度是一个区别因素,那么就不要规范化和计算欧几里得距离。