【问题标题】:How to save a trained NLTK POS-tagger [duplicate]如何保存训练有素的 NLTK POS-tagger [重复]
【发布时间】:2018-03-16 14:43:01
【问题描述】:

我想知道如何保存一个训练有素的 NLTK (Unigram)Tagger。我用下面的代码训练了一个Portuguese UnigramTagger,根据语料库,它可能需要一段时间才能运行,所以我想避免重新运行它。

import nltk
from nltk import mac_morpho

def get_unigram_tagger():
  p_train = 0.9
  tagged_sents = mac_morpho.tagged_sents()
  size = int(len(tagged_sents)*0.9)
  train_sents = tagged_sents[:size]
  test_sents = tagged_sents[size:]
  uni_tagger = nltk.UnigramTagger(train_sents)
  print "Test accuracy =", uni_tagger.evaluate(test_sents)
  return uni_tagger

所以我从这个函数中得到uni_tagger,如果我再次运行程序,我必须重新计算它。也许我可以以某种方式保存uni_tagger,以便下次我只需要从文件中读取它(权重等)。

【问题讨论】:

标签: python nlp nltk


【解决方案1】:

您可以使用 pickle 之类的东西将模型持久保存到磁盘。

import nltk
import pickle
from nltk import mac_morpho
def get_unigram_tagger():
  p_train = 0.9
  tagged_sents = mac_morpho.tagged_sents()
  size = int(len(tagged_sents)*0.9)
  train_sents = tagged_sents[:size]
  test_sents = tagged_sents[size:]
  uni_tagger = nltk.UnigramTagger(train_sents)
  print "Test accuracy =", uni_tagger.evaluate(test_sents)
  return uni_tagge
tagger = unigram_tagger()
s = pickle.dumps(tagger)
model2 = pickle.loads(s)

你也可以用sklearn的pickle替换(joblib.dump&joblib.load)

from sklearn.externals import joblib
joblib.dump(tagger, 'filename.pkl') 
tagger3 = joblib.load('filename.pkl')

Sklearn 声称对于较大的 numpy 模型数组,joblib 比 pickle 更有效。

你可以在这里阅读更多

http://scikit-learn.org/stable/modules/model_persistence.html

https://docs.python.org/3/library/pickle.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2012-01-25
    • 1970-01-01
    • 2012-04-18
    • 2015-01-26
    相关资源
    最近更新 更多