CoreNLP 如何识别小写的命名实体,例如 kobe bryant?

2024-05-02

我遇到一个问题,CoreNLP 只能识别以大写字符开头的命名实体,例如科比·布莱恩特 (Kobe Bryant),但无法识别科比·布莱恩特 (kobe bryant) 作为一个人!那么CoreNLP如何识别以小写字符开头的命名实体???赞赏它!


首先,您必须承认,在小写或大小写不一致的英文文本中正确命名实体比在正式文本中更难,在正式文本中大写字母是一个很好的线索。 (这也是中文 NER 比英文 NER 难的原因之一。)不过,为了让 CoreNLP 很好地处理小写文本,您必须做一些事情——默认模型经过训练,可以在精心编辑的文本上很好地工作。

如果您使用正确编辑的文本,则应使用我们默认的英文模型。如果您正在使用的文本(主要)是小写或大写,那么您应该使用下面提供的两种解决方案之一。如果它是真正的混合物(就像许多社交媒体文本),您可以使用下面的 truecaser 解决方案,或者您可以通过使用both带壳和无壳 NER 模型(作为给定的一长串模型)ner.model财产)。

方法一:无壳模型。我们还提供忽略大小写信息的英文模型。它们对所有小写文本的效果会更好。

方法 2:使用 truecaser。我们提供一个truecase注释器,尝试将文本转换为正式编辑的大写形式。您可以先应用它,然后使用常规注释器。

一般来说,我们不清楚这些方法中的一种通常或总是获胜。你可以两者都尝试一下。

重要的:要使用下面调用的额外组件,您需要下载英语模型罐 https://stanfordnlp.github.io/CoreNLP/download.html,并使其在您的类路径中可用。

这是一个例子。我们从示例文本开始:

% 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是一个相当常见的普通名词。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CoreNLP 如何识别小写的命名实体,例如 kobe bryant? 的相关文章

随机推荐