首页 > 解决方案 > spacy nlp 需要很长时间才能回答(django 后端)

问题描述

我有 django 后端,我正在使用 spacy 进行文本处理

这是我的代码示例

nlp = spacy.load('en_core_web_sm')

def process_data(jd):
    # print(jd)
    print('process_data start', time.time())
    #doc = nlp(jd)
    doc = nlp.pipe([jd])
    print('process_data pipe', time.time())
    for each in doc:
        print('process_data inside loop', time.time())
        doc = each
        print('process_data done loop', time.time())
    print('process_data nlp', time.time())

这是相同的输出

process_data start 1603023551.9794967
process_data pipe 1603023551.979678
process_data inside loop 1603023564.9438393
process_data done loop 1603023565.172661
process_data nlp 1603023565.2528574
process_data skills 1603023570.6167505

spacy.load 发生在应用程序自身初始化时...但是如果您看到进入 for 循环将花费大量时间(1603023564.9438393 - 1603023551.979678)

谁能建议如何使它更快

标签: djangonlpspacy

解决方案


文档

仅应用您需要的管道组件。从模型中获取您实际上不需要的预测加起来并且在规模上变得非常低效。为了防止这种情况,请使用 disable 关键字参数来禁用您不需要的组件——无论是在加载模型时,还是在使用 nlp.pipe 处理期间。有关更多详细信息和示例,请参阅有关禁用管道组件的部分。

这是禁用组件的方式:

for doc in nlp.pipe(texts, disable=["tagger", "parser"]):
    ... whatever ...

作为一个单独的问题,什么是jd?如果它是单个字符串,那么 usingnlp.pipe将无济于事。如果它是一个很长的字符串(如许多页面),您最好将其拆分为分段符或其他自然拆分并nlp.pipe在其上使用。


这显然会导致问题。我怀疑这不是您的实际代码,但如果是,您应该修复它。

for each in doc:
    doc = each

推荐阅读