【发布时间】:2019-05-20 00:59:03
【问题描述】:
我目前正在处理以下情况的分类问题:
标签的长度总是 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'])
由于我的训练数据有限(总共大约 8 万个样本),我决定只使用第一个数字来估计主类别,我得到了相当不错的结果,准确率约为 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%,考虑到我已经丢失了很多,这似乎相当不错样本。
我的问题是:
这种预测可以更容易/更有效地完成吗?如果我让我的“两位数”模型从未经训练的类别中预测出一个看不见的样本,我会遇到将样本拟合到错误类别中的问题......
我可以使用 Keras 解决这个预测问题吗?
【问题讨论】:
-
您是否尝试过为每个类别级别使用一个 softmax 层,即一层预测类别,另一层预测子类别,等等?
-
因为我不知道如何实现这一点 - 不,但这似乎是个好主意。我尝试实现以下目标:如果我知道我的主类别是 9,则必须根据该类别进行下一个预测,因此:基于 mc 9,这是可能的子类别。关于代码级别的任何想法?提前致谢! @今天
标签: python machine-learning keras nlp document-classification