在多类多标签分类中确定神经网络的“置信度”

时间:2018-07-23 21:46:34

标签: tensorflow neural-network keras classification text-classification

我正在尝试一个多类,多标签分类问题。最终,我想训练一个模型来对正文包含的类别进行预测。

在此问题中,训练数据集由单个句子组成,每个句子带有一个标签。但是,该文本可能是一个(或更多)段落,并且可能匹配多个类别。我正在Keras(TensorFlow后端)上的神经网络进行尝试。这是我到目前为止的内容:

embeddings = nlp.vocab.vectors.data
model = Sequential()
model.add(Embedding(embeddings.shape[0], embeddings.shape[1], 
input_length=100, trainable=False, weights=[embeddings], mask_zero=True))
model.add(Dense(256, use_bias=False, activation='relu'))
model.add(LSTM(64, recurrent_dropout=0, dropout=0))
model.add(Dense(y_train.shape[1], activation='sigmoid'))
model.compile(loss='binary_crossentropy', optimizer=Adam(lr=0.001), metrics=['sparse_categorical_accuracy'])

即使在我用于将测试组合在一起的微小训练数据集(20个项目和2个类别)上,该模型实际上也表现不错。

但是,有两个我似乎无法解决的问题:

  1. 给出的训练数据每个句子包含一个类别,即使输入文本很明显匹配两个类别,网络似乎也“偏爱”输出中的一个类别。当我提供包含多个类别的训练句子时,这种情况会改变。我有什么可以改变的,即使在每个条目只有一个类别的数据集上进行训练时,网络也可以使我对多次激活具有很高的信心?

  2. 即使在完全乱码的情况下,网络似乎仍可以提供合理的概率。换句话说,“ asdfasdfasdf”在我的训练集中的两个类别中给我的分数约为0.5。有什么办法可以克服这个问题?

(如果很重要,我正在使用spaCy进行单词标记化+矢量化)

0 个答案:

没有答案