未半

  • 1

    获得赞
  • 0

    发布的文章
  • 1

    答辩的项目

医疗文本分类 Top5

Batch大小为32,循环次数为2次,损失函数优化完,最终完成评分为82.11。

医疗文本分类
文本分类
最后更新 2020/05/11 14:09 阅读 200

医疗文本分类

最后更新 2020/05/11 14:09

阅读 200

文本分类

一、赛题分析

1、线下的数据占线上的数据1%左右,通过探索性数据分析,线下的数据不存在重复值,字段一共有3个,包括了label、title、text。其中,text字段存在“无”字段,即不存在数据。通过计算各个类别的样例数,发现类别间存在严重的不平衡问题,有的类别极其稀疏,如健身、动脉导管未闭等等,而有的类别则极其的密集,如妇产科、神经科等等。另外,观察数据发现类别中存在如阳痿、早泄、阳痿早泄三种不同的类别,而这种问题属于类别间存在交集的情况,对于模型提出了巨大的挑战。

二、文本分类思路

1、 数据划分 由于不清楚测试数据的数据分布,无法进行对抗验证训练,保证训练集和测试集数据分布保持一致性,另外,此次竞赛的数据量太大,为了节省训练的时间,采用的策略是,将所有的数据按照类别进行划分,然后对每个类别,随机抽取其中的80%数据加入到训练集中,其余的20%数据加入到验证集中,保证验证集和训练集的数据分布的一致性。 

2、数据预处理 由于数据中存在着大量的控制字符,包括了制表符、换行符、连续空格等等,因此,在预处理阶段,进行了同一的处理,将其转化为单个空格。

3、数据增强 由于数据中存在严重的类别失衡的问题,因此,一个简单的方法就是使用数据增强技术,本次竞赛,采用了包括同义词替换、随机插入、随机替换、随机删除等等常用的数据增加技术,为提高模型的泛化性能,增强模型的性能有一定的改善。

4、模型选择 由于Bert模型的诞生,导致NLP领域掀起了一股浪潮,BERT的“里程碑”意义在于:证明了一个非常深的模型可以显著提高NLP任务的准确率,而这个模型可以从无标记数据集中预训练得到。因此,近年来,各种不同的预训练模型层出不穷,根据以往的经验,本次竞赛,优先使用了百度的ERNIE1.0以及Roberta-wwm-ext两种中文预训练模型,对比下来,后者的效果更佳。 

 5、模型输入 由于数据集中包含了text和title两种特征,因此,朴素的想法就是将两者进行合并,然后连着label喂给模型。 

 6、损失函数 由于损失函数的作用就是评估模型的预测值f(x)与真实值Y的不一致程度,因此,对模型而言至观重要,所以,通过对比了包括CrossEntropy、LabelSmoothingCrossEntropy、Dice、MulticlassFocal多种损失类型,总结发现,标签平滑效果更加。

附上labelSmoothingCrossEntropy损失的代码:

class LabelSmoothingCrossEntropy(nn.Module):
    def __init__(self, eps=0.1, reduction='mean', ignore_index=-100):
        super(LabelSmoothingCrossEntropy, self).__init__()
        self.eps = eps
        self.reduction = reduction
        self.ignore_index = ignore_index

    def forward(self, output, target):
        c = output.size()[-1]
        log_preds = F.log_softmax(output, dim=-1)
        if self.reduction == 'sum':
            loss = -log_preds.sum()
        else:
            loss = -log_preds.sum(dim=-1)
            if self.reduction == 'mean':
                loss = loss.mean()

        return loss * self.eps / c + (1 - self.eps) * F.nll_loss(log_preds, target, reduction=self.reduction,                                                                 ignore_index=self.ignore_index)

三、总结与反思

1、由于flyai升级到2.0,自己还不太熟悉这个平台,因此,前期也花费了大量的时间在解决一些依赖冲突,文件处理等等问题上,不过有些坑爬过去了之后,相信前路就会越来越顺利了。共勉。

本文为作者在FlyAI平台发布的原创内容,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请附上原文出处链接和本声明。
本文链接地址:https://www.flyai.com/n/132432
立即参加 医疗文本分类
代码展示

文本分类

选择查看文件
$vue{codeKeys}
  • $vue{ix}
赞赏贡献者还可以查看和下载优质代码内容哦!
赞赏 ¥61.08元
©以上内容仅用于在FlyAI平台交流学习,禁止转载、商用;违者将依法追究法律责任。
讨论
500字
表情
每日参与讨论奖励 20FAI
发送
每日参与讨论奖励 20FAI
删除确认
是否删除该条评论?
取消 删除
感谢您的关注
该篇内容公开后我们将会给你推送公开通知
好的
发布成功!
您的公开申请已发送至后台审核,
通过后将公开展示本详情页!
知道了
向贡献者赞赏
¥61.08
微信支付
支付宝

请先绑定您的微信账号 点击立即绑定

立即支付
温馨提示:
支付成功后不支持申请退款,请理性消费;
支付成功将自动解锁当前页面代码内容,付款前请确认账号信息。
微信扫码支付
请前往Web网页进行支付

敬请谅解,如有疑问请联系FlyAI客服

知道了
举报
请选择举报理由
确定
提示
确定要删除?
取消删除