1. 引言
近年来,各大医疗平台线上问诊人数持续增加。然而大部分患者在咨询时由于自身医疗专业知识的匮乏以及对自身症状的模糊认识,往往不能选择正确的科室向医生提问 [1] ,因而如何高效智能化地将患者咨询文本进行准确的科室分类将对减轻医生负担、实现智能分诊具有重大意义。
近年来,深度学习算法在计算机视觉、语音识别等领域得到广泛应用,许多学者也开始逐渐将其转移到自然语言处理领域中,并同样取得了较好的结果 [2] 。深度学习中常见的神经网络模型包括卷积神经网络(Convolutional Neural Network, CNN)、循环神经网络(Recurrent Neural Network, RNN)等。CNN不能很好处理文本时序性问题,而RNN刚好考虑到与时间序列有关的问题,擅长于捕捉文本序列中的长期依赖关系 [3] 。因而Zhou等人 [4] 为整合二者优势,提出了卷积循环神经网络模型(Convolutional Recurrent Neural Network, CRNN)并用于文本分类,结果证明TextCRNN模型在分类准确率及其他评价指标上高于已有的CNN模型和RNN模型。
本文提出了将TextCRNN模型与OvR策略结合的文本分类方法,并爬取39问答网上的患者咨询文本作为实验数据与其他常见深度学习模型进行对比,结果表明本文所提方法取得了更为精准的分类结果,对促进智能分诊、实现精准导医具有理论指导意义。
2. 相关研究
随着深度学习技术的发展,文本分类的研究趋势逐渐由基于传统机器学习模型的算法转向基于深度学习模型的算法上,一般主要有基于TextCNN模型和基于TextRNN模型的文本分类方法。
在基于TextCNN模型的文本分类任务上,Kim [5] 提出了一个单层卷积层结构的CNN模型,通过采用多个卷积核提取文本特征,最后通过池化拼接得到特征向量,在一系列分类任务上取得较好效果。Kalchbrenner等人 [6] 提出了一个双层卷积层结构的DCNN模型,通过动态池化策略和多层卷积使得文本句子中相隔较远的词也有语义联系,从而在许多情感分类、问题分类等任务上取得满意结果。
在基于TextRNN模型的文本分类任务上,许多学者使用长短期记忆网络(Long Short-Term Memory, LSTM)和门控循环单元(Gated Recurrent Unit, GRU)居多,两者均是特殊的RNN模型。有学者尝试将CNN模型与RNN模型结合,而Xiao等人 [7] 提出了结合顺序相反的TextCRNN模型,即先通过CNN模型的多层卷积网络层,再将生成的特征输入到RNN模型的双向LSTM层进行处理。
回顾以往的相关研究,可以看出TextCNN与TextRNN模型在文本分类问题上得到了广泛应用与发展,有效避免了复杂的文本特征工程,简化了传统文本分类方法的繁杂文本预处理工作,且具有比传统方法更优越的算法性能。因此本文考虑结合TextCRNN模型及OvR策略运用到患者咨询文本分类任务上,可以同时兼顾两类深度学习模型的优势,从而降低模型预处理成本且可以进一步提升模型分类精确程度。
2. 基于TextCRNN-OvR的文本分类模型
2.1. TextCRNN模型
TextCRNN模型结合了CNN在捕获空间和时间结构信息的局部相关性的优点,以及RNN在捕获任意长度的序列结构信息的长期依赖关系的优点,从而在许多文本分类任务中均获得较高的分类效果 [8] 。TextCRNN模型主要由包括卷积层、池化层、RNN层(BiLSTM层或BiGRU层)、全连接层和Softmax层。
2.1.1. 卷积层
卷积层主要先对初始数据作卷积运算从而降低模型复杂度。假设文本数据中经过预处理的特征词向量为
,表示第i个特征词的d维向量,则长度为n的句子可表示为
(1)
其中,
为拼接操作,若干个词向量
拼接而成的句子可表示为
。假设卷积核为
,其中h为卷积核的宽度,表示每次捕捉h个词进行计算。当输入含h个词的句子
时,经过卷积运算后产生一个新的特征,可表示为
(2)
其中,
为卷积操作,b表示偏置量,
为非线性激活函数,常用的激活函数为修正线性单元(Rectified Linear Unit, ReLU),可表示为
(3)
在实际模型训练中,句子
不同个数相邻词组成的短句之间特征不同,将宽度为h的卷积核去捕捉该句子所有可能组成的短句,从而可获得特征向量为
(4)
2.1.2. 池化层
在实际模型训练中,通常采用若干不同卷积核进行卷积操作,随后进行池化运算,从而可得到每个特征向量中的最重要特征值。
假设采取了J个卷积核进行卷积运算,对结果进行最大池化即
,再将池化后的结果进行拼接运算,即可得到
(5)
2.1.3. RNN层
RNN层通常由LSTM层或者GRU层组成。LSTM模型是一个记忆存储单元,主要包括三组门单元:输入门、遗忘门和输出门。通过自身门控状态控制传输状态,有选择性的记忆重要信息,从而很好的解决文本分类任务中常见的长期依赖问题 [9] 。GRU是LSTM的变种模型,通过组合遗忘门和输入门到一个单独的门,使得模型比LSTM更简单,参数更少从而使得模型训练难度减少了很多 [10] 。
然而单向的LSTM和GRU模型不能很好地利用文本数据中上下文信息,从而有学者提出相应的BiLSTM模型 [11] 与BiGRU模型 [12] 。BiLSTM模型能够提取文本的上下文关联关系和指代关系,从而提高模型训练效果。模型中各个门单元和状态之间的公式为
(6)
(7)
(8)
(9)
(10)
(11)
其中,
为输入门函数,
为遗忘门函数,
为输出门函数,
,
,
,
分别表示三个门函数及状态更新的权重,
,
,
,
则分别为其对应的偏置量。
表示t时刻LSTM层隐藏状态的更新信息,
为前面池化层输出的特征向量。
表示t时刻输入的候选信息,
表示t时刻记忆单元状态。池化层输出结果经过双向BiLSTM层后得到具有前、后向特征的文本特征向量,随后通过全连接层进行再次拼接得到新的特征向量。其中通过的全连接层进行的运算实际上为作卷积核大小为上层特征大小的卷积运算。为提升模型泛化效果,我们在全连接层之后再加入Dropout层,该层以一定概率值随机减少中间特征的数量 [13] ,从而防止模型过拟合。
2.1.4. Softmax层
在经过Dropout层后,将得到的特征向量输入最后的Softmax层进行类别预测。假设输入特征向量为
,文本样例数为m,文本类别数为n,Softmax层将输出各类别的预测概率值
(12)
其中
表示按元素的乘法运算,r是掩盖向量。Softmax函数使得该层所有输出概率值和为1。
在文本分类模型训练时,通常使用类别交叉熵(Categorical Cross Entropy)作为损失函数,为了防止结果过拟合,我们通常加入正则项,因而该函数定义为
(13)
其中,
表示样例的真实类别,
表示样例的预测类别,
为正则项的系数,
为模型的参数集合。
2.2. 基于OvR策略的分类模型
本文选取多分类任务中常使用的OvR策略,该策略主要思路为在训练时每次将某个类别的样例作为正例,所有其他类别的作为反例,在测试时如果仅有一个分类器判断为正例,则对应分类器类别标记为最终结果,如果多个分类器预测为正例,则考虑各个分类器的预测概率值,选择概率值较大的类别标记为最终结果。
2.3. 基于TextCRNN-OvR的文本分类模型
本文构建了基于OvR策略的TextCRNN文本分类模型,主要分为文本预处理阶段、TextCRNN分类器构建阶段与分类器预测结果确定阶段,模型框架如图1所示。
首先,将文本数据进行简单的预处理,通过删去重复值、去标点等无关符号、分词、去停用词得到预处理文本,再通过随机初始化得到文本的词向量矩阵。即可作为后面TextCRNN模型的输入;其次,在单个TextCRNN模型分类器训练阶段,先令文本词向量矩阵通过CNN层,再通过RNN层。由于双向LSTM模型在文本分类任务上效果普遍优于双向GRU模型 [14] ,因此本文采取了双向LSTM模型作为RNN层。重复多个模型训练过程即可得到多个不同类别的二分类器;最后,在分类器预测阶段,将测试数据集依次导入基于OvR策略的各个分类器中,根据每个分类器的类别预测概率值进行最终类别判定。
![](//html.hanspub.org/file/79-1700642x52_hanspub.png?20230428104911596)
Figure 1. Text classification model framework based on TextCRNN-OvR
图1. 基于TextCRNN-OvR的文本分类模型框架
本文所提模模型实现过程可根据上述框架也分为相应的三个阶段。模型输入为带类别标签的文本,输出为用于文本分类可视化的混淆矩阵,为后续模型评价作参考。模型核心算法伪代码如下:
3. 实例研究
3.1. 实验数据
本文的实验数据来源于“39问医生”网站(http://ask.39.net/),“39问医生”平台有超过14万名医生注册,收录了超过28,017万条患者咨询信息。图2为血液科的患者历史提问界面。
![](//html.hanspub.org/file/79-1700642x67_hanspub.png?20230428104911596)
Figure 2. Patient history questioning interface on the “39 Ask Doctors” website
图2. “39问医生”网站患者历史提问界面
我们基于Python语言编写爬虫代码爬取该网站上6个常见科室(内科、外科、儿科、男科、妇产科、传染病科)的患者咨询问题数据。“39问医生”网站上每页共32个患者提问,6个科室共爬取8400页,共计268,800条提问。首先我们对数据进行简单的筛选,通过删除文本字数在5以下以及重复提问等的患者提问,最终剩余248,991条提问用于后续研究。各科室的提问示例与数量如表1所示。
其中,我们通过对患者提问字数进行统计分析,如图3所示。在248,991条提问中,大部分提问字数基本在20左右。本文将各个科室的数据集随机打乱,选取各科室80%提问文本作为训练集,20%作为测试集。为减少实验结果的随机性,本文重复数据集选取过程20次,每次选取过程确保随机性,最终取实验结果的平均值来评价所提新模型的分类效果以及与其他已有模型的对比。
![](//html.hanspub.org/file/79-1700642x68_hanspub.png?20230428104911596)
Figure 3. Statistical chart of the frequency of patient questions
图3. 患者提问字数频率统计图
3.2. 评价指标
对于分类问题,可以根据测试集样本上的真实类别与分类器预测的类别的组合分为真正例(True Positive, TP)、真反例(True Negative, TN)、假正例(False Positive, FP)和假反例(False Negative, FN)。我们用Num_TP、Num_TN、Num_FP和Num_FN分别表示以上4种组合的样例数,从而可以定义分类问题中评价分类效果常用的评价指标:精度(Precision)、召回率(Recall)和
值(
)。三者的计算公式如下:
(14)
(15)
(16)
从上述三个公式不难看出,精度表示真实类别为正例的样例占所有被预测为正例样例的比率,召回率表示真实正例占所有真实类别为正例样例中预测准确的比率,二者相互联系又相互约束。
值则是综合考虑了精度和召回率的评价指标。除了上面三个常用的评价指标外,还有一个最直观的指标准确率(Accuracy),它表示分类中预测正确的样例数占总样例的比率,计算公式如下:
(17)
分析式(14)~式(17),可知4个评价指标的取值范围都在[0,1],我们希望上述四个指标值越大越好,即表示分类效果越好。
3.3. 参数设置
本文基于TensorFlow实现框架构建TextCRNN模型,训练文本最大长度设置为70,模型Embedding层采用的词向量维度取300。模型卷积层批处理尺寸取256,卷积核尺寸设置为2,3,4,5,各个卷积层的卷积核数量设置为300。Dropout层参数(随机失活概率值)设置为0.5。损失函数采用对数损失函数(Categorical Crossentropy),优化算法采用Adam算法,其中,Adam算法的步长
取10−3,矩估计的指数衰减速率
和
分别取0.9和0.999,用于数值稳定的小常数
取10−8 [15] 。模型训练步长为5000,训练轮次为20,最后设置准确率作为保存更好模型的评价标准。
实验运行环境为:CPU型号为i5-10210U,主频2.1 GHz,内存为8 GB,GPU型号为MX250,操作系统为Windows10,Python版本为3.5,运行软件为PyCharm。
3.4. 实验结果
为更好验证模型的有效性,本文选取了其他常见的深度学习方法(FastText、TextCNN、TextRNN (BiLSTM)、TextRNN (BiGRU)、TextRCNN)作对比实验。
![](//html.hanspub.org/file/79-1700642x80_hanspub.png?20230428104911596)
Figure 4. Text classification model evaluation indicator chart
图4. 文本分类模型评价指标图
本文将新提的TextCRNN-OvR模型与其他深度学习模型进行对比,模型在精度、召回率、
值上的实验结果如图4所示。从图中可以看出,所提新模型在三个评价指标上均达到80%以上,相比已有其他模型都有明显提高。各个模型在准确率上的实验结果如表2所示,从表中可以看出TextCRNN-OvR模型的文本分类准确率达到了80.63%,相比其他模型也得到了较大提高。
![](Images/Table_Tmp.jpg)
Table 2. Experimental results of accuracy of text classification model
表2. 文本分类模型准确率实验结果
4. 结束语
本文将深度学习模型应用到患者咨询文本分类问题中,从而可以根据患者的咨询问题为其推荐准确的科室。本文主要研究结果有:1) 构建了一个结合TextCRNN模型与OvR策略的分类模型,该模型不仅具有CNN模型在挖掘文本局部特征上的优势,以及RNN模型在获取文本前后时序关系上的优势,且可以通过OvR策略进一步提高分类效果;2) 本文所提的TextCRNN-OvR模型在患者咨询文本分类任务中相比于其他深度学习模型在精度、召回率、
值和准确率上均得到了明显提高,首先,相较于其他SOTA的文本分类模型,TextCRNN的分类准确率是最高的,这说明TextCRNN在提取文本特征方面是很有效的,同时相比于其他模型,TextCRNN-OvR在分类精度上取得了1%~4%不同程度上的提高,这说明了本文OvR多分类策略的有效性;3) 本文所提患者咨询文本分类模型可为互联网医疗智能分诊、精准导医提供决策支持,对于落实分级诊疗也具有重要的意义。
在本文的研究中,我们对爬取到的文本没有进行深入预处理,只是简单的分词去停,以后的研究工作中可考虑引入基于Word2Vec或Bert的词嵌入模型。另外,由于咨询文本普遍较短,如何从海量短文本中提取特征也是未来值得研究的工作重点。