我编写了一个python代码来训练nltk库中的brill tagger学习大约8000个英语句子,并标记大约2000个句子。
brill tagger需要花费许多、许多小时来训练,最后当它完成训练时,程序的最后一个语句有一些微小的语法错误,因此代码没有返回输出。
在纠正错误并使程序运行的同时,是否可以将标记器保持在训练状态,而不必等待数小时,使标记器接受相同数据的训练?
最佳答案
对!你有几个选择。我经常使用的一种快速而肮脏的方法是直接放到控制台上。将此添加到脚本结尾(在培训结束后):
model = train_for_hours_and_hours()
import code
code.interact(local=locals())
这与运行
python3
得到的repl完全一样,只是所有变量(包括训练模型)都可用:$ python3 script.py
[ ... THREE HOURS LATER ... ]
> print(model)
<NLTK.Model ...>
更持久的解决方案是序列化模型,并在培训结束后立即将其保存到文件中。为此,您可以使用pickle:
import pickle
MODEL_FILE = 'model.pickle'
try:
# Try to load the model from disk
with open(MODEL_FILE, 'rb') as f:
model = pickle.load(f)
except FileNotFoundError:
# Train the model if it doesn't exist yet
model = train_for_hours_and_hours()
with open(MODEL_FILE, 'wb') as f:
pickle.dump(f, model)
# now use `model` here