如何使用Python NLTK计算在WordNet中两个形容词之间的最短路径(测地线)距离?

2024-04-28 14:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

计算WordNet中两个语法集之间的语义相似度可以通过几个内置的相似性度量轻松完成,例如:

synset1.path_similarity(synset2)

synset1.lch_similarity(synset2),Leacock-Chodorow相似性

synset1.wup_similarity(synset2),吴帕尔默相似性

(as seen here)

然而,所有这些都利用了WordNet的分类关系,即名词和动词的关系。形容词和副词之间通过同义词、反义词和关系词来联系。如何测量两个形容词之间的距离(跳数)?在

我尝试了path_similarity(),但正如预期的那样,它返回'None'

^{pr2}$

如果有任何方法可以计算一个形容词和另一个形容词之间的距离,指出它将是非常感激的。在


Tags: path距离度量关系语义语法相似性内置
2条回答

Kamps et al. (2004)的文章中,他们把一个词的图定义为节点,如果两个词是同义词,则节点是连接的。然后他们将两个词之间的最短路径定义为它们的测地距离。据我所知,边上没有权重,这意味着当你想找到最短路径时,基本上可以计算边的数量。在

该报:

Kamps, Jaap, et al. "Using WordNet to Measure Semantic Orientations of Adjectives." LREC. Vol. 4. 2004.

但他们真正寻求的是一种衡量语义取向的方法。根据您的应用程序选择相应的最佳度量。一组最近引起广泛关注的相似性度量是基于分布假设的。这些机器学习方法基于大量文档中单词的用法,创建几何相似性度量(如余弦相似性)。但这些方法在概念上与WordNet的距离度量无关。在

然而,有一些工作围绕它使用wordnetgloss和synsets中的定义作为上下文样本来学习单词的统计模型,比如Patwardhan and Pedersen (2006)。但总的来说,这些模型不适合在没有积极或消极监督的情况下寻找情感取向。在

在非名词/动词的词之间没有容易的相似性。在

如前所述,名词/动词的相似性很容易从

>>> from nltk.corpus import wordnet as wn
>>> dog = wn.synset('dog.n.1')
>>> cat = wn.synset('cat.n.1')
>>> car = wn.synset('car.n.1')
>>> wn.path_similarity(dog, cat)
0.2
>>> wn.path_similarity(dog, car)
0.07692307692307693
>>> wn.wup_similarity(dog, cat)
0.8571428571428571
>>> wn.wup_similarity(dog, car)
0.4
>>> wn.lch_similarity(dog, car)
1.072636802264849
>>> wn.lch_similarity(dog, cat)
2.0281482472922856

对于形容词来说这很难,所以您需要构建自己的文本相似性设备。最简单的方法是使用向量空间模型,基本上,所有的单词都用浮点数表示,例如

^{pr2}$

要为pink = np.array([0.1001, 0.221, 0.321])之类的内容训练一组向量,您应该尝试google for

  • 潜在语义索引/潜在语义分析
  • 一袋字
  • 向量空间模型语义
  • Word2Vec,Doc2Vec,Wiki2Vec
  • 神经网络
  • 余弦相似性自然语言语义学

您也可以尝试一些现成的软件/库,如:

除了向量空间模型,您可以尝试一些图形模型,它将单词放入一个图中,并使用pagerank之类的东西在图中漫游,以提供一些相似性度量。在

另请参见:

相关问题 更多 >