繁体   English   中英

在生成要添加到 Spacy 中的短语匹配器的模式的同时加快模式创建

[英]Speed up patterns creation while generating patterns to be added to Phrase Matcher in Spacy

尝试在烧瓶应用程序中使用 Spacy 的短语匹配器从给定的文本片段中识别实体。

我有一个自定义的实体列表(大约 150K),我想使用 Spacy 的短语匹配器来匹配。 在创建模式以及添加到 PhraseMatcher 时,我正在使用此处指定的 tokenizer.pipe 使用最快的推荐方法。

with open('entities_index_keys.pkl', 'rb')as f:
    entities_list=pickle.load(f)

print (len(entities_list))

phrase_matcher_obj = PhraseMatcher(nlp.vocab)

# create doc for each entity from entities_list
patterns = list(nlp.tokenizer.pipe(entities_list))
phrase_matcher_obj.add('my_entities', None, *patterns)

下面的行需要一段时间才能完成。 我使用大小为 1200 的实体列表取得了成功,并且在运行时也非常快。 但是当处理 15 万个实体时,它会显着变慢。

patterns = list(nlp.tokenizer.pipe(entities_list))

我宁愿避免在运行时创建模式,但由于某种原因,使用上述代码创建的“文档”/模式列表会损坏对象。 那么有没有一种方法可以快速创建模式并快速添加到短语匹配器对象中而不会受到速度影响?

另一种替代方法是将 PhraseMatcher 保存到磁盘,并在 Flask 应用程序路由执行期间快速加载它。 (尝试酸洗但没有成功)

您应该能够腌制PhraseMatcher Unpickling 并不是非常快,因为它必须重建一些内部数据结构,但它不必重新标记文本并且应该比从头开始构建更快。 由于一些错误修正,我推荐 v2.2.2+。

如果您在腌制PhraseMatcher遇到错误,请在问题跟踪器中提交错误报告。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM