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)
Kmax文本CNN(公共:0.9856,私人:0.9849)
正如许多竞争对手指出的,退出和批量规范化是 防止过度安装的键。在单词上加上辍学 直接嵌入和隐藏在池后面都能很好地正则化 列车组和试验组。虽然有很多辍学的模特 再覆盖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在私有测试集上评分。
字级
Model | Fasttext | Glove | |
---|---|---|---|
AVRNN | 0.9858 | 0.9855 | 0.9843 |
Meta-AVRNN | 0.9850 | 0.9849 | No data |
Pos-AVRNN | 0.9850 | No data | 0.9841 |
AVCNN | 0.9846 | 0.9845 | 0.9841 |
Meta-AVCNN | 0.9844 | 0.9844 | No data |
Pos-AVCNN | 0.9850 | No data | No data |
KmaxTextCNN | 0.9849 | 0.9845 | 0.9835 |
TextCNN | 0.9837 | No data | No data |
RCNN | 0.9847 | 0.9842 | 0.9832 |
RHN | 0.9842 | No data | No data |
字符级别
Model | AUC |
---|---|
AVRNN | 0.9821 |
KmaxCNN | 0.9801 |
AVCNN | 0.9797 |