Ограничения выбора Wordnet в NLTK

Есть ли способ захватить ограничения выбора WordNet (такие как +animate, +human и т. д.) из синсетов через NLTK? Или есть другой способ предоставления семантической информации о synset? Самое близкое, что я мог подобрать к этому, были гипернимные отношения.


person erickrf    schedule 30.03.2011    source источник


Ответы (2)


Это зависит от ваших «выборочных ограничений», или я бы назвал это семантическими особенностями, потому что в классической семантике существует мир concepts и для сравнения между понятиями мы должны найти

  • отличительные признаки (т. е. признаки понятий, которые используются для их отличия друг от друга) и
  • признаки сходства (т. е. признаки схожих понятий и подчеркивают необходимость их различения)

Например:

Man is [+HUMAN], [+MALE], [+ADULT]
Woman is [+HUMAN], [-MALE], [+ADULT]

[+HUMAN] and [+ADULT] = similarity features
[+-MALE] is the discrimating features

Общей проблемой традиционной семантики и применения этой теории в вычислительной семантике является вопрос

«Есть ли определенный список функций, которые мы можем использовать для сравнения любых

«Если да, то какие функции в этом списке?» концепции?»

(см. www.acl.ldc.upenn.edu/E/E91/E91-1034.pdf‎ для более подробной информации)

Возвращаясь к WordNet, могу предложить 2 метода устранения "ограничений выбора"

Во-первых, проверьте гиперонимы на отличительные признаки, но сначала вы должны решить, что является отличительными признаками. Чтобы отличить животное от человека, возьмем отличительные признаки как [+-человек] и [+-животное].

from nltk.corpus import wordnet as wn

# Concepts to compare
dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9

# To access the hypernym_paths()[0]
# It's weird for that hypernym_paths gives a list of list rather than a list, nevertheless it works.
dog_hypernyms = dog_sense.hypernym_paths()[0]
jb_hypernyms = jb_sense.hypernym_paths()[0]


# Discriminating features in terms of concepts in WordNet
human = wn.synset('person.n.01') # i.e. [+human]
animal = wn.synset('animal.n.01') # i.e. [+animal]

try:
  assert human in jb_hypernyms and animal not in jb_hypernyms
  print "James Baldwin is human"
except:
  print "James Baldwin is not human"

try:
  assert human in dog_hypernyms and animal not in dog_hypernyms
  print "Dog is an animal"
except:
  print "Dog is not an animal"

Во-вторых, проверьте меры сходства, как предложил @Jacob.

dog_sense = wn.synsets('dog')[0] # It's http://goo.gl/b9sg9X
jb_sense = wn.synsets('James_Baldwin')[0] # It's http://goo.gl/CQQIG9

# Features to check against whether the 'dubious' concept is a human or an animal
human = wn.synset('person.n.01') # i.e. [+human]
animal = wn.synset('animal.n.01') # i.e. [+animal]

if dog_sense.wup_similarity(animal) > dog_sense.wup_similarity(human):
  print "Dog is more of an animal than human"
elif dog_sense.wup_similarity(animal) < dog_sense.wup_similarity(human):
  print "Dog is more of a human than animal"
person alvas    schedule 04.12.2013
comment
Спасибо за исчерпывающий ответ. Некоторое время назад я понял, что не могу найти функции сходства/различения в WordNet по причинам, которые вы упомянули. - person erickrf; 04.12.2013

Вы можете попробовать использовать некоторые функции сходства с выбранными синсетами и использовать их для фильтрации. Но по сути это то же самое, что следовать дереву гипернимов - на самом деле все функции сходства словесной сети используют в своих расчетах расстояние гипернимов. Кроме того, существует множество необязательных атрибутов синсета, которые, возможно, стоит изучить, но их присутствие может быть очень непоследовательным.

person Jacob    schedule 31.03.2011