【问题标题】:How to calculate the similarity of English words that do not appear in WordNet?如何计算WordNet中没有出现的英文单词的相似度?
【发布时间】:2016-07-08 19:06:55
【问题描述】:

一种特殊的自然语言实践是使用 WordNet 计算两个单词之间的相似度。我从以下 python 代码开始我的问题:

from nltk.corpus import wordnet
sport = wordnet.synsets("sport")[0]
badminton = wordnet.synsets("badminton")[0]
print(sport.wup_similarity(badminton))

我们将得到 0.8421

现在,如果我按以下方式查找“haha”和“lol”会怎样:

haha = wordnet.synsets("haha")
lol = wordnet.synsets("lol")
print(haha)
print(lol)

我们会得到

[]
[]

那么我们不能考虑它们之间的相似性。在这种情况下我们能做什么?

【问题讨论】:

  • 你想计算什么样的相似度?语义相似度?如果没有某种词义数据库(如 WordNet),您将无法计算它。
  • 什么意思?我已经使用了 WordNet,相似度是使用 Wu-Palmer Similarity 计算的。请仔细看代码。
  • 看看STS任务:alt.qcri.org/semeval2016/task1还有个不要脸的插件:github.com/alvations/stasis

标签: python nltk similarity


【解决方案1】:

您可以使用 Dissect (DIStributional SEmantics Composition Toolkit) 之类的工具从共现矩阵创建语义空间 然后您可以测量单词或短语之间的语义相似度(如果您组成单词)。

对于 halol,您需要收集这些共现。

要尝试的另一件事是 word2vec。

【讨论】:

  • 您能否缩小一些提示或一些我可以自己搜索的起点?
  • 我认为一个简单的起点就是从您的数据集中计算二元组搭配,即哪个单词非常频繁地出现在另一个单词旁边。然后你会发现,例如halol 有非常相似的邻居。 Afaik 这就是 word2vec 等背后的想法。
【解决方案2】:

还有两种可能的其他方式:

CBOW:连续词袋

skip gram 模型:此模型与 CBOW 模型相反

看看这个:https://www.quora.com/What-are-the-continuous-bag-of-words-and-skip-gram-architectures-in-laymans-terms

这些模型在这里得到了很好的体现:https://www.tensorflow.org/tutorials/word2vecGENSIM 也是一个很好的 python 库来做这些事情


尝试寻找Tensorflow解决方案,例如:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/word2vec/word2vec_basic.py

或者尝试寻找word2vec:https://en.wikipedia.org/wiki/Word2vec

【讨论】:

    【解决方案3】:

    您可以使用其他框架。我也在尝试 NLTK,但最终以非常快速且功能强大的框架登陆 spacy (spacy.io)。有一种称为“相似性”的词的方法,它与其他词比较(但它也适用于句子、文档等)。它是使用 word2vec 实现的。实际上,我不知道他们的词汇量有多大,以及在单词未知的情况下如何挣扎,但可能值得一试。

    我也玩过这个: https://radimrehurek.com/gensim/models/word2vec.html 您可以在 2 行中加载 google 的 big word2vec 模型(此项目将 google word2vec c++ 库移植到 python 中),可在此处访问: https://docs.google.com/file/d/0B7XkCwpI5KDYaDBDQm1tZGNDRHc/edit

    【讨论】:

      【解决方案4】:

      有不同的模型来衡量相似度,例如 word2vec 或 glove,但您似乎更多地寻找包含社交、非正式短语(如“lol”)的语料库。

      但是,我将提出 word2vec,因为它会导致我认为可以回答您的问题。

      word2vec(和其他词嵌入模型,如 glove)的基本概念是在包含词之间关系的向量空间中表示词。这非常适合测量相似性,因为向量有很多既定的数学可供借鉴。您可以在原版paper, 中阅读更多关于 word2vec 的技术细节,但我非常喜欢 this blog post,因为它写得好且简洁。

      同样,由于 word2vec 只是一个模型,您需要将其与正确的训练集配对,以获得您所寻求的范围。网上有一些预训练的模型,例如this bunch. 训练集实际上是允许您查询更多种类的术语,而不是模型。

      如果这些预训练模型具有您正在寻找的社交短语,您当然可以使用它们。但是,如果您没有看到在合适的语料库上训练过的模型,您可以轻松地自己训练模型。我建议将 Twitter 或 Wikipedia 用于语料库(训练集),并在 gensim 中实现 word2vec 作为词嵌入模型。

      【讨论】:

        猜你喜欢
        • 2013-03-18
        • 2017-06-07
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 2017-03-19
        • 2019-08-05
        • 1970-01-01
        • 2021-06-29
        相关资源
        最近更新 更多