django - 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)
谁能建议如何使它更快
解决方案
从文档:
仅应用您需要的管道组件。从模型中获取您实际上不需要的预测加起来并且在规模上变得非常低效。为了防止这种情况,请使用 disable 关键字参数来禁用您不需要的组件——无论是在加载模型时,还是在使用 nlp.pipe 处理期间。有关更多详细信息和示例,请参阅有关禁用管道组件的部分。
这是禁用组件的方式:
for doc in nlp.pipe(texts, disable=["tagger", "parser"]):
... whatever ...
作为一个单独的问题,什么是jd
?如果它是单个字符串,那么 usingnlp.pipe
将无济于事。如果它是一个很长的字符串(如许多页面),您最好将其拆分为分段符或其他自然拆分并nlp.pipe
在其上使用。
这显然会导致问题。我怀疑这不是您的实际代码,但如果是,您应该修复它。
for each in doc:
doc = each
推荐阅读
- webusb - 如何在 SAMD51 或任何其他 MCU 上实现 WebUSB?
- symfony - 如何使用 PayumBundle 和 Paypal 测试测试值的否定响应
- angular - TypeScript Type 的等效 scala 类型是什么
- r - 按另一个因素分组的每个因素的计数
- android - 为什么改造忽略成功的响应代码?
- python - pandas apply function that returns more rows
- excel - 如何将 Excel 范围中的字符串列表分配给 Outlook VBA 变量?
- connector - 如何从我的 PowerApps 自定义连接器响应中提取字符串值?
- gateway - 由于凭证名称,使用 SDS 的 Istio Ingress Gateway 失败
- data-structures - 求解线性规划中的负系数