使用 python 和 keras 进行超过 2 类 的文本分类

Text classification for more than 2 classes with python and keras

我正在尝试使用神经元网络进行分类。

我的数据是这样的:

Sentence category
sentence 1 0
sentence 2 1
sentence 3 2
sentence 4 3

因此我有 4 个不同的类别。 我将句子和标签分开放在两个不同的列表中,并将第一个列表(带有场景)放入分词器中。

编辑: 因为有人问数据样本。这是 Dropbox (data_samples.txt) 的 link 和更多解释。 0 = 不需要,1 = 标题,2 = 作者姓名,3 = 页数。句子是用 |从标签中分离出来。由于词形还原,有很多特殊字符(如 -- > ,"),但分词器会跳过这些字符。 内容来自不同的网站,我只是在学习的情况下使用它(不是为了钱或恶意)

y_train = array(labels) # it has to be numpy array otherwise it will cause errors, labels is a list of integers
x_train = tokenizer.texts_to_sequences(newLines) # newLines is a list with all sentences
x_train = pad_sequences(x_train, maxlen=sequenceLength)
vocabSize = len(tokenizer.word_index) + 1

现在我要训练我的模型

mymodel = Sequential()
mymodel.add(Embedding(input_dim=vocabSize, output_dim=100, input_length=sequenceLength))
mymodel.add(Conv1D(32, 3, padding='same', activation='relu'))
mymodel.add(MaxPooling1D())
mymodel.add(Flatten())
mymodel.add(Dense(250, activation='relu'))
mymodel.add(Dense(4, activation='softmax'))
mymodel.compile(optimizer="adam", loss="categorical_crossentropy", metrics=["accuracy"])
history = mymodel.fit(x_train, y_train, epochs=30, batch_size=8)

但是如果我启动程序,我会收到以下错误:

我知道是因为最后的Dense Layer。如果我写 1 而不是 4,我不会收到错误。但是我认为最后一个密集层需要一个 4 作为参数,因为我有 4 个类别。 我认为最后一个用 1 而不是 4 的密集层是不正确的,因为损失是 0.0000e+00。那看起来不正确 xD

我做错了什么?

将 loss="categorical_crossentropy" 替换为 "sparse_ categorical_crossentropy"。

模型每 class 产生一个值; sparse_ loss 知道如何将 [0-3] 范围内的单个值与这 4 个分数值进行比较。