CoreNLP:它能判断一个名词是否指代一个人吗?
CoreNLP: Can it tell whether a noun refers to a person?
CoreNLP 能否确定一个普通名词(相对于专有名词或专有名称)是否指代一个开箱即用的人?或者,如果我需要为此任务训练模型,我该怎么做?
首先,我不是寻找共指解决方案,而是寻找它的构建块。根据定义,共指取决于上下文,而我正在尝试评估孤立的 中的单词 是否是 "person" 或 "human" 的子集。例如:
is_human('effort') # False
is_human('dog') # False
is_human('engineer') # True
我天真的尝试使用 Gensim 和 spaCy 的预训练词向量未能将 "engineer" 排在其他两个词之上。
import gensim.downloader as api
word_vectors = api.load("glove-wiki-gigaword-100")
for word in ('effort', 'dog', 'engineer'):
print(word, word_vectors.similarity(word, 'person'))
# effort 0.42303842
# dog 0.46886832
# engineer 0.32456854
我从 CoreNLP 中发现以下列表很有希望。
dcoref.demonym // The path for a file that includes a list of demonyms
dcoref.animate // The list of animate/inanimate mentions (Ji and Lin, 2009)
dcoref.inanimate
dcoref.male // The list of male/neutral/female mentions (Bergsma and Lin, 2006)
dcoref.neutral // Neutral means a mention that is usually referred by 'it'
dcoref.female
dcoref.plural // The list of plural/singular mentions (Bergsma and Lin, 2006)
dcoref.singular
这些对我的任务有用吗?如果是这样,我将如何从 Python wrapper 访问它们?谢谢。
我建议尝试 WordNet 看看:
- 如果 WordNet 涵盖了足够多的术语并且
- 如果您想要的术语是
person.n.01
的下义词。
你必须稍微扩展一下以涵盖多种感官,但要点是:
from nltk.corpus import wordnet as wn
# True
wn.synset('person.n.01') in wn.synset('engineer.n.01').lowest_common_hypernyms(wn.synset('person.n.01'))
# False
wn.synset('person.n.01') in wn.synset('dog.n.01').lowest_common_hypernyms(wn.synset('person.n.01'))
请参阅 lowest_common_hypernym
的 NLTK 文档:http://www.nltk.org/howto/wordnet_lch.html
CoreNLP 能否确定一个普通名词(相对于专有名词或专有名称)是否指代一个开箱即用的人?或者,如果我需要为此任务训练模型,我该怎么做?
首先,我不是寻找共指解决方案,而是寻找它的构建块。根据定义,共指取决于上下文,而我正在尝试评估孤立的 中的单词 是否是 "person" 或 "human" 的子集。例如:
is_human('effort') # False
is_human('dog') # False
is_human('engineer') # True
我天真的尝试使用 Gensim 和 spaCy 的预训练词向量未能将 "engineer" 排在其他两个词之上。
import gensim.downloader as api
word_vectors = api.load("glove-wiki-gigaword-100")
for word in ('effort', 'dog', 'engineer'):
print(word, word_vectors.similarity(word, 'person'))
# effort 0.42303842
# dog 0.46886832
# engineer 0.32456854
我从 CoreNLP 中发现以下列表很有希望。
dcoref.demonym // The path for a file that includes a list of demonyms
dcoref.animate // The list of animate/inanimate mentions (Ji and Lin, 2009)
dcoref.inanimate
dcoref.male // The list of male/neutral/female mentions (Bergsma and Lin, 2006)
dcoref.neutral // Neutral means a mention that is usually referred by 'it'
dcoref.female
dcoref.plural // The list of plural/singular mentions (Bergsma and Lin, 2006)
dcoref.singular
这些对我的任务有用吗?如果是这样,我将如何从 Python wrapper 访问它们?谢谢。
我建议尝试 WordNet 看看:
- 如果 WordNet 涵盖了足够多的术语并且
- 如果您想要的术语是
person.n.01
的下义词。
你必须稍微扩展一下以涵盖多种感官,但要点是:
from nltk.corpus import wordnet as wn
# True
wn.synset('person.n.01') in wn.synset('engineer.n.01').lowest_common_hypernyms(wn.synset('person.n.01'))
# False
wn.synset('person.n.01') in wn.synset('dog.n.01').lowest_common_hypernyms(wn.synset('person.n.01'))
请参阅 lowest_common_hypernym
的 NLTK 文档:http://www.nltk.org/howto/wordnet_lch.html