UMA 中文站

在线医疗文本中的实体识别研究
栏目分类
UMA 中文站
VRA中文网
你的位置:UMA 中文站 > VRA中文网 > 在线医疗文本中的实体识别研究
在线医疗文本中的实体识别研究
发布日期:2025-01-04 15:14    点击次数:164
随着生活水平的提高, 人们对于健康问题日益关注。互联网行业的迅猛发展催生一大批在线医疗社区和医疗信息网站, 为患者提供了多元化的医疗信息获取渠道[1]。这些网站主要以健康知识、疾病信息、医疗新闻等为主要内容, 同时也提供用户在线疾病问答功能。国内比较知名的有新浪健康、寻医问药、好大夫在线、39问医生等。据调查, 单是寻医问药网就包含2004年11月24日至今十余年的疾病问答数据, 每天还会涌现数万条新提问。日积月累, 这些疾病问答信息将汇成一股非常可观的大数据。这样的数据有着广泛的参与人群, 其中包含大量真实的个人案例, 潜藏着丰富的医疗价值。然而, 它们在文本中大多处于一种非结构化的状态。为了实现信息的充分利用, 抽取和挖掘出其中有用的医疗知识, 进行命名实体识别通常是第一步。 目前, 在医疗领域, 针对电子病历、各种医疗报告、医学文献等的实体识别工作已有不少, 但针对医疗问答网站中的疾病问答信息尚未见相关研究。本文针对这样的问答信息, 首次进行实体识别和挖掘工作。本文抽取的实体类别包括疾病、症状、药品、治疗方法和检查5类。在特征选取方面, 除使用一般的实体识别文本特征(例如符号特征、词性特征、英文数字特征等)外, 还添加了医疗领域特有的一些特征(包括词的后缀特征、身体部位指示词特征)来辅助完成识别和抽取工作, 最终在自建数据集上达到81.26%的准确率和60.18%的召回率。 1 相关工作 命名实体识别是自然语言处理领域一个重要的研究方向, 1995年举行的第六届消息理解会议(MUC-6)[2]正式提出命名实体识别任务。它作为文本挖掘中的第一步, 主要任务是识别文本中代表其知识主体的词语。MUC将命名实体定义为两类:专有名词和数量词。在不断的研究中, 命名实体的含义和范围也在持续地丰富和扩展。MUC之后, 出现自动内容抽取会议(Automatic Content Extraction, ACE)[3], 它由美国国家标准技术研究院(NIST)组织创办, 从1999年至今已经举办多次关于信息内容自动抽取的评测任务, ACE数据集已经成为测试新的信息抽取算法的公认标准。 在生物医学领域, 识别对象集中在以下几类:电子医疗记录、医学文献和在线医疗社区。目前比较集中的研究是针对医学文献中的基因、蛋白质、药物名、组织名等进行的生物命名实体识别工作[4]。随着医疗系统的信息化, 出现大量针对电子病历进行的识别工作, 目前识别F值一般在0.82左右[5]。 命名实体的识别方法包括3种:基于词典的方法、基于启发式规则的方法和基于机器学习的方法。基于词典的方法通过字符串匹配实现实体识别, 但对词典有很强的依赖性。在国外, 英文医疗实体识别日趋成熟, 可供参考的资料也比较详实, 最著名的词典包括国际疾病分类ICD-10 (Interna-tional Classification of Diseases-10)[6]、医学一体化语言UMLS (Unified Medical Language System)[7]和医学主题词表MeSH (Medical Subject Headings)[8]。在中文方面, 国内研究还较少, 可使用的资源也相对匮乏。在基于启发式规则的方法方面, Kraus等[9]针对大学医疗系统的临床记录, 通过构建正则表达式, 对其中提及的药品、剂量、服用方法等信息进行识别。目前比较流行的是基于机器学习的方法。 命名实体识别可以看成一个分类问题, 采用类似支持向量机、贝叶斯模型等分类方法, 同时, 也可以看成一个序列标注问题, 采用隐马尔可夫、最大熵马尔可夫、条件随机场等机器学习方法[10]。Sondhi等[11]针对医疗论坛HealthBoards上的疾病话题信息, 利用SVM和CRF方法进行浅层的信息抽取。在中文方面, 叶枫等[12]自建词典, 采用条件随机场对电子病历中的疾病、临床症状、手术操作3类比较常见的命名实体进行识别, 达到90%以上的F值。王世昆等[13]对明清古医案中的症状和病机进行识别, 采用CRF和SVM分别进行训练和测试, 是在中文方面的较为大胆的尝试。 2 模型和特征选取 在前面提到的众多方法中, 条件随机场是一种较优秀的识别方法, 它不仅去除了HMM中的独立性假设, 而且通过全局的归一化解决了标记偏置的问题, 在命名实体识别、词性标注等问题上都取得不错的效果。如果采用CRF建立疾病问答中的实体识别模型, 将更易于融合新的特征, 使用有重叠性非独立的特征。利用其强大的推理能力, 有可能识别出训练语料中未出现的情况。因此, 本文选择CRF模型进行医疗文本中命名实体的识别。 2.1 条件随机场模型 条件随机场(Conditional Random Fields, CRF)是一种无向图模型, 1958年由Luhn[14]提出。它提供了一种概率框架, 计算在给定一个观察数据序列X=(x1, x2, …, xn)的条件下, 该序列所对应标签序列Y=(y1, y2, …, yn)整体出现的概率[15], 即 $ P(Y{\text{|}}X;\theta ) = \frac{1}{{Z(X;\theta )}}\exp \left\{ {\mathop \sum \limits_k {\theta _k}{\psi _k}(Y, X)} \right\} $ (1) $Z(X;\theta ) = \mathop \sum \limits_{Y'} \exp \left\{ {\mathop \sum \limits_k {\theta _k}{\psi _k}(Y', \;X)} \right\}$ (2) 其中θ=(θ1, θ2, …, θk)代表模型参数, ψk(Y, X)是任意定义的以θk为参数关于观察序列X和标签序列Y的特征函数, Z(X; θ)是归一化因子。 用CRF模型进行命名实体识别, 可以视为一个序列标注问题。将要识别的每个句子作为一个观察序列, 句子中的每个词作为一个符号, 为每一个符号赋予一个类别标签。CRF模型最简单的一个结构就是链式结构[16], 如图 1所示。 进行模型训练时, 给定一个训练数据集D={(X1, Y1), (X2, Y2), …, (XN, YN)}, 其对应的经验分布为$\tilde p(X, Y)$, 一般可以通过最大化对数似然值, 得出模型参数估计: $ \begin{gathered} L(\theta ) = \sum\nolimits_{i = 1}^N {\log P} ({Y_i}{\text{|}}{X_i};{\mathtt{θ}}) \hfill \\ \;\;\;\;\;\; \propto \sum\nolimits_{X, \;Y\tilde P} {(X, Y)} {\text{log}}P(Y{\text{|}}X;\theta ), \hfill \\ \end{gathered} $ (3) $ \hat \theta = \arg \mathop {\max }\limits_\theta L({\mathtt{θ}}) $ (4) 为了避免过拟合, 可以运用一些调整的方法, 通常在参数上加上高斯先验, 目标函数L(θ)就变为 $ L(\theta ) = \sum\nolimits_{i = 1}^N {\log P} ({Y_i}|{X_i};\theta )-\sum\nolimits_k {\frac{{\theta {k^2}}}{{2\sigma {k^2}}}} $ (5) 其中σk是高斯先验的方差。得到参数之后, 可以进一步推断给定目标序列X最可能的标签序列: ${Y^*} = \arg \mathop {\max }\limits_Y P(Y|X;\;\hat \theta )$ (6) 目前已有一些成熟的算法可以用来推断这一值, 比如Viterbi算法[17]。 2.2 特征选取 对于CRF模型, 特征的选取很关键。通过对疾病问答文本的分析, 本文选择以下特征进行识别。 1) 符号特征。中文之间没有类似英文空格的天然分隔符, 因此在进行实体识别时, 需要首先进行分词操作, 将分词之后的每一个词语作为符号特征。为提高分词准确率, 引入自定义词典。通过从多个输入法(包括搜狗、百度、QQ)和医疗网站(寻医问药、好大夫在线等)中分别获取, 去重合并之后综合成疾病、症状、药物、检查、治疗方法和身体部位词语6类辅助词典。 2) 词性特征。在病人描述中经常会出现“患”、“服用”、“吃”等动词, 这些词后会出现疾病名或者药品名, 这就为实体的边界的识别提供了线索。在本文中, 该特征即为采用Ansj分词后的词性。本文采用开源代码库Github上的Ansj[18]系统的分词词性作为这一维特征。 3) 形态特征。形态特征指当前词的构成情况, 包括两个特征:英文字母特征和数字特征。英文字母特征用于标记词当中是否包含有英文字母, 因为对于检查来说, 经常会出现“ct”、“MRI”之类的英文, 而在疾病名、药物等类别中却不常出现。同样, 数字特征用于标记该词是否由数字构成。 4) 后缀特征。在英文命名实体识别中, 经常采用词的后缀特征进行识别, 并且被证明是有效的。本文研究工作虽然是针对中文开展的命名实体识别, 但经观察发现, 文本中的各类医疗实体也有一定的规律性, 比如病名通常以“病”、“症”这类词结尾, 而药品则以“颗粒”、“丸”、“剂”等词语结尾, 治疗方法则常以“术”结尾。因此, 本文也加入后缀特征, 即选取词语的最后一个字作为特征。 5) 身体部位指示词特征。该特征用于标记当前词是否为身体部位相关的词语, 因为这样的词语在症状描述中经常出现。 6) 上下文特征。在词语组成的序列中, 上下文之间存在相关性, 该特征即为CRF模型中的边的特征。当选用不同的窗口长度时, 将对各种特征进行组合, 形成新的特征。 3 在线医疗文本中的实体识别 针对在线医疗文本信息, 我们主要考虑表 1中显示的5类命名实体。实体识别流程如图 2所示, 主要包括预处理、特征计算、CRF模型训练、实体识别和识别结果抽取。首先对获取的在线医疗文本进行预处理, 包括特殊符号的过滤、人工标注、分词、大小写转化等操作; 然后, 利用程序从处理好的文本中自动计算并抽取特征, 将所有数据划分为训练集和测试集两部分。将训练集放到模型中进行训练, 随后再利用训练得到的参数测试模型识别效果。 3.1 数据预处理 为了对在线医疗文本进行实验, 本文采集好大夫在线的5类疾病的全部问答信息, 涉及疾病包括胃炎、肺癌、哮喘、高血压和糖尿病。每一篇文本包含一个提问及相应回答, 其中已经过滤掉没有回答的提问信息。 针对问答文本, 首先进行一些相关的预处理(如对特殊字符、英文大小写、标点符号等的处理)。随后进行人工数据标注。采取的标注方式为BIO模型[19], 可以将分块转化为序列标记确定问题, 格式为B-X, I-X或者O, 其中B, I, O分别代表Begin, Internal, Other, 即类别的开始、中间或其他, X代表标注的类别。 识别实验采用开源工具CRF++: Yet Another CRF toolkit[20], 其输入有一定的格式要求。标注时首先进行人工标注, 为力求准确, 对不熟悉的语汇都进行查阅和了解。随后将标注数据转换成所需格式, 如表 2所示。本文采用Ansj分词系统, 对于自定义词典中的词都有自定义的类别标签。表中“辅舒酮”为自定义药品词典中的词, 因此词性有别于其他词语。最终对每类疾病分别标注了200篇问答信息, 共1000篇作为训练和测试数据, 共包含4812个不同的实体名词。 CRF++采用用户模板进行特征计算。在选择窗口大小时, 首先在500条问答数据上, 采用同样的模板, 设置不同窗口大小进行测试。窗口大小为3时的效果优于窗口大小为1和2, 此后再增加窗口大小, 效果提升不大, 因此本文最终将窗口大小设定为3。针对每一列输入特征t(0~5)设置模板, 包括两类形式: $ {\text{T1 = num: % x}}\left[{{\text{index, }}t} \right], $ (7) $ {\text{T2 = num: % x}}\left[{{\text{index, }}t} \right]{\text{/% x}}\left[{{\text{index + 1, }}t} \right]{\text{, }} $ (8) 其中, num为模板的编号, index为窗口大小范围内的索引(0~2), T2由特征t前后位置情况组合而成。 3.2 实验 本文进行两组实验:第1组字典实验验证自定义词典的有效性:第2组为不同特征实验, 通过逐一添加特征的方式, 观察实验效果的变化。实验结果的评测标准由精确度P(precision)、召回率R(recall)、准确率A(accuracy)和F1值(F1-measure)构成, 这也是数据挖掘中经常用到的评测指标[21]。对结果的评估采用conlleval.pl评测程序[22]。最后针对实验的词性特征和后缀特征进行分析。 3.2.1 字典实验 前面提到, 为提高分词准确率, 自建6类医疗词汇词典。然而, 由于是从多个输入法或者医疗网站获取的词汇, 所构筑的6类词典之间难免会有重叠, 同时其中也充斥着一些不相关的词汇, 由于数量巨大, 如疾病和药品均有上万个词汇(未能一一过滤), 因此存在噪声。为验证其对实验的影响及添加词典的识别效果, 首先进行字典实验。 实验在一个较小的数据集上开展, 选取5类疾病各100条问答数据, 采用符号特征和词性特征进行实验。包括3组不同的设置, 第1组分词时不使用自定义词典, 第2组和第3组添加同样的自定义词典, 但第2组只将自定义词典中的词都标注为同一个词性类别“userDifine”, 第3组则根据词语的词典来源标注不同的词性。自定义词典的词数统计信息如表 3所示。用B (basic)表示第1组, B+D为第2组, D代表Dictionary, B+Ds为第3组, Ds代表多个词典, 不同设置的标注示例如表 4所示。 从实验结果表 5可以看出, 添加了自定义词典的识别效果要好于没有添加的情况, 将词典分为多个不同类别的效果又好于只设定为一个词典的情况。这是因为将词典设置为多个比设置为一个粒度更细, 因此提供的信息也更为丰富。这组实验也说明虽然词典存在噪声, 但总体上, 影响不大, 添加多个词典有助于识别效果的提升, 因此, 在下面的实验中, 分词时都采用多个字典的方式。 3.2.2 不同特征实验 为了验证本文提出的各种特征在问答实体识别中的效果, 采用逐一添加特征的方式对1000条标注数据进行实验, 即每次在符号特征的基础上增加一种特征。首先添加一些常用的实验特征(如词性, 英文、数字特征等), 再添加本文提出的后缀和身体部位指示词特征。为了保证实验结果的准确, 均采用5折交叉验证。图 3为实验结果总体的变化情况, “word”、“pos”、“al”、“num”、“suffix”和“body”分别代表符号特征、词性特征、英文字母特征、数字特征、后缀特征和身体部位指示词特征。 表 6~9为实验结果的详细情况。可以看到, 随着各类特征的逐一添加, 识别精确度略有下降, 主要体现在添加词性特征时; 在后面加入后缀和身体部位指示词特征后, 精确度又有所回升。总体说来, 精确度变化不大。另一方面, 实验的召回率在各类实体上都有大幅度提升, 尤其是在药物这一类别最终得到41.63%的提升, 比原来37.83%的召回率提升了一倍多。F1值在各类实体上也都有不同程度的提升, 总体上, 从只用符号特征到所有特征都用, 共提升23.63%。 实验结果表明, 在识别的5类实体中, 药物的识别效果最好, 特别是在召回率和F1两个指标上远远超过其他类别的实体。在精确度上, 药物最优, 其次是检查和治疗方法, 最低为疾病和症状, 在召回率上正好相反。这可能是因为药名一般比较固定, 而且在用户输入信息时格式也比较规整。对于疾病和症状通常有多样化的描述方式, 因此识别精度不如其他类别。 识别结果大致包含以下几种错误类型: 1)识别边界不准确, 例如“胸部CT检查”只识别出了“CT检查”, 遗漏了相关的指示部位, “中央型肺癌”遗漏了修饰语“中央型”等情况; 2)未识别出较长实体, 像“痰中带血丝”、“嗓子老发痒”这样的症状; 3)误分类, 例如“腔积液”(疾病)被误分类为药物。导致错误的原因可能与数据集规模有关, 下一步可以扩充数据集, 丰富特征, 寻找真正能抓住其本质的特征进行实验。 3.3 特征分析 对不同特征进行的实验表明, 词性特征和后缀特征对于识别效果有很大的提升, 所以本文进行以下两组分析。 3.3.1 各类实体词性构成模式分析 这里的词性构成综合考虑了当前实体的前一个词的词性、当前词的词性和后一个词的词性, 如表 10所示。针对被标注为药物的词语“易瑞沙”, 分析其词性构成, 前一个是动词“服用”, 词性为“v”, 后一个为标点符号“。”, 词性为“w”, 当前词词性为药物专有名词“medicine”, 因此这个药名的词性构成为“v+medicine+w”。为了对比不同实体类别在词性构成上的情况, 我们绘制不同实体的排名前30种词性构成模式的频次图(图 4)。可以看出, 药物类的曲线非常陡峭, 说明药物这类实体的词性的构成在实验文本中是有规律性的, 大部分具有固定的模式, 因此词性特征才能如此好地提升药物的识别效果。其他几类, 虽然词性也有一些模式, 但不如药物明显, 实验结果也有一定程度的提升。 药物类词性构成的前10种模式如表 11所示。可以看出, 药物基本上都通过分词被准确标注为药物专有名词, 前后出现最多的词性是标点、动词、连词和数词。这也准确地反映了文本的潜在结构:用户常将多种药物进行罗列, 因此前后出现标点(如顿号、逗号)和连词(如“阿法替尼/和/azd9291/效果/怎么样”); 药物名前, 通常有许多提示性的动词(如“服用/口服/使用/注射/吃/开了”); 药物名后, 会紧接着给出服用剂量(如“维生素c/一天/2/-/3片”)。 3.3.2 各类实体后缀分析 后缀特征对于疾病类提升较大。统计1000条实验数据中疾病名后缀的分布情况, 如图 5所示。在疾病名中, 出现最多的前7个字分别是炎、病、癌、喘、压、冒、症, 以它们结尾的疾病名共占所有出现的疾病的64%, 其他166个字只占36%, 说明了后缀特征对疾病名称识别有效的原因。 图 6给出对其他几类实体后缀的分析情况, 可以看到, 不同实体类别的后缀具有不同程度的规律, 因此后缀特征才能有效地提升实验效果。 4 总结与展望 本文针对在线医疗问答信息, 设计了考虑医疗领域特性的识别特征, 并采用机器学习模型CRF, 在好大夫问答数据上针对5类医疗实体(疾病、症状、药品、治疗方法和检查)进行实体识别工作。全部设计特征包括符号特征、词性特征、形态特征、后缀特征、身体部位指示词特征和上下文特征。首先进行了一组字典实验, 表明自定义词典对识别效果的有效提升, 然后采用逐一添加特征的方式, 观察实验结果的变化情况。结果表明, 随着所提特征的逐一添加, 识别精确度有所浮动, 而召回率普遍呈上升趋势, 总体的F1值也不断上升, 当采用所提全部特征时, 达到总体81.26%的精确度和60.18%的召回率。我们还分析了后缀特征和各类实体的词性构成模式, 说明了该特征的有效性。 实验结果表明, 本文方法可以有效地识别出问答文本中大部分的医疗实体。但是还需继续提高识别准确率, 获得更精准的挖掘结果。未来的工作中, 我们将进一步丰富实体识别的特征, 特别是针对在线的医疗问答文本, 进一步区分问与答两种文本的区别和联系, 设计相应特征并引入实验。我们还会考虑前面有否定意义词汇的实体, 处理实体嵌套的情况。