Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Tensorflow CNN(Conv1D)文本分类模型中减少误报的方法_Tensorflow_Machine Learning_Nlp_Keras_Convolution - Fatal编程技术网

Tensorflow CNN(Conv1D)文本分类模型中减少误报的方法

Tensorflow CNN(Conv1D)文本分类模型中减少误报的方法,tensorflow,machine-learning,nlp,keras,convolution,Tensorflow,Machine Learning,Nlp,Keras,Convolution,我在keras+tensorflow-主要使用Conv1D创建了一个基于字符的CNN文本分类模型,主要基于: 该模型在测试数据集上的精度达到80%以上,表现非常好。但是我有假阳性的问题。其中一个原因可能是最后一层是具有softmax激活功能的density层 为了了解模型的性能,我使用31个类1021个样本的数据集对模型进行训练,在25%的测试数据集上,性能约为85% 但是,如果包含假阴性,则性能相当差(我没有运行另一个带有假阴性的测试数据,因为很明显,仅通过手工测试即可)-每个输入都有相应的

我在
keras
+
tensorflow
-主要使用Conv1D创建了一个基于字符的CNN文本分类模型,主要基于:

该模型在测试数据集上的精度达到80%以上,表现非常好。但是我有假阳性的问题。其中一个原因可能是最后一层是具有
softmax
激活功能的
density

为了了解模型的性能,我使用31个类1021个样本的数据集对模型进行训练,在25%的测试数据集上,性能约为85%

但是,如果包含假阴性,则性能相当差(我没有运行另一个带有假阴性的测试数据,因为很明显,仅通过手工测试即可)-每个输入都有相应的预测。例如,一个句子
acasklncasdjsandjas
可能导致班级
ask\u提升

在这种情况下,有没有处理假阳性的最佳实践? 我的想法是:

  • 实现一个
    noise
    类,其中示例只是一组完全随机的文本。但是,这似乎没有帮助,因为噪声不包含任何模式,因此很难训练模型
  • 将softmax替换为不要求所有输出概率都为1的对象,这样,无论其他值如何,较小的值都可以保持较小。我对此做了一些研究,但是没有太多关于改变这个特定案例的激活函数的信息

  • 这听起来像是数据不平衡的问题,两个类具有完全不同的支持(每个类中的实例数量)。在层次分类任务中,这个问题尤其重要,在这个任务中,一些层次较深的类往往比其他类拥有更多的实例

    无论如何,让我们把这个问题简单地说成是二进制分类,将支持度更高的类命名为class-A,将支持度更低的类命名为class-B。一般来说,有两种流行的方法可以避免这个问题

  • 在采样下:按原样修复B类。然后,从类A中抽取与类B相同数量的实例。组合这些实例并用它们训练分类器

  • 过采样:您可以按原样修复A类。然后,从B类中抽取与A类相同数量的实例。选项1也是如此

  • 有关更多信息,请参阅此KDNuggets页面


    希望这有帮助P

    你能发布混淆矩阵或提供更多关于类别数量、类别平衡以及哪些类别存在误报(如果不是全部)的详细信息吗?@Ahmed我根据要求在问题中添加了更多细节。在进行分层数据拆分之前,我已经进行了过度抽样,因此数据已经很好地平衡了。