python - 使用 keras 进行文档分类 - 数字的分层序列

标签 python machine-learning keras nlp document-classification

我目前正在处理以下情况的分类问题:

标签的长度始终为 5 位数字,例如:

99923 this is sample document one
56743 this is sample document two
...

其中第一个数字代表某个类别,后面的每个数字代表子类别,依此类推。

目前我正在使用 Keras 并进行以下设置:

model = Sequential()
model.add(Dense(512, input_shape=(vocab_size,)))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(512))
model.add(Activation('relu'))
model.add(Dropout(0.3))
model.add(Dense(num_labels))
model.add(Activation('softmax'))
model.summary()
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])

由于我的训练数据有限(总共大约 80k 个样本),我决定仅使用第一位数字来估计主类别,并且我得到了相当不错的结果,准确率约为 90%,而无需进行任何预处理.

5 - this is sample of maincategory 5
9 - this is sample of maincategory 9
...

现在我想进一步接近一个级别,并使用两位数字来预测主类别和第一个子类别。这给我带来了一个问题,即通常没有一个样本,例如组合“12”。

51 - this is sample of maincategory 51
95 - this is sample of maincategory 95
...

我告诉 Keras 只使用至少 1 个样本的标签(知道这很糟糕),并得到了大约 40 个标签,总体准确率为 85%,考虑到我丢失了很多标签,这似乎相当不错 sample 。

我的问题是:

这种预测可以更容易/更有效地完成吗?如果我让我的“两位数”模型从未经训练的类别中预测出一个看不见的样本,我就会遇到将样本拟合到错误类别的问题......

我可以使用 Keras 解决这个预测问题吗?

最佳答案

嗯,正如我在评论部分提到的,我想到的一个想法是为层次结构中的每个类别级别使用 softmax 层。例如,对于三个分类级别,我们有三个分类器层:

from keras.models import Model

inp = Input(shape=(vocab_size,))
x = Dense(512, activation='relu', input_shape=(vocab_size,))(inp)
x = Dropout(0.3))(x)
x = Dense(128, activation='relu'))(x)

cat_1 = Dense(num_labels_cat1, activation='softmax')(x)
cat_2 = Dense(num_labels_cat2, activation='softmax')(x)
cat_3 = Dense(num_labels_cat3, activation='softmax')(x)

model = Model(inp, [cat_1, cat_2, cat_3])

就好像所有分类级别的信息都编码在最后一个非分类器层的输出中。因此,将其传递给专门的分类器层使模型能够提取有关相应分类级别的信息。

请注意,这可能会或可能不会有良好的性能。你必须尝试才能找到答案。不过,仍有改进的空间。例如,您可以使用 Embedding 层,并在模型中包含 Conv1D 或 LSTM 层。

如果您不熟悉 Keras 功能 API,您可能需要阅读 official guide .

关于python - 使用 keras 进行文档分类 - 数字的分层序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53852850/

相关文章:

python - 猴子补丁向现有模块添加新类和函数

python - Pandas dataframe,每个单元格都进入列表 - 更pythonic的方式?

python - 使用 Keras 进行整数序列预测

r-caret 中的随机搜索

python - 这两行代码有什么区别?机器学习阵列

keras - LSTM 时间序列产生偏移预测?

在 __init__ 中定义和设置的 Python 模拟属性

python - 将 HTML 表单值解释为 Flask View 中的列表

python - 我可以通过哪些方式调试此 keras 层?

opencv - 如何在 OpenCV 中加载带有 tensorflow 后端的 Keras 模型构建