首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别一个名为小写的实体,比如CoreNLP的科比?布莱恩特?

如何识别一个名为小写的实体,比如CoreNLP的科比?布莱恩特?
EN

Stack Overflow用户
提问于 2017-07-14 07:46:48
回答 3查看 1K关注 0票数 2

我遇到了一个问题,CoreNLP只能识别命名实体,比如以大写字符开头的科比·布莱恩特,但却不能承认科比是一个人!那么,如何识别以CoreNLP ?以小写字符开头的命名实体?非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-15 20:38:59

首先,你必须承认,用小写字母或不一致大写的英文文本命名实体要比正式文本更难,因为大写字母是一个很好的线索。(这也是为什么汉语学习者比英语学习者难的原因之一。)尽管如此,为了使CoreNLP能够很好地处理小写文本,您必须做一些事情--默认模型是经过训练才能很好地处理编辑良好的文本。

如果您正在处理正确编辑的文本,您应该使用我们的默认英语模型。如果您正在使用的文本是(主要)小写或大写,那么您应该使用以下两种解决方案之一。如果它是一个真正的混合(像许多社交媒体文本),您可以使用下面的真实解决方案,或者您可以通过使用大小写模型(作为给ner.model属性的一长串模型)获得好处。

方法1:无案例模型。我们还提供了忽略案例信息的英语模型。它们将在所有小写文本上工作得更好。

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

一般来说,我们还不清楚这些方法中的一种是否通常或总是获胜。你可以两者兼得。

重要:要使下面调用的额外组件可用,您需要下载英式jar,并在类路径上使用它。

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

代码语言:javascript
复制
% cat lakers.txt
lonzo ball talked about kobe bryant after the lakers game.

使用默认模型,不会发现任何实体,它们的所有单词都会得到一个常见的名词标记。悲伤的!

代码语言:javascript
复制
% 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   _   _

下面,我们要求使用没有案例的模型,然后我们做得很好:所有的名字词现在都被识别为专有名词,而两个人的名字也被识别了。但球队的名字仍未被人记住。

代码语言:javascript
复制
% 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之前运行调理:

代码语言:javascript
复制
% 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是一个非常常见的常见名词。

票数 7
EN

Stack Overflow用户

发布于 2018-11-02 22:13:57

我已经研究了一段时间的NER问题,在我看来,使用斯坦福NLP公司的卡车是一个更好的解决方案。然而,仍然存在一些问题,真理不能正确地注释一个句子。除了上面的例子,陆克赛似乎在努力处理现在的时态句子。例如,

“布兰达·埃尔西把这件事告诉了莎莉·詹金斯。”

能认出布伦达·埃尔西和莎莉·詹金斯。

如果是的话

布兰达·埃尔西告诉莎莉·詹金斯这件事。

只会得到布伦达和莎莉·詹金斯。

如果是的话

布伦达·埃尔西为此烧死了莎莉·詹金斯。

然后是布伦达和伯恩斯莎莉·詹金斯。

票数 1
EN

Stack Overflow用户

发布于 2019-10-16 02:06:59

您可能对本文感兴趣(接受EMNLP 2019):https://arxiv.org/abs/1903.11222

在本文中,我们尝试了几种不同的方法来处理这个精确的问题(包括上面提到的2种方法)。TLDR,主要外卖是:

  1. 在测试数据上使用特征码是个坏主意,因为真相者的表现比你想象的要差。
  2. 没有案例的模特工作得很好。
  3. 但是总体来说,最好的选择是用无案例的训练数据(只有train_data.lower())来增加原始的训练数据,并对模型进行再训练。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45097507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档