Kaggle毒性评论分类挑战前1%解决方案

sotoxic的Python项目详细描述


深毒性

这是toxic comment classification challenge的第27个解决方案的一部分。 为了便于理解,我只上传了我在最后阶段使用的东西, 并且没有附加任何实验性或不推荐使用的代码。

数据集和外部预训练嵌入

您可以获取数据集 here。 我使用了三种单词嵌入:

概述

预处理

我们在3个不同预处理的数据集上训练模型:

  • 带拼写更正的原始数据集:通过比较 levenshtein距离和很多正则表达式。
  • 带有pos标记的原始数据集:我们生成词性 (pos)用textblob标记每个注释并连接单词 嵌入和pos嵌入为一个整体。因为textblob掉了一些 生成pos序列时的标记和标点符号 我们的模特另一个视角。
  • RIAD的数据集:有大量的数据清理、拼写更正 以及翻译

型号

就我们而言,越简单越好。我试过一些复杂的 结构(RHN、DPCNN、HAN)。他们大多数人都表现得很好 但在排行榜上的AUC较低。我不断尝试的模型 在最后阶段有以下两项:

合并RNN(公共:0.9862,私有:0.9858) pooledRNN

Kmax文本CNN(公共:0.9856,私人:0.9849) kmaxCNN

正如许多竞争对手指出的,退出和批量规范化是 防止过度安装的键。在单词上加上辍学 直接嵌入和隐藏在池后面都能很好地正则化 列车组和试验组。虽然有很多辍学的模特 再覆盖5个时代,它显著提高了我们的分数。为了 例如,我的RNN从0.9853(私有:0.9850)提升到0.9862 (私有:0.9858)添加了退出层之后。

最大化这些数据集的实用性,除了对 原始标签,我们还添加了一个元标签“bad_comment”。如果评论是 贴上标签,那么就被认为是一个不好的评论。假设 这两个标签集之间略有不同,但是 同样的lb乐谱,给我们留下了合奏的空间。

为了增加多样性和处理一些有毒的错别字,我们 对模型进行了字符级和单词级的训练。结果 char级别的性能稍差(对于charrnn:0.983 on lb,0.982 on pb, charcnn:0.9808磅,0.9801磅)但它确实有一个相当低的值 与词级模型的相关性。只需将我的char级别和 字级结果,它足够好推动我超过0.9869在 专用测试集。顺便说一下,超参数会影响 在基于字符的模型中性能非常好。大批量(256), 很长的序列长度(1000)通常会得到相当大的 结果尽管k-fold验证需要很长时间。(我的 基于字符的模型通常在60~70个时期后收敛,大约5个时期 是我基于文字的模型的倍。)

单个型号的性能

由AUC在私有测试集上评分。

字级

ModelFasttextGloveTwitter
AVRNN0.98580.98550.9843
Meta-AVRNN0.98500.9849No data
Pos-AVRNN0.9850No data0.9841
AVCNN0.98460.98450.9841
Meta-AVCNN0.98440.9844No data
Pos-AVCNN0.9850No dataNo data
KmaxTextCNN0.98490.98450.9835
TextCNN0.9837No dataNo data
RCNN0.98470.98420.9832
RHN0.9842No dataNo data

字符级别

ModelAUC
AVRNN0.9821
KmaxCNN0.9801
AVCNN0.9797

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JAVAutil。整数java的扫描器键盘输入   java通知运行后立即崩溃   java如何在一个只能由类修改而不能由其实例修改的类中生成静态变量?   数据库Java字段猜测   返回值周围的java括号为什么?   java Android更新通讯录中的联系人   一个消费者正在读取数据   java是否可以通过编程方式为蓝牙配对设置pin?   java Spring引导和buildResponseEntity()   java为什么序列化可以在没有实现可序列化的情况下工作   Java同步无助于相互排斥   twitter Java Twitter4J未在推文下显示源标签   为什么Javasocket不支持中断处理?