我遇到了一个问题,CoreNLP只能识别命名实体,比如以大写字符开头的科比·布莱恩特,但却不能承认科比是一个人!那么,如何识别以CoreNLP ?以小写字符开头的命名实体?非常感谢!
发布于 2017-07-15 20:38:59
首先,你必须承认,用小写字母或不一致大写的英文文本命名实体要比正式文本更难,因为大写字母是一个很好的线索。(这也是为什么汉语学习者比英语学习者难的原因之一。)尽管如此,为了使CoreNLP能够很好地处理小写文本,您必须做一些事情--默认模型是经过训练才能很好地处理编辑良好的文本。
如果您正在处理正确编辑的文本,您应该使用我们的默认英语模型。如果您正在使用的文本是(主要)小写或大写,那么您应该使用以下两种解决方案之一。如果它是一个真正的混合(像许多社交媒体文本),您可以使用下面的真实解决方案,或者您可以通过使用大小写模型(作为给ner.model属性的一长串模型)获得好处。
方法1:无案例模型。我们还提供了忽略案例信息的英语模型。它们将在所有小写文本上工作得更好。
方法2:使用truecaser.我们提供了一个truecase注解器,它试图将文本转换为正式编辑的大写字母。您可以先应用它,然后使用常规注解器。
一般来说,我们还不清楚这些方法中的一种是否通常或总是获胜。你可以两者兼得。
重要:要使下面调用的额外组件可用,您需要下载英式jar,并在类路径上使用它。
下面是一个例子。我们从一个示例文本开始:
% cat lakers.txt
lonzo ball talked about kobe bryant after the lakers game.使用默认模型,不会发现任何实体,它们的所有单词都会得到一个常见的名词标记。悲伤的!
% java edu.stanford.nlp.pipeline.StanfordCoreNLP -file lakers.txt -outputFormat conll -annotators tokenize,ssplit,pos,lemma,ner
% cat lakers.txt.conll
1 lonzo lonzo NN O _ _
2 ball ball NN O _ _
3 talked talk VBD O _ _
4 about about IN O _ _
5 kobe kobe NN O _ _
6 bryant bryant NN O _ _
7 after after IN O _ _
8 the the DT O _ _
9 lakers laker NNS O _ _
10 game game NN O _ _
11 . . . O _ _下面,我们要求使用没有案例的模型,然后我们做得很好:所有的名字词现在都被识别为专有名词,而两个人的名字也被识别了。但球队的名字仍未被人记住。
% java edu.stanford.nlp.pipeline.StanfordCoreNLP -outputFormat conll -annotators tokenize,ssplit,pos,lemma,ner -file lakers.txt -pos.model edu/stanford/nlp/models/pos-tagger/english-caseless-left3words-distsim.tagger -ner.model edu/stanford/nlp/models/ner/english.all.3class.caseless.distsim.crf.ser.gz,edu/stanford/nlp/models/ner/english.muc.7class.caseless.distsim.crf.ser.gz,edu/stanford/nlp/models/ner/english.conll.4class.caseless.distsim.crf.ser.gz
% cat lakers.txt.conll
1 lonzo lonzo NNP PERSON _ _
2 ball ball NNP PERSON _ _
3 talked talk VBD O _ _
4 about about IN O _ _
5 kobe kobe NNP PERSON _ _
6 bryant bryant NNP PERSON _ _
7 after after IN O _ _
8 the the DT O _ _
9 lakers lakers NNPS O _ _
10 game game NN O _ _
11 . . . O _ _相反,您可以在POS标记和NER之前运行调理:
% java edu.stanford.nlp.pipeline.StanfordCoreNLP -outputFormat conll -annotators tokenize,ssplit,truecase,pos,lemma,ner -file lakers.txt -truecase.overwriteText
% cat lakers.txt.conll
1 Lonzo Lonzo NNP PERSON _ _
2 ball ball NN O _ _
3 talked talk VBD O _ _
4 about about IN O _ _
5 Kobe Kobe NNP PERSON _ _
6 Bryant Bryant NNP PERSON _ _
7 after after IN O _ _
8 the the DT O _ _
9 Lakers Lakers NNPS ORGANIZATION _ _
10 game game NN O _ _
11 . . . O _ _现在,组织湖人队已经被认可,一般来说,几乎所有的实体词都被标记为带有正确实体标签的专有名词,但它没有得到球,而球仍然是一个常见的名词。当然,在没有案例的文本中,这是一个很难理解的词,因为ball是一个非常常见的常见名词。
发布于 2018-11-02 22:13:57
我已经研究了一段时间的NER问题,在我看来,使用斯坦福NLP公司的卡车是一个更好的解决方案。然而,仍然存在一些问题,真理不能正确地注释一个句子。除了上面的例子,陆克赛似乎在努力处理现在的时态句子。例如,
“布兰达·埃尔西把这件事告诉了莎莉·詹金斯。”
能认出布伦达·埃尔西和莎莉·詹金斯。
如果是的话
布兰达·埃尔西告诉莎莉·詹金斯这件事。
只会得到布伦达和莎莉·詹金斯。
如果是的话
布伦达·埃尔西为此烧死了莎莉·詹金斯。
然后是布伦达和伯恩斯莎莉·詹金斯。
发布于 2019-10-16 02:06:59
您可能对本文感兴趣(接受EMNLP 2019):https://arxiv.org/abs/1903.11222
在本文中,我们尝试了几种不同的方法来处理这个精确的问题(包括上面提到的2种方法)。TLDR,主要外卖是:
train_data.lower())来增加原始的训练数据,并对模型进行再训练。https://stackoverflow.com/questions/45097507
复制相似问题