AI小助手

  • 80

    获得赞
  • 52

    发布的文章
  • 5

    答辩的项目

FlyAI直播回放:医疗文本分类赛题讲解

自然语言处理 文本分类

最后更新 2020-04-07 20:01 阅读 864

最后更新 2020-04-07 20:01

阅读 864

自然语言处理 文本分类

直播内容大纲

  1. FlyAI2.0介绍
  2. 数据分析
  3. 模型选择
  4. 策略选择

一、FlyAI2.0介绍 

目前我们FlyAI平台进行了升级,当然之前的FlyAI1.0框架还是可以用的,不过还是推荐大家使用FlyAI2.0,在FlyAI2.0框架下数据处理和模型实现的要求很低,大家可以很方便自由的实现自己的想法和model代码,只需要保证最终的预测输出格式跟样例一致即可。    

二、数据分析 

医疗文本的分类能够及时快速的对患者的病症和问题进行判断分类,然后分配相应的科室和专家来进行答疑。这样会极大的减少资源的浪费、更快更及时的病症判断。   

本次竞赛需要根据患者的病症和问题来预测属于240个类别中的哪一类,如:普通内科、肝病科、健身、急诊科、手足外科等等。

竞赛目的:     

竞赛的目的主要是为了及时快速的对患者的病症和问题进行判断分类,然后分配相应的科室和专家来进行答疑。这样会极大的减少资源的浪费、更快更及时的病症判断。 

竞赛数据:    

在这里我们需要先对数据进行分析,后面的模型选择做准备。    

首先打开数据集【train.csv 】查看数据并对数据进行分析。

数据描述:    

train.csv主要包括label: 科室、title: 问题,text:症状描述    

普通内科|通风病的治疗和饮食注意什么,|了可能会是生吃海鲜曾经的治疗情况和效果:没到医院治疗吃了许多药没疗效在乎怎样的帮助:又没特效药饮食应留意哪些该吃哪些不想吃   

神经科,|大面积脑梗塞脑疝会是植物人吗,|"脑梗塞,脑部ct体现左脑几乎阻塞完,已经做了开颅手术减低脑压,手术前发觉较晚已经晕迷,手术后一周未有意识,接下来治疗能不能挽救生命,不是植物人的概率可有“    

心血管科,|川崎病能康复吗,|"我家宝宝2岁时得了川崎病,现在4岁了一直在吃阿司匹林,血小板还是高,您好什么时候可以停药,能治愈吗?"

label.dict:为分类标签(科室)的字典总共240类    

words_fr.dict:为问题和症状描述的词频字典    

通过上述对数据的分析,结合我们这次竞赛的目的,那么我们能够想到什么?    

首先,把其他因素全部刨除,我们能清楚的看到这就是一个文本分类的问题;接下来,既然是文本分类的问题,我们能够想到什么?    

相信很多有深度学习或自然语言处理相关经验或基础的同学,第一反应可能就是序列化模型,如:RNN、LSTM、BiLSTM、GRU等;或者是近期比较火热的Bert、ALBert等;这么想当然没有错,这些都是比较经典的可用于文本分类的算法或模型。


三、模型选择

这里介绍几种常见的文本分类算法: 

1. 普通RNN    

图片1.png

x 为当前状态下数据的输入,

h 表示接收到的上一个节点的输入。

y 为当前节点状态下的输出,而 h'为传递到下一个节点的输出。 

通过上图的公式可以看到,输出 h' 与 x 和 h 的值都相关。

而 y 则常常使用 h' 投入到一个线性层(主要是进行维度映射)然后使用softmax进行分类得到需要的数据。 

对这里的y如何通过 h' 计算得到往往看具体模型的使用方式。 

如果将RNN网络展开后多个时刻隐层互相连接,而所有循环神经网络都有一个重复的网络模块,RNN的重复网络模块很简单,如下只有一个tanh层。

图片2.png

2. LSTM

图片3.png


LSTM多了一个表示cell记忆的值。也就是我们不仅要更新当前cell的输出,我们还要思考,哪些东西可以记在我们的cell里呢,记忆的话,记多少又如何确定呢?既然有了记忆,那么我们的输入不仅仅有上一时刻的输出,此刻的输入,还有cell本身存储的那部分信息。所以LSTM的构造看起来很复杂,但其实都是围绕着记忆做操作的。    

每个LSTM单元包含了三个输入:即上时刻的单元状态、上时刻LSTM的输出和当前时刻输入。

LSTM实现了三个门计算,即遗忘门、输入门和输出门。每个门负责是事情不一样,遗忘门负责决定保留多少上一时刻的单元状态到当前时刻的单元状态;输入门负责决定保留多少当前时刻的输入到当前时刻的单元状态;输出门负责决定当前时刻的单元状态有多少输出。

图片4.png

大家有时间或者感兴趣的话可以对这些算法或模型进行尝试。

既然我们了解了文本分类的常用算法,那么我们究竟要选择什么样的算法来做目前项目呢?

  • 首先,对于文本分类,我们要处理的肯定是文本,那么对于文本我们能想到什么呢?上下文、分词、语义等等;这些都是我们需要考虑的。
  • 接下来,就是model的构建,我们想得到什么样的结果都可以通过model网络来体现出来;比如一般文本相关的项目都需要一个词嵌入层也就是embedding层,在词嵌入层我们可以通过多种方式进行处理;
    • embedding网络初始化嵌入;可以指定嵌入矩阵的初始化方法,或者指定初始化权重的初始化器;
    • 使用预训练的词向量:例如可以使用sougou词向量、glove词向量、词向量工具word2vec、bert等

词嵌入层完成后,我们就得到了文本的向量表示形式。

  • 在获得文本的向量化表示后,我们就要正式开始我们model网络的搭建,其最终目的就是高准确率,第一名在等着你们。
  • 在搭建model网络的时候,我们可以用双向的RNN(LSTM、GRU都是RNN变体)来提取文本的特征,最终通过一个dense层并通过softmax激活函数来实现文本分类model的构建。

当然直接使用bert自带的文本分类方法也是可以的。

我们FlyAI平台上已经提供了一个样例(https://www.flyai.com/o/medical_classification),大家可以下载样例然后本地运行看下效果。   

四、策略选择

模型优化tricks:

  1. 调参很重要
  2. 在训练过程中,可以尝试各种优化器去优化模型,有些优化器可以在一定程度上可以提高model的准确率,可以理解为跳出当前的局部最优达到一个更好的局部最优。尽管我们都在追求全局最优解,但是这只是一种理想的状态,我们的实际目标其实是尽量的去接近全局最优解。
  3. 灵活运用BatchNormalization, BN有诸多非常强大的作用和效果:无论使用哪种激活功能或优化器,BN都可加快训练过程并提高性能;解决梯度消失的问题;规范权重;优化网络梯度流等等。
  4. 适当使用dropout层,我们在训练model的时候常常会遇到过拟合的现象, dropout层的运用可以有效的减少过拟合现象。
  5. 可以考虑添加更多的特征数据,或者使用模型融合的方法等,各种方式都可以去进行尝试。
  6. 最后就是模型更换,刚开始最好不要尝试差别较大的模型,确定一个基础模型,然后在其基础上进行更改。
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可,转载请附上原文出处链接和本声明。
本文链接地址:https://www.flyai.com/article/306
讨论
500字
表情
每日优质讨论奖励 20FAI
发送
每日优质讨论奖励 20FAI
删除确认
是否删除该条评论?
取消 删除