gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 18:49:08 25 4
gpt4 key购买 nike

我遇到一个问题,CoreNLP 只能识别以大写字符开头的命名实体,例如 Kobe Bryant,但不能将 kobe bryant 识别为一个人!!!那么 CoreNLP 如何识别以小写字符开头的命名实体????欣赏它!!!!

最佳答案

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

如果您使用的是正确编辑的文本,您应该使用我们的默认英文模型。如果您正在使用的文本(主要)是小写或大写,那么您应该使用下面提供的两种解决方案之一。如果它是一个真正的混合体(就像许多社交媒体文本),您可以使用下面的 truecaser 解决方案,或者您可以通过使用 both 大小写和无大小写 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 是一个非常常见的普通名词。

关于java - 如何通过 CoreNLP 识别小写的命名实体,例如 kobe bryant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45097507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com