sklearn Count vectorizer - 如何在以后保存、加载和使用转换单个文本
Posted
技术标签:
【中文标题】sklearn Count vectorizer - 如何在以后保存、加载和使用转换单个文本【英文标题】:sklearn Count vectorizer - how to save, load and use to transform a single text at a later point 【发布时间】:2021-09-23 13:48:06 【问题描述】:像往常一样,我正在努力将基本原理概念化。我已经在一个数据集上训练和测试了许多 1v1 估计器。训练数据是每个估计器的 count_vectorizer 和句子中所有单词的 tfidf 分数总和(每个估计器用于不同的分类器,每个分类器都有专用的词典)。 因此 count_vectorizer 的值保持不变,并连接到与每个估计器的给定类相关的分数数组。
下面是一个玩具示例:
cv = CountVectorizer(min_df=2, ngram_range=(1, 3), stop_words=stopwords)
count_vector = cv.fit_transform(series_of_train_texts.tolist())
test_vector = cv.transform(series_of_test_texts.tolist())
df_train_scores = list(zip(df_train['score_1'], df_train['score_2'],
df_train['score_3']
))
training_array = np.array(df_train_list)
test_array = np.array(df_test_list)
X_train = np.hstack([count_vector.todense(), training_array])
X_test = np.hstack([test_vector.todense(),test_array])
svm_var = LinearSVC(tol=1e-5, max_iter=1500)
for class in groups:
svm_var.fit(X_train, df_train[class].tolist())
predictions= list(svm_var.predict(X_test))
我有两个问题:
-
如何引入一个需要首先通过计数矢量化器进行转换并在进行预测之前与各种 tfidf 分数连接的测试句子?
-
如何将其导出以使其可重复使用
我通常的解决方法是 1) 阅读文档; 2)谷歌周围; 3)尝试我能想到的一切。当我达到 3 级时,这是一个痛苦而漫长的过程,我尝试了我认为可行的每一种可能的组合,但还不知道我应该如何思考这个问题。
谁能帮我理解一下?
【问题讨论】:
【参考方案1】:持久化和重用训练模型的最简单方法是将其保存为一个对象。 scikit-learn 中的Pipeline
允许您将预处理步骤和模型结合到对象中。一旦你创建了你的管道,你可以用你的火车组fit()
它,然后使用joblib
保存它,就像这个玩具示例一样:
import joblib
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.svm import LinearSVC
from sklearn.pipeline import Pipeline
import pandas as pd
df = pd.DataFrame(
'A': ['abcde', 'abcde', 'xyz', 'xyz'],
'B': [0,0,1,1]
)
X = df['A']
y = df['B']
model = Pipeline([('countVectorizer', CountVectorizer()),
('svc', LinearSVC())])
model.fit(X, y)
joblib.dump(model, 'model.joblib')
model2 = joblib.load('model.joblib')
model2.predict(['abde'])
【讨论】:
谢谢 - 有一个额外的步骤需要单独执行 - 分数数组的连接:countvectorize > 与分数数组连接 > 分类器的输入 - 有没有办法在这两个步骤之间添加这个?以上是关于sklearn Count vectorizer - 如何在以后保存、加载和使用转换单个文本的主要内容,如果未能解决你的问题,请参考以下文章
sklearn 中的 countvectorizer 仅适用于英语吗?