【问题标题】:Text Classification for multiple label多标签的文本分类
【发布时间】:2017-01-22 04:28:33
【问题描述】:

我通过卷积神经网络进行文本分类。我为我的项目使用了健康文件(ICD-9-CM 代码),我使用了与 dennybritz 相同的模型,但我的数据有 36 个标签。我使用 one_hot 编码来编码我的标签。

这是我的问题,当我运行每个文档都有一个标签的数据时,我的代码的准确度从 0.8 到 1 是完美的。如果我运行具有多个标签的数据,准确度会显着降低。

例如:一个文档有一个标签为"782.0":[0 0 1 0 ... 0],
一个文档有多个标签为"782.0 V13.09 593.5":[1 0 1 0 ... 1]

谁能说明为什么会发生这种情况以及如何改进它?

【问题讨论】:

    标签: python machine-learning tensorflow text-classification


    【解决方案1】:

    标签编码似乎正确。如果您有多个正确的标签,[1 0 1 0 ... 1] 看起来完全没问题。 Denny 的post 中使用的损失函数是tf.nn.softmax_cross_entropy_with_logits,这是针对多类问题的损失函数。

    计算 logits 和标签之间的 softmax 交叉熵。

    测量离散分类任务中的概率误差 哪些类是互斥的(每个条目都属于一个类)。

    在多标签问题中,你应该使用tf.nn.sigmoid_cross_entropy_with_logits

    在给定 logits 的情况下计算 sigmoid 交叉熵。

    衡量离散分类任务中的概率误差,其中每个类都是独立的,而不是互斥的。例如,可以执行多标签分类,其中一张图片可以同时包含大象和狗。

    损失函数的输入是 logits (WX) 和目标(标签)。

    修正准确度度量

    为了正确衡量多标签问题的准确性,需要更改以下代码。

    # Calculate Accuracy
    with tf.name_scope("accuracy"):
        correct_predictions = tf.equal(self.predictions, tf.argmax(self.input_y, 1))
        self.accuracy = tf.reduce_mean(tf.cast(correct_predictions, "float"), name="accuracy")
    

    当你可以有多个正确的标签时,上面的correct_predictions 的逻辑是不正确的。例如,假设num_classes=4,标签 0 和 2 是正确的。因此,您的 input_y=[1, 0, 1, 0]. correct_predictions 需要打破索引 0 和索引 2 之间的关系。我不确定tf.argmax 如何打破关系,但如果它通过选择较小的索引来打破关系,则标签 2 的预测总是被认为是错误的,这肯定会损害您的准确性。

    实际上在多标签问题中,precision and recall 是比准确度更好的指标。您也可以考虑使用precision@k (tf.nn.in_top_k) 来报告分类器性能。

    【讨论】:

    • 谢谢greeness,我还是不明白logloss函数的输入是什么,actpred是什么。
    • 博客中的损失函数其实是正确的。但是准确度度量需要更改,我建议您使用precision/recall而不是accuracy。
    • 嗨,greeness,我尝试同时使用tf.nn.top_k()tf.nn.in_top_k'. But I have trouble in passing argument . When I put tf.nn.top_k(self.scores, 2)`。程序在l2_reg_lambda=l2_reg_lambda 行中发送了错误TypeError: Input 'y' of 'Equal' Op has type int64 that does not match type int32 of argument 'x'.。您能建议如何使用这两个功能吗?
    • 谢谢,根据帖子tf.nn.in_top_k(y, tf.cast(tf.argmax(y_, 1), "int32"), 1)。我把y改成“self.scores”,“y_”怎么样
    • 这解释了目标的使用。希望能帮助到你。 stackoverflow.com/questions/36080445/…
    猜你喜欢
    • 2016-06-14
    • 1970-01-01
    • 2021-08-17
    • 2018-06-10
    • 2016-05-25
    • 2017-04-20
    • 2018-07-20
    • 2017-09-18
    • 2017-11-21
    相关资源
    最近更新 更多