Machine learning 我的公报上的实体不被承认

Machine learning 我的公报上的实体不被承认,machine-learning,nlp,stanford-nlp,named-entity-recognition,Machine Learning,Nlp,Stanford Nlp,Named Entity Recognition,我想创建一个自定义的NER模型。我就是这么做的: 培训数据(stanford ner.tsv): 属性(stanford ner.prop): GAZZETTEgazzetta.txt): 我使用以下命令行构建模型: java -classpath "stanford-ner.jar:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier -prop stanford-ner.prop 并通过以下方式进行测试: java -classpath "stanfo

我想创建一个自定义的NER模型。我就是这么做的:

培训数据(stanford ner.tsv):

属性(stanford ner.prop):

GAZZETTEgazzetta.txt):

我使用以下命令行构建模型:

java -classpath "stanford-ner.jar:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier  -prop stanford-ner.prop
并通过以下方式进行测试:

java -classpath "stanford-ner.jar:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier  -loadClassifier ner-model.ser.gz -textFile test.txt
我用以下文本做了两个测试:

>>测试1测试2如前所述

如果使用公报,这并不保证 gazette始终作为预期类的成员使用,它确实是这样做的 不保证不会选择宪报以外的词语。信息技术 只是为CRF提供了另一个培训所需的功能。如果 CRF对其他特征具有更高的权重,公报特征可能 不知所措

如果您想要将文本识别为类成员的内容 如果且仅当它在单词列表中时,您可能会选择 regexner或Stanford CoreNLP中包含的tokensregex工具。这个 CRF NER不保证接受公报中的所有文字作为其一部分 它也可以接受预期类之外的单词 作为课程的一部分刊登宪报

顺便说一句,以“单元测试”的方式测试机器学习管道不是一个好的做法,即仅使用一个或两个示例,因为它应该处理更大的数据量,更重要的是,它本质上是概率的

如果您想检查您的宪报文件是否被实际使用,最好使用现有的示例(参见上面链接的页面底部的
austin.gaz.prop
austin.gaz.txt
示例),并用您自己的名称替换多个名称,然后进行检查。如果失败,首先尝试更改测试,例如添加更多名称、重新编写文本等

为什么John实体不被认可


在我看来,你最简单的例子应该是把“达米亚诺”作为一个人物类别添加到地名录中。目前,培训数据允许模型了解到“Damiano”是一个人物标签,但我认为这与地名录类别无关(即两边都有人是不够的)。

gazzette只会帮助从培训数据中提取额外的特征,如果您的培训数据中没有出现这些单词,或者没有任何与标记令牌的连接,那么您的模型将不会从中受益。我建议的一个实验是在你的gazzette中添加
Damiano

是的,我读过,但如果它发现“Damiano”是实体,我不明白为什么它不承认另一个名字(在公报中)。模型似乎只查看我在训练数据中使用的名称。然而,我创建这个模型是因为我需要在简历/简历中找到实体。你认为对于我需要找到的每个实体,使用所有简历/简历文本更好吗?例如我需要人名,简历里面有很多。我需要个人姓名(通常在前10行),最好添加所有文本,让模型也能理解位置?1)斯坦福大学内尔没有找到“约翰”并不意味着斯坦福大学内尔忽视了公报。2) 但是,是的,最好使列车数据尽可能接近真实(测试)数据,并且尽可能大。所以,我建议创建更大的训练集(比如说,几十个例子),同时使用大公报(比如所有的人名)。因此,例如,如果我在简历的第一行有个人名字,你认为把简历的所有其他句子也加上会更好吗?这不太可能造成伤害,但我不认为这是用时间换取质量的最佳方式。首先,我会从准备好的NER模型开始,而不是训练自己的模型,然后看看结果。如果现有的模型工作不好,那么我会从50-100个CV创建训练集(如果名称总是出现在第一句话中,那么我只会使用第一句话)。之后,我将实施交叉验证,如果结果仍然不好,则手动检查错误。如果我不指定“否定”语句,模型如何理解具有实体的最佳语句?因为有很多名字,所以我需要训练它以避免误报。不我不需要它们吗?在此之后,我将接受你的回答!非常感谢你!我已经将达米亚诺标记为人物(在模型中),将约翰标记为地名录中的人物。我需要模型和地名录中的相同人员列表吗?你应该有地名录和培训数据(你所说的模型是什么意思?)。地名录应包含相关词汇单位(名称)的列表,尽可能详尽,而培训数据给出了包含这些词汇单位的句子示例。两者都很重要,并且包含尽可能多的数据。如果我在训练数据中有“达米亚诺”,那么在《米兰体育报》中添加“达米亚诺”的目的是什么?它有助于检测
John
Andrea
Damiano
类似的上下文。好的,但如果我重复“达米亚诺”在《训练数据》和《米兰体育报》中,我应该对所有的名字都这样做。若否,原因为何?谢谢你的澄清让我再举一个例子,假设你在《米兰体育报》中有一个国家的名字的大列表,但是你的训练数据中只有很少的国家的名字。因为对于培训数据中的那些国家,您有位置作为标签,并且它有gazzette功能(存在于gazzette中作为一个位置),这可能有助于模型概括和检测培训数据中缺少的其他国家名称。
PERSON John
PERSON Andrea
java -classpath "stanford-ner.jar:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier  -prop stanford-ner.prop
java -classpath "stanford-ner.jar:lib/*" edu.stanford.nlp.ie.crf.CRFClassifier  -loadClassifier ner-model.ser.gz -textFile test.txt