用词袋方法预测文本

Posted

技术标签:

【中文标题】用词袋方法预测文本【英文标题】:Predict a text with bag of word approach 【发布时间】:2019-01-14 04:28:00 【问题描述】:

我正在尝试使用词袋模型进行文本分类。一切正常,直到我使用测试集来测试和评估准确性,但我们如何检查单个语句的类。

我有一个带有 2 个类标签和正文的数据框。

cout_vect = CountVectorizer()
final_count = cout_vect.fit_transform(df['body'].values.astype('U'))

from sklearn.model_selection import train_test_split
from keras.models import Sequential
from keras.layers import Dense
from keras.wrappers.scikit_learn import KerasClassifier
from keras.utils import np_utils
X_train, X_test, y_train, y_test = train_test_split(final_count, df['label'], test_size = .3, random_state=25)

model = Sequential()
model.add(Dense(264, input_dim=X_train.shape[1], activation='relu'))
model.add(Dense(128, activation='relu'))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(16, activation='relu'))
model.add(Dense(8, activation='relu'))
model.add(Dense(3, activation='softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
y_train = np_utils.to_categorical(y_train, num_classes=3)
y_test = np_utils.to_categorical(y_test, num_classes=3)

model.fit(X_train, y_train, epochs=50, batch_size=32)
model.evaluate(x=X_test, y=y_test, batch_size=None, verbose=1, sample_weight=None)

现在我想使用我的模型来预测这个陈述。这个怎么做 我尝试使用计数向量器将我的语句转换为向量,但根据词袋方法,它只是一个 8 维向量。

x = "Your account balance has been deducted for 4300"
model.predict(x, batch_size=None, verbose=0, steps=None)

【问题讨论】:

【参考方案1】:

你需要这样做:

# First transform the sentence to bag-of-words according to the already learnt vocabulary
x = cout_vect.transform([x])

# Then send the feature vector to the predict
print(model.predict(x, batch_size=None, verbose=0, steps=None))

您还没有展示“我尝试使用计数矢量化器将我的语句转换为矢量,但根据词袋方法,它只是一个 8 维矢量。”,但我我猜你是这样做的:

cout_vect.fit_transform([x])

如果你调用fit()(或fit_transform()),向量化器会忘记所有之前的训练,只记住当前的词汇,因此你只得到一个大小为8的特征向量,而你之前的向量更大.

【讨论】:

以上是关于用词袋方法预测文本的主要内容,如果未能解决你的问题,请参考以下文章

如何使用词袋训练和预测?

视频分类算法

sklearn - 从文本文档中预测多标签分类中的前 3-4 个标签

xgboost 无袋预测

词袋模型(新闻文本分类)

R语言构建文本分类模型:文本数据预处理构建词袋模型(bag of words)构建xgboost文本分类模型xgboost模型预测推理并使用混淆矩阵评估模型可视化模型预测的概率分布