spacy nlp需要很长时间才能回答(django后端)

spacy nlp需要很长时间才能回答(django后端),django,nlp,spacy,Django,Nlp,Spacy,我有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()) fo

我有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)

有人能从以下方面建议如何加快速度吗

仅应用所需的管道组件。从模型中得到你实际上不需要的预测,加起来在规模上变得非常低效。要防止出现这种情况,请使用disable关键字参数禁用您不需要的组件—无论是在加载模型时,还是在使用nlp.pipe处理过程中。有关更多详细信息和示例,请参见“禁用管道组件”一节

以下是禁用组件的方式:

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

作为一个单独的问题,什么是
jd
?如果它是一个字符串,那么使用
nlp.pipe
是没有帮助的。如果它是一个很长的字符串(就像许多页面一样),那么最好在段落分隔符或其他自然分隔符上拆分它,并在上面使用
nlp.pipe


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

for each in doc:
    doc = each

谢谢@polm23。我需要所有的组件,理想情况下doc=list(doc)[0]。。。这部分花了很多时间。。。所以我把它重新写为for循环…观察到进入for循环需要很多时间。。这很奇怪。。。。如何解释这种行为