如何使用 joblib 的自定义标记化函数序列化 CountVectorizer
How to serialize a CountVectorizer with a custom tokenize function with joblib
我使用带有自定义标记化方法的 CountVectorizer。当我序列化它,然后反序列化它时,我收到以下错误消息:
AttributeError: module '__main__' has no attribute 'tokenize'
如何"serialize" 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
时此模块可用(可导入) .
我使用带有自定义标记化方法的 CountVectorizer。当我序列化它,然后反序列化它时,我收到以下错误消息:
AttributeError: module '__main__' has no attribute 'tokenize'
如何"serialize" 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
时此模块可用(可导入) .