在正在运行的脚本上重新加载SpaCy语言模型

时间:2019-06-16 02:19:48

标签: python spacy

我开发了一个简单的模型,该模型利用了SpaCy模型en_core_web_lg。项目结构如下:

/model/
    main.py
    app_functions.py
    SpaCy/
          SpaCy_clases.py

在SpaCy_clases.py,我有这样的内容:

import spacy
nlp = spacy.load('en_core_web_lg')

class Spacy1():
   ...
   ...

class Spacy2():
   ...
   ...

我面临的问题是那条线:

nlp = spacy.load('en_core_web_lg')  

由于我需要在定义类的同一文件中导入模型,所以一直使用相同的模型,所以我希望能够进行更改。

我需要选择更改:

nlp = spacy.load('en_core_web_lg') 

通过:

nlp = spacy.load('en_core_web_sm') 

但是,如果我使用main.py中的某个变量执行此操作,则根本没有任何区别。如何加载其他模型而不必停止程序并编辑SpaCy_clases.py

由于要在多个步骤中使用它,因此我想在项目的整个范围内更改模型。但是所有使用Spacy的类都在SpaCy_classes.py中定义。所有其他文件都从那里导入这些类。

1 个答案:

答案 0 :(得分:1)

如果您仅在nlp中使用SpaCy_clases,则只有一种方法。

from SpaCy import SpaCy_clases

# you want to change the nlp attribute of SpaCy_clases 
# if really really want to reload, which is bad practice 
SpaCy_clases.nlp = spacy.load('what_you_want')

确实不推荐,但可以使用。上面更改nlp的方法实际上是在许多文件中使用全局可写变量,这是非常不好的事情。