语义相关性算法 - python

时间:2014-01-27 06:31:41

标签: python nlp nltk wordnet

我想找到两个synset之间的相关性,我遇到了许多算法,如resnik,lin,wu palmer,路径算法,leacock chodorow等。有人可以告诉我哪些算法最有效吗?

2 个答案:

答案 0 :(得分:5)

首先,OP在相关性和相似性之间有点混淆,区别很好,但值得注意。

语义相关性使用任何一种关系来衡量两个概念的相关性;算法:

  • Lexical Chains(Hirst and St-Onge,1998)
  • Adapted / Extended Sense Overlaps算法(Banerjee和Pedersen,2002/2003)
  • Vectorized Sense Overlaps(Patwardhan,2003)

语义相似性仅考虑IS-A关系(即上位词/下位词);算法:

  • Wu-Palmer措施(Wu and Palmer 1994)
  • Resnik measure(Resnik 1995)
  • Jiang-Conrath measure(Jiang and Conrath 1997)
  • Leacock-Chodorow措施(Leacock and Chodorow 1998)
  • Lin measure(Lin 1998)

Resnik,Jiang-Conrath和Lin的措施基于信息内容。 synset的信息内容是-log,即该synset中所有单词的所有概率(从语料库频率计算)的总和(Resnik,1995)。

Wu-Palmer和Leacock-Chodorow基于路径长度;两个概念/同义词之间的相似性分别是沿着它们之间最短路径的节点数。

上面给出的列表是无穷无尽的,但从历史上看,我们可以看到使用相似性度量有点过时,因为相关性算法考虑了更多关系,理论上应该给出更多消除比较概念的能力。


下一步,效率定义不明确。有关速度或准确性?对于哪个任务,应用语义相关性/相似性?

如果任务是Word Sense Disambiguation(WSD),那么可以参考Warin(2004)的论文:http://goo.gl/6wWums。或者更新的调查是Navigli(2009)http://dl.acm.org/citation.cfm?id=1459355

如果涉及WSD,有更复杂的工具/技术,请参阅Anyone know of some good Word Sense Disambiguation software?


<强>参考

Satanjeev Banerjee和Ted Pedersen。 2002.使用WordNet进行词义消歧的改进Lesk算法。在第三届计算语言学和智能文本处理国际会议论文集(CICLing '02),Alexander F. Gelbukh(编辑)。 Springer-Verlag,伦敦,英国,英国,136-145。

Satanjeev Banerjee和Ted Pedersen。 2003.扩展光泽重叠作为语义相关性的衡量标准。 “第十八届国际人工智能联合会议论文集”,第805-810页,阿卡普尔科。

Graeme Hirst和David St-Onge,1998年。词汇链作为检测和纠正Malapropisms的语境表示,第13章, 第305-332页。麻省理工学院出版社,马萨诸塞州剑桥。

Siddarth Patwardhan。 2003.结合字典和语料库信息 - 将信息转化为语义相关性的上下文向量度量。硕士论文,大学 明尼苏达州。

(懒得列出所有引文,请搜索并适当地附加到这个答案)

答案 1 :(得分:1)

从“给我看一个例子”的角度来看,这是一个展示如何使用语义相似性来执行WSD的例子:

from nltk.corpus import wordnet as wn
from nltk.tokenize import word_tokenize

def max_wupa(context_sentence, ambiguous_word):
  """ 
  WSD by Maximizing Wu-Palmer Similarity.

  Perform WSD by maximizing the sum of maximum Wu-Palmer score between possible 
  synsets of all words in the context sentence and the possible synsets of the 
  ambiguous words (see http://goo.gl/XMq2BI):
  {argmax}_{synset(a)}(\sum_{i}^{n}{{max}_{synset(i)}(Wu-Palmer(i,a))}

  Wu-Palmer (1994) similarity is based on path length; the similarity between 
  two synsets accounts for the number of nodes along the shortest path between 
  them. (see http://acl.ldc.upenn.edu/P/P94/P94-1019.pdf)
  """

  result = {}
  for i in wn.synsets(ambiguous_word):
    result[i] = sum(max([i.wup_similarity(k) for k in wn.synsets(j)]+[0]) \
                    for j in word_tokenize(context_sentence))
  result = sorted([(v,k) for k,v in result.items()],reverse=True)
  return result

bank_sents = ['I went to the bank to deposit my money',
'The river bank was full of dead fishes']
ans = max_wupa(bank_sents[0], 'bank')
print ans
print ans[0][1].definition

(来源:pyWSD @ github

请谨慎使用上述代码,因为您需要考虑:

  1. 当我们尝试最大化上下文句子中所有令牌的所有可能同义词与模糊词的可能同义词之间的路径相似性时,实际发生了什么?
  2. 如果大多数路径相似性产生None,那么
  3. 是最大化甚至是逻辑的,并且偶然地会得到一些流氓词,它们与模糊词的同义词之一有相关的同义词?