如何使用joblib使用自定义标记化函数序列化CountVectorizer



我使用带有自定义标记化方法的CountVectorizer。当我序列化它,然后取消序列化它时,我收到以下错误消息:

AttributeError: module '__main__' has no attribute 'tokenize'

如何"序列化"tokenize方法?

这里有一个小例子:

import nltk
from nltk.stem.snowball import FrenchStemmer
stemmer = FrenchStemmer()
def stem_tokens(tokens, stemmer):
    stemmed = []
    for item in tokens:
        stemmed.append(stemmer.stem(item))
    return stemmed
def tokenize(text):
    tokens = nltk.word_tokenize(text)
    stems = stem_tokens(tokens, stemmer)
    return stems
tfidf_vec = TfidfVectorizer(tokenizer=tokenize, stop_words=stopwords.words('french'), ngram_range=(1,1))
clf = MLPClassifier(solver='lbfgs', alpha=0.02, hidden_layer_sizes=(400, 50))
pipeline = Pipeline([("tfidf", tfidf_vec),
                ("MLP", clf)])
joblib.dump(pipeline,"../models/classifier.pkl")

joblib(以及它在引擎盖下使用的pickle)以这种方式序列化函数:它只记住从模块和函数名称导入函数的路径。因此,如果您在交互式会话中定义一个函数,则没有地方可以从中导入此函数;一旦进程退出,它就会被销毁。

若要使序列化工作,请将此代码放入 Python 模块(将其保存到.py文件),并确保此模块在调用 joblib.load 时可用(可导入)。

相关内容

  • 没有找到相关文章

最新更新