Ein*_*son 9 python nlp named-entity-recognition spacy
我目前正在替换基于nltk实体提取与regexp匹配相结合的系统,其中我有几个命名实体字典。字典实体既有普通类型(PERSON(员工)等)又有自定义类型(例如SKILL)。我想使用预先训练的spaCy模型,并以某种方式包括我的词典,以提高NER的准确性。这是我对可能的方法的想法:
使用spaCy的Matcher API,遍历字典并使用回调添加每个短语以添加实体?
我刚刚发现了spacy-lookup,这似乎是提供长单词/短语匹配列表的简便方法。
但是,如果我想进行模糊匹配怎么办?有没有一种方法可以直接添加到Vocab中,从而通过Bloom过滤器/ n-gram词向量进行一些模糊匹配,还是有一些适合这种需求的扩展?否则,我想我可以复制spacy-lookup并用其他方式(例如Levenshtein距离)替换flashtext机器。
在玩spaCy的过程中,我确实尝试仅使用字典中的单个单词直接训练NER(没有任何句子上下文),这确实“有效”。但是,我当然必须格外小心,以防止模型忘记所有内容。
任何帮助表示赞赏,我觉得这必须是一个非常普遍的要求,并且很想听听对人们来说最有效的方法。
我建议查看 spaCy 的Entity Ruler。如果将现有字典转换为匹配模式,则可以为每个实体和新类型添加规则。
\n\n这是非常强大的,因为你可以将它与标准 spacy 模型中现有的统计 NER 结合起来,以实现你提到的一些“模糊匹配”。来自文档:
\n\n\n\n实体标尺旨在与 spaCy\xe2\x80\x99s 现有统计模型集成并增强命名实体识别器。如果它在“ner”组件之前添加了\xe2\x80\x99,则实体识别器将尊重现有的实体跨度并围绕它调整其预测。在某些情况下,这可以显着提高准确性。如果它在“ner”组件之后添加,则实体标尺仅在文档与模型预测的现有实体不重叠的情况下将跨度添加到文档中。要覆盖重叠实体,您可以在初始化时设置 overwrite_ents=True 。
\n