我已经编写了一个 Python 代码来训练来自 NLTK 库的 Brill Tagger 大约 8000 个英语句子并标记大约 2000 个句子。
Brill Tagger 需要很多很多小时来训练,最后当它完成训练时,程序的最后一条语句有一些微小的语法错误,因此代码没有返回输出。
是否可以在纠正错误并使程序运行的同时将标注器保持在训练状态,而无需等待几个小时让标注器接受相同数据的训练?
我已经编写了一个 Python 代码来训练来自 NLTK 库的 Brill Tagger 大约 8000 个英语句子并标记大约 2000 个句子。
Brill Tagger 需要很多很多小时来训练,最后当它完成训练时,程序的最后一条语句有一些微小的语法错误,因此代码没有返回输出。
是否可以在纠正错误并使程序运行的同时将标注器保持在训练状态,而无需等待几个小时让标注器接受相同数据的训练?
是的!你有几个选择。我经常使用的一件快速而肮脏的事情是掉到控制台上。将此添加到脚本的末尾(在培训结束后):
model = train_for_hours_and_hours()
import code
code.interact(local=locals())
这与您从 running 获得的 REPL 完全一样python3
,除了所有变量(包括您的训练模型)都可用:
$ 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