在spaCy中包括字典(地名词典)以改善NER的理想方法是什么?

问题描述 投票:9回答:1

我目前正在替换基于nltk实体提取和regexp匹配的系统,其中我有几个命名实体字典。字典实体既有普通类型(PERSON(员工)等)又有自定义类型(例如SKILL)。我想使用预先训练的spaCy模型,并以某种方式包括我的词典,以提高NER的准确性。这是我对可能的方法的想法:

  • 使用spaCy的Matcher API,遍历字典并通过回调添加每个短语以添加实体?

  • 我刚刚发现了spacy-lookup,这似乎是提供长单词/短语匹配列表的简便方法。

  • 但是如果我想进行模糊匹配怎么办?有没有一种方法可以直接添加到Vocab中,从而通过Bloom过滤器/ n-gram词向量进行一些模糊匹配,还是有一些适合这种需求的扩展?否则我想我可以复制spacy-lookup并用其他东西替换flashtext机器,例如Levenshtein距离。

  • 在玩spaCy的过程中,我确实尝试仅使用字典中的单个单词直接训练NER(没有任何句子上下文),但这确实“有效”。但是,我当然必须格外小心,以防止模型忘记所有内容。

任何帮助表示赞赏,我觉得这必须是一个非常普遍的要求,很想听听对人们来说最有效的方法。

python nlp named-entity-recognition spacy
1个回答
0
投票

我建议您查看spaCy的Entity Ruler。如果将现有字典转换为用于匹配的模式,则可以为每个实体和新类型添加规则。

这非常强大,因为您可以将其与标准spacy模型中可用的现有统计NER相结合,以实现您提到的某些“模糊匹配”。从文档:

实体标尺旨在与spaCy的现有统计模型集成,并增强命名的实体识别器。如果将其添加到“ ner”组件之前,则实体识别器将尊重现有的实体跨度并围绕其调整其预测。在某些情况下,这可以显着提高准确性。如果是在“ ner”组件之后添加的,则实体标尺只会在文档模型与模型预测的现有实体不重叠的情况下才向文档中添加跨度。要覆盖重叠的实体,可以在初始化时设置overwrite_ents = True。

© www.soinside.com 2019 - 2024. All rights reserved.