为什么stanford corenlp性别鉴定不确定?

时间:2015-07-07 04:21:55

标签: stanford-nlp identification

我有以下结果,您可以看到名称edward有不同的结果(null和male)。这有几个名字。

edward, Gender: null
james, Gender: MALE
karla, Gender: null
edward, Gender: MALE

此外,我如何自定义性别词典?我想添加西班牙语和中文名字。

1 个答案:

答案 0 :(得分:2)

你提出了很多问题!

1。)Karla不在默认的性别映射文件中,因此这就是为什么它变为空

2。)如果你想制作自己的自定义文件,它应该采用以下格式:

JOHN \ tMALE

每行应该有一个NAME \ tGENDER条目

GenderAnnotator只能为映射提取1个文件,因此您需要创建一个包含要添加的名称的新文件。

默认的性别映射文件位于stanford-corenlp-3.5.2-models.jar文件中。

您可以通过以下方式从该jar中提取默认的性别映射文件:

  • mkdir tmp-stanford-models-expanded

  • cp /path/of/stanford-corenlp-3.5.2-models.jar tmp-stanford-models-expanded

  • cd tmp-stanford-models-expanded

  • jar xf stanford-corenlp-3.5.2-models.jar

  • 现在应该有tmp-stanford-models-expanded / edu

  • 您想要的文件是tmp-stanford-models-expanded / edu / stanford / nlp / models / gender / first_name_map_small

3.。)以这种方式构建您的管道以使用您的自定义性别词典:

Properties props = new Properties();
props.setProperty("annotators",
    "tokenize, ssplit, pos, lemma, gender, ner");
props.setProperty("gender.firstnames","/path/to/your/gender_dictionary.txt");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

4.。)尝试在你的管道中运行性别BEFORE(参见我上面的注释器的订购)。如果令牌已经具有NER标记,则RegexNERSequenceClassifier(添加Gender标签的类)可能会被阻止。在我看来,首先运行性别注释器将解决问题。因此,当您构建管道时,请确保性别在ner之前。

序列“edward james karla edward”被NER标记器标记为“O O PERSON PERSON”。我不完全确定为什么前两个令牌的NER标签得到“O”。我会注意到“Edward James Karla Edward”会产生“PERSON PERSON PERSON PERSON”,并记住句子中位置的NER标记因子,因此在句子开头可能是较低的句子导致第一个标记“edward “被标记为”O“?

如果您对此有任何疑问,请告诉我,我们将很乐意为您提供帮助!

TL; DR

1。)Karla被标记为错误,因为该名称不在性别词典中

2.。)您可以使用NAME \ tGENDER创建自己的性别映射文件,确保将属性“gender.firstnames”设置为新的性别映射文件的路径。

3。)确保性别注释器在ner注释器之前,这应该可以解决问题!