当前位置: 首页 > article >正文

毕业设计项目——基于transformer的中文医疗领域命名实体识别(论文/代码)

完整的论文代码见文章末尾 以下为核心内容

摘要

近年来,随着深度学习技术的发展,基于Transformer和BERT的模型在自然语言处理领域取得了显著进展。在中文医疗领域,命名实体识别(Named Entity Recognition, NER)是一项重要任务,旨在从文本中识别出特定类别的命名实体,如疾病、药物、治疗方法等。传统方法在处理中文医疗领域NER时面临着语言复杂性和领域专业性等挑战,而基于Transformer和BERT的模型能够更好地捕捉句子中的上下文信息、语义关系和依赖关系,从而提升NER的准确性和泛化能力。通过结合Transformer和BERT的架构,以及预训练模型的迁移学习方法,可以有效地构建适用于中文医疗领域的NER模型,为医疗信息提取和医疗知识图谱构建等任务提供更加准确和高效的支持。

本文方法

Transformer模型设计与实现

使用transformer中的AutoModelForTokenClassification,基于上文的Bert分词模型,其用于进行标记分类(Token Classification)任务的模型训练和推理。

预训练的Transformer模型存在以下两个结构:

嵌入层(Embedding Layer):在Transformer模型中,嵌入层首先接收输入的标记(tokens)。这些标记通过BERT分词器处理后,转换为模型可以理解的数字ID。嵌入层包括词嵌入、位置嵌入和段落嵌入(对于处理多段落文本的模型而言)。这些嵌入结合起来,将每个标记转换为具有丰富语义和上下文信息的固定大小的向量表示。

Transformer编码器层:这些向量表示随后被送入多层的Transformer编码器。每一层编码器包括两个主要部分:多头自注意力机制和前馈神经网络。多头自注意力机制允许模型在处理每个标记时,考虑到其他标记的信息,从而捕捉复杂的依赖关系。前馈网络则进一步处理这些信息。残差连接和层归一化帮助改善训练过程中的稳定性和效率。

在预训练模型的基础上,为了进行标记分类任务,会增加一个特定的分类头。这通常是一个线性层,用于将Transformer模型最后一层的输出(每个标记的表示)映射到标记类别的概率分布上。

输入处理阶段,文本首先经过分词器处理,分解为标记,并转换为数字ID。这些ID通过嵌入层转换为向量,这些向量包含了标记的初步语义表示。

接着,这些向量通过多层Transformer编码器处理,每层都使用自注意力机制来理解标记之间的上下文关系。模型能够学习到每个标记与其他标记之间的相互作用,从而获得丰富的上下文化表示。通过Transformer编码器的处理,得到的每个标记的表示随后被送入分类头,这个线性层将每个标记的表示映射到预定义类别的概率分布上,从而完成标记分类任务。

最终模型输出每个标记的类别预测,这些预测用于识别文本中的实体名。在训练阶段,模型使用带标签的数据进行微调,通过计算预测类别分布和实际标签之间的损失(通常是交叉熵损失),并通过反向传播更新模型参数,以最小化这一损失。在推理(或测试)阶段,模型对新的未标记文本进行标记分类预测,基于学习到的表示和分类头,模型能够为每个输入标记分配最可能的标签。

自注意力机制优化

传统的Transformer模型在计算注意力时,会对所有的输入序列进行全注意力计算,这导致了巨大的计算和存储开销。在医疗NER任务中,可以通过稀疏化注意力来减少计算量。具体来说,只关注与当前词条最相关的其他几个词条,而不是整个序列。本文使用局部窗口注意力机制来优化模型。

局部窗口注意力机制的核心思想是:在自注意力的计算中,不是考虑整个序列的全局信息,而是只关注每个词条周围的有限范围内的其他词条。这种方法基于的假设是,文本中很多重要的信息和依赖通常局限在词条的近邻范围内,特别是在医疗文本中,相关的医学术语和描述往往在相对集中的文本区域内出现。

可以为每个词条定义一个固定大小的窗口(例如,前后各包含5个词条),只计算窗口内词条之间的注意力。这种方法在保持上下文相关性的同时,显著降低了计算量。
在本文的医疗NER任务中,选择前后各3至5个词的窗口大小。修改传统的Transformer模型中的注意力计算方式,在局部窗口注意力机制中,只计算窗口内词条之间的注意力分数。

这可以通过掩码操作实现,即在计算注意力分数时,将窗口外的词条对应的分数设为一个非常小的值(或负无穷),这样在应用softmax函数时,这些词条的影响就被忽略了。使用局部窗口注意力不需要改变Transformer的基本结构,仅需修改注意力层的计算方式。

结果展示

NER任务常用BIO(Begin-Inside-Outside)标注模式来标识实体的边界。在这种标注体系中,每个标签都有其特定的含义:“B”(开始)标签标记实体的开始,“I”(中间)标签标记实体内部的字符,“E”(结束)标签标记实体的结束,而“O”(非实体)标签则用于标记不属于任何实体的字符。此外,标注中的数字0通常用于表示句子的分隔或其他特殊情况。

例如,在一串序列标签[1, 2, 2, 2, 3, 4, 4, 4, 4, 4, 4, 4, 0, 0]中,标签组合[1, 2, 2, 2, 3]代表一个完整的实体,其内部结构表明了实体的起始、中间部分以及结束,这使得模型能够清晰地识别并界定实体的范围。在实际的文本分析中,这可以直接转化为实体“半月板钙化”的检测,其中“半月板”由标签1(B)开始,“钙化”由标签3(E)结束。

当我们将这些序列标签映射回原始文本时,可以得到精确的实体识别结果,例如,{‘start’: 0, ‘end’: 3, ‘word’: ‘瘦脸针’}。这表明模型不仅能识别出“瘦脸针”这一实体,还能定位其在原文中的确切位置。

在这里插入图片描述

模型结果评估

数据集及序列标注方法

i2b2 (Informatics for Integrating Biology and the Bedside): i2b2是医疗领域常用的一个数据集,旨在促进生物医学研究和健康信息的集成。i2b2组织的挑战赛提供了多个与医疗文本处理相关的任务,包括但不限于患者病史的时间线分析、药物和疾病名称的提取等。这些数据集通常由临床笔记、病历摘要等构成。

MIMIC-III (Medical Information Mart for Intensive Care III): MIMIC-III是一个公开可用的大型数据库,包含了来自数千名重症监护病人的详细健康信息。数据内容丰富,包括病人的生理参数、实验室检测结果、医疗报告等。研究人员常用MIMIC-III来开展医疗NER等自然语言处理任务,以自动从文本中识别和分类医疗相关的实体。

BIO是一种简单的序列标注方案,其中"B"代表实体的开始,"I"代表实体的内部,"O"代表非实体。例如,在标注疾病名称时,“B-Disease”表示疾病名称的开始,“I-Disease”表示疾病名称的内部部分。这种方法适用于多种类型的实体识别任务,特别是在医疗领域中,能够有效地识别出疾病、症状、药物等实体的边界。

对比试验

本节的目标是验证所提出的基于Transformer的医疗NER模型在医疗实体识别任务上是否超过现有的标准方法或模型。

通过在数据集上进行对比实验,这些模型在专业实体的识别任务上的表现被详细评估和比较。实验结果揭示了每种模型在实体识别精度上的表现,展现了从BiLSTM-CRF到BERT及其变种模型,到本文的基于Transformer和bert分词模型的的逐步优化和性能提升的过程。

在这里插入图片描述

实验模型(基于Transformer):这是表格中性能最优的模型,实现了82.00%的准确率和83.50%的召回率,以及82.74%的F1分数。这个结果不仅证明了Transformer架构在处理复杂语言模型中的强大能力,也展示了在模型设计和训练过程中可能采取的优化措施的有效性,使得模型在专业实体识别任务上达到了更高的准确性和鲁棒性。

总体来看,从BiLSTM-CRF到基于Transformer的实验模型,可以观察到随着模型结构的复杂化和优化,NER任务的性能表现逐步提升。Transformer架构在命名实体识别(NER)上之所以展现出优越性,主要归功于以下几个关键特性:

Transformer模型的核心是自注意力机制,它允许模型在处理序列的每个元素时,同时考虑序列中的所有其他元素。这使得模型能够捕捉长距离依赖性,从而更好地理解上下文,这在NER任务中尤为重要。

与循环神经网络(RNN)不同,Transformer不需要按顺序处理序列数据,从而允许并行计算,大幅提高了训练效率。其通常由多个编码器和解码器层堆叠而成,每一层都能够学习序列的不同表示,从更抽象的层面捕捉语言的语义和结构信息。

获取方式

在这里插入图片描述
具有完备代码和论文以及其他材料。

点这里


http://www.kler.cn/news/336099.html

相关文章:

  • class 029 重要排序算法的总结
  • 数据分布过于集中 怎么办,python 人工智能 ,数据分析,机器学习pytorch tensorflow ,
  • 【C++】二叉搜索树+变身 = 红黑树
  • Python的几个高级特性
  • 谷粒商城のRabbitMQ基础篇
  • 制作离线版Koczkatamas工具包
  • 洛谷 P11045 [蓝桥杯 2024 省 Java B] 最优分组
  • Linux 系统 nvm 管理node无法使用
  • python爬虫 - 初识requests模块
  • 民锋金融:稳健发展的战略与未来展望
  • 代码随想录Day 62|Floyd 算法精讲、A \* 算法精讲 (A star算法),题目:97. 小明逛公园、127. 骑士的攻击
  • 关于BSV区块链覆盖网络的常见问题解答(下篇)
  • CRM如何和ERP融合,才能打破信息孤岛效应。
  • vite学习教程05、vite+vue2构建本地 SVG 图标
  • 基于SSM的出租车租赁管理系统的设计与实现
  • OpenGL ES 着色器(5)
  • 一款完全开源并免费的监测与分析系统,支持监测,预警,分析,报告,支持本地化部署(附源码)
  • Golang | Leetcode Golang题解之第458题可怜的小猪
  • P1387 最大正方形
  • Leetcode——数组:二分搜索法704.二分查找相似题目