【发布时间】:2020-12-19 08:09:08
【问题描述】:
到目前为止,我已经使用 Keras Tensorflow 对图像处理、NLP、时间序列预测进行建模。通常在标签具有多个条目的情况下,因此多个类别的任务总是只是预测样本属于哪个类别。例如,可能的类列表是[汽车、人类、飞机、花卉、建筑]。所以最终的预测是样本属于哪个类别——给出每个类别的概率。通常就非常自信的预测而言,一类的概率非常高,而其他类的概率非常低。
现在我遇到了这个 Kaggle 挑战:Toxic Comment Classification Challenge,特别是这个implementation。我认为这是一个多标签分类问题,因为一个样本可以属于不同的类别。事实上,当我检查最终预测时:
我可以看到第一个样本预测有毒和淫秽的概率非常高。以我目前的知识,当我应用标准模型来预测一个类别时,我会预测样本属于哪个类别的概率。因此,无论是 1 级还是 2 级或....所以我会有 - 在有信心的预测的情况下 - 毒性等级的概率很高,而其他等级的概率很低 - 或者在不自信的预测的情况下 - 有毒的 0.4 倍,0.4 倍其余为淫秽和小概率。
现在我对实施的完成方式感到惊讶。我不明白以下内容: 多标签分类是如何完成的(与“通常”模型相反)?
检查代码时,我看到以下模型:
inp = Input(shape=(maxlen,))
x = Embedding(max_features, embed_size, weights=[embedding_matrix])(inp)
x = Bidirectional(LSTM(50, return_sequences=True, dropout=0.1, recurrent_dropout=0.1))(x)
x = GlobalMaxPool1D()(x)
x = Dense(50, activation="relu")(x)
x = Dropout(0.1)(x)
x = Dense(6, activation="sigmoid")(x)
model = Model(inputs=inp, outputs=x)
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
我知道x = Dense(6, activation="sigmoid") 是由于必须预测 6 个类而产生的。到目前为止,我的知识也是如此。但是,为什么会产生多标签分类的概率呢?多标签分类和只预测一个标签的不同选择在实现上的区别在哪里?
这是使用二元交叉熵而不是(稀疏)分类交叉熵以及 6 个类的简单区别吗?所以这说明我们对每个类都有一个二元问题,它分别处理这 6 个类,所以给每个类一个样本属于这个类的概率,因此它很有可能属于不同的类?
【问题讨论】:
标签: python tensorflow keras nlp kaggle