![](/img/trans.png)
[英]How to use pre-trained models for text classification?Comparing a fine-tuned model with a pre-trained model without fine-tuning
[英]How to use trained text classification model
我实现了一个 SVM 模型,可以将给定的文本分为两类。 该模型使用 data.csv 数据集进行训练和测试。 现在我想将此模型与实时数据一起使用。 为此,我使用了 pickle python 库。 首先我保存了模型。
joblib.dump(clf, "model.pkl")
然后我加载了那个模型。
classifer = joblib.load("model.pkl")
然后我使用下面的输入作为要分类的文本。
new_observation = "this news should be in one category"
classifer.predict([new_observation])
但是运行这个之后,它给出了一个错误。
ValueError: 无法将字符串转换为浮点数:“此新闻应属于一个类别”
我参考了下面的链接以了解如何保存和加载经过训练的模型。 [ https://scikit-learn.org/stable/modules/model_persistence.html][1]
编辑
这是我用来创建 svm 模型的代码。
data = pd.read_csv('data1.csv',encoding='cp1252')
def pre_process(text):
text = text.translate(str.maketrans('', '', string.punctuation))
text = [word for word in text.split() if word.lower() not in
stopwords.words('english')]
words = ""
for i in text:
stemmer = SnowballStemmer("english")
words += (stemmer.stem(i))+" "
return words
textFeatures = data['textForCategorized'].copy()
textFeatures = textFeatures.apply(pre_process)
vectorizer = TfidfVectorizer("english")
features = vectorizer.fit_transform(textFeatures)
features_train, features_test, labels_train, labels_test = train_test_split(features, data['class'], test_size=0.3, random_state=111)
svc = SVC(kernel='sigmoid', gamma=1.0)
clf = svc.fit(features_train, labels_train)
prediction = svc.predict(features_test)
在实现模型之后,这是我尝试向模型提供输入的方式。
joblib.dump(clf, "model.pkl")
classifer = joblib.load("model.pkl")
new_observation = "This news should be in one category"
classifer.predict(new_observation)
编辑
joblib.dump(clf, "model.pkl")
classifer = joblib.load("model.pkl")
textFeature = "Dengue soaring in ......"
textFeature =pre_process(textFeature)
classifer.predict(textFeature.encode())
这是我用来加载模型和向模型输入文本的代码。 这样做之后,我添加了代码来获取预测值。 但我有一个错误。
ValueError: 无法将字符串转换为浮点数:b'dengu soar '
您应该在将new_observation
提供给模型之前对其进行预处理。 在您的情况下,您只预处理了用于训练的textFeatures
,您也必须重复new_observation
的预处理步骤。
pre_process()
的函数new_observation
vectorizer
对从pre_process(new_observation)
获得的输出进行变换我遇到了同样的问题,并通过根据训练数据的形状调整单个字符串数据的大小来解决。
完整代码:
joblib.dump(clf, "model.pkl")
classifer = joblib.load("model.pkl")
textFeature = "Dengue soaring in ......"
vocabulary=pre_process(textFeature)
vocabulary_df =pd.Series(vocabulary)
#### Feature extraction using Tfidf Vectorizer
from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(stop_words='english')
test_ = vectorizer.fit_transform(vocabulary_df.values)
test_.resize(1, features_train.shape[1])
classifer.predict(test_)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.