我是 NLP 的新手,并试图弄清楚命名实体识别器如何注释命名实体。我正在尝试使用斯坦福 NER 工具包。当我在标准更正式的数据集上使用 NER 时,其中所有命名约定都遵循以表示命名实体,例如在新闻专线或新闻博客中,NER 正确注释实体。但是,当我使用诸如 twitter 之类的非正式数据集运行 NER 时,命名实体可能未按应有的方式大写,NER 不会注释实体。我使用的分类器是一个 3-CRF 序列化分类器。谁能让我知道如何让 NER 也识别小写实体?非常感谢任何有关如何破解 NER 以及在何处进行改进的有用建议。提前感谢您的所有帮助。
5 回答
恐怕没有一种简单的方法可以让我们分发的训练模型在运行时忽略案例信息。所以,是的,他们通常只会标注大写的名字。有可能训练一个可以合理工作的无大小写模型(但在大小写文本上效果不佳,因为大小写是英语中的一个重要线索(但不是德语、中文、阿拉伯语等)。
我知道这是一个旧线程,但希望它会对某人有所帮助。正如克里斯托弗曼宁所回答的那样,检测小写的方法是将english.muc.7class.dissim.crf.ser.gz替换为english.muc.7class.caseless.distim.crf.ser.gz,当你解压缩核心 nlp 无壳 jar 文件。
例如,在我的 python 文件中,除了更改为新文件之外,我保持一切不变并且它运行良好(嗯,大部分时间)
st = NERTagger('/Users/username/stanford-corenlp-python/stanford-ner-2014-10-26/classifiers/english.muc.7class.caseless.distsim.crf.ser.gz', '/Users/username/stanford-corenlp-python/stanford-ner-2014-10-26/stanford-ner.jar')
连同其他人的建议。如果您使用的是基于特征的分类器,我肯定会在人名中添加 100-200 个最常见的 3-4 个字母子字符串,或者在一个公认的特征下制作一个地名词典。某些特定的模式必然会在个人姓名中出现很多,而在其他类型的单词中并不经常出现,例如“eli”。
我认为 Twitter 对于这个应用程序来说将是非常困难的。大写字母是一条重要线索,正如您所说,Twitter 上经常缺少它。删除有效英语单词的字典检查用途有限,因为 Twitter 文本包含大量缩写,而且它们通常是独一无二的。
也许语音部分标记和频率分析都可以用来帮助改进专有名词的检测?
这个问题有点老了,但其他人可能会从这个想法中受益。
一种可能训练小写分类器的方法是针对大量正确英语的数据集运行您已经拥有的大写分类器,然后处理该标记文本以删除大小写。然后你有一个标记的语料库,你可以用它来训练一个新的分类器。由于推文的特殊性,这个新的分类器对 Twitter 并不完美,但它是一种快速引导它的方法。