【问题标题】:Semantic Relatedness Algorithms - python [closed]语义相关性算法 - python [关闭]
【发布时间】:2014-01-27 06:31:40
【问题描述】:

我想找到两个同义词集之间的相关性,我遇到了许多算法,如 resnik、lin、wu palmer、path algorithm、leacock chodorow 等。有人能告诉我这些算法中哪一个最有效吗?

【问题讨论】:

标签: python nlp nltk wordnet


【解决方案1】:

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

语义相关性衡量两个概念的相关程度,使用任何类型的关系;算法:

  • 词汇链(Hirst 和 St-Onge,1998 年)
  • 自适应/扩展感知重叠算法(Banerjee 和 Pedersen,2002/2003)
  • 矢量化感觉重叠(Patwardhan,2003 年)

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

  • Wu-Palmer 测量(Wu 和 Palmer 1994)
  • Resn​​ik 测量 (Resnik 1995)
  • Jiang-Conrath 测量(Jiang 和 Conrath 1997)
  • Leacock-Chodorow 测量(Leacock 和 Chodorow 1998)
  • 林测量(林 1998)

Resn​​ik、Jiang-Conrath 和 Lin 测量基于信息内容。同义词集的信息内容是 -log 该同义词集中所有单词的所有概率(根据语料库频率计算)的总和(Resnik,1995)。

Wu-Palmer 和 Leacock-Chodorow 基于路径长度;两个概念/synsets之间的相似性取决于它们之间最短路径上的节点数。

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


接下来,效率定义不明确。是速度还是准确性?语义相关性/相似性将应用于哪个任务?

如果任务是词义消歧 (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 年。作为上下文表示的词汇链,用于检测和纠正畸形,第 13 章, 第 305-332 页。麻省理工学院出版社,马萨诸塞州剑桥市。

席达斯·帕特瓦丹。 2003. 结合字典和语料库信息 化为语义相关性的上下文向量度量。硕士论文,大学 明尼苏达州。

(懒得列出所有引用,请适当搜索并附加到此答案)

【讨论】:

    【解决方案2】:

    从“给我看一个例子”的角度来看,这里有一个例子来展示如何使用语义相似性来执行 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 并且偶然发现一些流氓词与歧义词的同义词之一具有相关同义词,那么最大化是否合乎逻辑?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 2018-09-23
      • 1970-01-01
      • 2017-04-14
      相关资源
      最近更新 更多