【问题标题】:calculate cosine similarity of two words in R?计算R中两个单词的余弦相似度?
【发布时间】:2018-06-26 23:02:14
【问题描述】:

我有一个文本文件,想为文件中的每个单词创建语义向量。然后我想提取大约 500 对单词的余弦相似度。 R 中最好的包是什么?

【问题讨论】:

  • 您是在尝试基于单词表示(基于一种热编码)创建余弦相似度还是使用 Word2Vec 或其他一些单词嵌入?
  • 基于单词表示。使用 Word2Vec 的优点/缺点是什么?
  • 这真的取决于你的任务和你的数据。说如果你有更少的数据段;那么矩阵是稀疏的,几乎可以是奇异的。 Word2Vec 的优势是在 n 维空间中使用预先学习的词嵌入。 Word2Vec 空间上的余弦相似度在大多数情况下都非常有效。

标签: r vector nlp cosine-similarity


【解决方案1】:

您可以使用lsa 库。库的cosine 函数给出了一个余弦相似度矩阵。它需要一个矩阵作为输入。

【讨论】:

  • 字符串 插入 cosine() 函数时出错。它需要数字/复数矩阵/向量参数作为输入。
  • 有关完整的工作示例,请参见例如stackoverflow.com/questions/34045738
【解决方案2】:

如果我正确理解您的问题,您需要两个词向量的余弦相似度。让我们从两个单词的余弦相似度开始:

library(stringdist)
d <- stringdist("ca","abc",method="cosine")

结果如预期的那样是d= 0.1835034

该包中还包含一个函数stringdistmatrix(),用于计算所有字符串对之间的距离:

> d <- stringdistmatrix(c('foo','bar','boo','baz'))
> d
  1 2 3
2 3    
3 1 2  
4 3 1 2

为了你的目的,你可以简单地使用这样的东西

stringdist(c("ca","abc"),c("aa","abc"),method="cosine")

结果是一方面测量caaa 之间的距离,另一方面测量abcabc 之间的距离:

0.2928932 0.0000000

免责声明:stringdist 是全新的(2019 年 6 月),但似乎运行良好。我与图书馆的作者无关。

【讨论】:

    猜你喜欢
    • 2017-03-19
    • 2015-05-03
    • 2014-03-25
    • 2015-05-24
    • 2021-07-10
    • 1970-01-01
    • 2010-10-05
    • 2015-07-21
    相关资源
    最近更新 更多