我正在编写一个文本分类器,它查看一堆字符串并对它们进行分类。我每天都会从应用程序中生成大量这些字符串。假设我今天第一次运行我的脚本。我会将模型与我到目前为止的所有字符串相匹配。此时我想将模型保存在磁盘上。
明天,我将加载模型并使用它来预测新字符串集上的标签。然后我将手动查看预测。那些错误制作的,我将更正标签并将它们作为新的训练集提供,以改进它。等等!
问题:
这就是我在做的事情:
## learn.py
train_data = ['list', 'of', 'input', 'strings']
labels = ['list', 'of', 'output', 'labels']
tfidf_vec = TfidfVectorizer()
clf = MultinomialNB()
# build tf-idf matrix
train_tfidf = tfidf_vec.fit_transform(data)
# train classifier
clf.fit(train_tfidf, labels)
# persist vocabulary and model
with open('model.pkl', 'wb') as outf:
pickle.dump(tfidf_vec, outf) # need to save vocabulary and tfidf
pickle.dump(clf, outf) # need to save the classifier
## predict.py
test_data = ['list', 'of', 'strings', 'to', 'classify']
labels = ['list', 'of', 'output', 'labels']
# load tfidf_vec and clf from pickle
with open('model.pkl', 'rb') as inf:
tfidf_vec = pickle.load(inf)
clf = pickle.load(inf)
# compute tfidf of new strings with learned vocabulary
test_tfidf = tfidf_vec.transform(test_data)
# predict labels
predicted = clf.predict(test_tfidf)
这可以按预期工作。但我想知道这是否是坚持不懈的正确方法。
而且,下次当我运行learn.py
时,我如何才能增加知识,而不是让它从头开始学习?即使没有持久性,如果我在同一个脚本中连续两次运行'fit',它是否适合从头开始?