Machine learning 卷积网络用于文本分类

Machine learning 卷积网络用于文本分类,machine-learning,nlp,deep-learning,keras,Machine Learning,Nlp,Deep Learning,Keras,我正在尝试用Keras训练一个卷积神经网络,用于识别有关烹饪的堆栈交换问题的标签 我的数据集的第i个问题元素如下所示: id 2 title How should I cook bacon in an oven? content <p>I've heard of people cooking bacon in an ov... t

我正在尝试用Keras训练一个卷积神经网络,用于识别有关烹饪的堆栈交换问题的标签

我的数据集的第i个问题元素如下所示:

id                                                         2
title                    How should I cook bacon in an oven?
content    <p>I've heard of people cooking bacon in an ov...
tags                                 oven cooking-time bacon
Name: 1, dtype: object
这表示我的输入向量。我也有矢量化的标签,并为输入和标签提取密集矩阵

tags = [" ".join(x) for x in dataframes['cooking']['tags']]
Xd = X.todense()

Y = vectorizer.fit_transform(tags)
Yd = Y.todense()
将数据拆分为训练集和验证集

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(Xd, Yd, test_size=0.33, random_state=42)
现在我正在尝试训练一个Conv1D网络

from keras.models import Sequential
from keras.layers import Dense, Activation,Flatten
from keras.layers import Conv2D, MaxPooling2D,Conv1D, Embedding,GlobalMaxPooling1D,Dropout,MaxPooling1D

model = Sequential()

model.add(Embedding(Xd.shape[1],
                    128,
                    input_length=Xd.shape[1]))
model.add(Conv1D(32,5,activation='relu'))
model.add(MaxPooling1D(100,stride=50))
model.add(Conv1D(32,5,activation='relu'))
model.add(GlobalMaxPooling1D())
model.add(Dense(Yd.shape[1], activation ='softmax'))


model.compile(optimizer='rmsprop',
          loss='categorical_crossentropy',
          metrics=['accuracy'])
model.fit(X_train, y_train, batch_size=32,verbose=1)
但它的准确率非常低,而且它显示出随着时代的发展,损失几乎没有增加

Epoch 1/10
10320/10320 [==============================] - 401s - loss: 15.8098 - acc: 0.0604   
Epoch 2/10
10320/10320 [==============================] - 339s - loss: 15.5671 - acc: 0.0577   
Epoch 3/10
10320/10320 [==============================] - 314s - loss: 15.5509 - acc: 0.0578   
Epoch 4/10
10320/10320 [==============================] - 34953s - loss: 15.5493 - acc: 0.0578  
Epoch 5/10
10320/10320 [==============================] - 323s - loss: 15.5587 - acc: 0.0578   
Epoch 6/10
 6272/10320 [=================>............] - ETA: 133s - loss: 15.6005 - acc: 0.0550

你的损失函数值的方向不对。这意味着您的模型无法捕获需要关注的功能。有两种方法可以尝试

  • 改变你的模式。我建议首先选择一些广泛使用的文本分类模型。然后用它进行实验,以获得更高的精度
  • 虽然您的输入表示有意义,但您可以尝试使用一些特殊的语句到向量模型,如(一个实现)

  • 可以通过对文本进行词干分析来减少特征。可以通过处理诸如“wooooow”之类的词来实现进一步的缩减,这些词被认为是“哇”或“looooove”,后者指的是“爱”。同时我也希望大家把所有的文字放低,这将把“爱”和“爱”统一为一个特征。
    Epoch 1/10
    10320/10320 [==============================] - 401s - loss: 15.8098 - acc: 0.0604   
    Epoch 2/10
    10320/10320 [==============================] - 339s - loss: 15.5671 - acc: 0.0577   
    Epoch 3/10
    10320/10320 [==============================] - 314s - loss: 15.5509 - acc: 0.0578   
    Epoch 4/10
    10320/10320 [==============================] - 34953s - loss: 15.5493 - acc: 0.0578  
    Epoch 5/10
    10320/10320 [==============================] - 323s - loss: 15.5587 - acc: 0.0578   
    Epoch 6/10
     6272/10320 [=================>............] - ETA: 133s - loss: 15.6005 - acc: 0.0550