我遇到了一个问题,CoreNLP只能识别像科比·布莱恩特这样的命名实体,它以一个大写字母开头,但是不能认出科比布莱恩特作为一个人!那么如何通过CoreNLP识别以小写字符开头的命名实体????欣赏它!!!!
答案 0 :(得分:6)
首先,你必须承认,使用小写或不一致的英文文本比使用正式文本更难获得命名实体,大写字母是一个很好的线索。 (这也是为什么中文NER比英语NER更难的一个原因。)尽管如此,你必须做些事情才能让CoreNLP在小写文本上运行得相当好 - 默认模型经过训练,能够很好地处理编辑良好的文本。 / p>
如果您正在使用正确编辑的文本,则应使用我们的默认英语模型。如果您正在使用的文本(主要)是小写或大写,那么您应该使用下面提供的两种解决方案之一。如果它是一个真正的混合(如许多社交媒体文本),您可以使用下面的truecaser解决方案,或者您可以通过使用两个套装和无壳NER模型获得(作为给出的一长串模型ner.model
属性。)
方法1:无壳模型。我们还提供忽略案例信息的英语模型。它们将在所有小写文本上更好地工作。
方法2:使用truecaser。我们提供了一个truecase
注释器,它试图将文本转换为正式编辑的大写。您可以先应用它,然后使用常规注释器。
一般来说,我们不清楚这些方法中的一种通常或总是获胜。你可以尝试两种方式。
重要提示:要获得下面调用的额外组件,您需要下载the English models 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之前运行truecasing:
% 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 _ _
现在,组织 Lakers 已被识别,并且通常几乎所有实体词都被标记为具有正确实体标签的专有名词,但它无法获得 ball ,这仍然是一个普通的名词。当然,在无壳文本中,这是一个相当难以理解的词,因为 ball 是一个非常频繁的普通名词。
答案 1 :(得分:0)
我研究NER问题已有一段时间了,在我看来,使用Stanford NLP的trucase是更好的解决方案。但是,仍然存在一些问题,truecase无法正确注释句子。 除上述示例外,trucase似乎在处理当前时态句子。 例如,
“ brenda elsey告诉了Sally Jenkins。”
trucase可以识别Brenda Elsey和Sally Jenkins。
如果是
brenda elsey告诉Sally Jenkins。
它只能得到布伦达和萨莉·詹金斯。
如果是
brenda elsey为此烧伤了莎莉詹金斯。
然后得到Brenda和Burns Sally Jenkins。
答案 2 :(得分:0)
您可能对本文感兴趣(EMNLP 2019接受):https://arxiv.org/abs/1903.11222
在本文中,我们尝试了几种解决此确切问题的方法(包括上面@ christopher-manning提到的2种方法)。 TLDR,主要收获是:
$500 / (3 / 31) = $5,167
)扩充原始训练数据并重新训练模型。