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

毕业设计项目——基于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不需要按顺序处理序列数据,从而允许并行计算,大幅提高了训练效率。其通常由多个编码器和解码器层堆叠而成,每一层都能够学习序列的不同表示,从更抽象的层面捕捉语言的语义和结构信息。

获取方式

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

点这里

相关文章:

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

完整的论文代码见文章末尾 以下为核心内容 摘要 近年来,随着深度学习技术的发展,基于Transformer和BERT的模型在自然语言处理领域取得了显著进展。在中文医疗领域,命名实体识别(Named Entity Recognition, NER)是一项重要任务,旨…...

电子信息类专业技术学习及比赛路线总结(大一到大三)

本文主要是总结到目前为止电子信息类的专业技能、比赛路线,以后会持续更新,希望能为那些热爱电子技术或渴望学习课本之外知识的小伙伴们提供帮助,参加学科竞赛和找工作必备。(毕竟很多课本上的内容都没什么用 ) 1.单片…...

怎么将bash(sh)的所有输出保存到log/txt中?

tee 命令 这会将所有输出同时显示在屏幕上并追加到日志文件中。 bash your_script.sh 2>&1 | tee -a log_file.txt 其他方法不可用 只使用 >> 不会将除了print之外的所有保存 bash your_script.sh >> log_file.txt >> 和 2>&1一起只会保存在日…...

腾讯云服务器上使用Nginx部署的静态网站打开速度慢的原因分析及优化解决方案

目录 前言1. 网站打开速度慢的原因分析1.1 服务器配置不足1.2 网络延迟1.3 Nginx配置不合理1.4 静态资源未优化 2. 网站速度的测试与分析2.1 使用浏览器开发者工具分析2.2 在线工具测试 3. 网站优化的具体方法3.1 服务器配置优化3.2 CDN加速与DNS优化3.3 优化Nginx配置3.3.1 启…...

如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具

您是否对 iPhone 运营商的网络感到困惑?不用担心,我们将向您介绍 8 大免费 iPhone 解锁服务。这些工具可以帮助您移除 iPhone 上的网络锁,并使您能够永久在网络上使用您的设备。如果您想免费解锁 iPhone,请阅读本文并找到最适合您…...

深度学习:CycleGAN图像风格迁移转换

目录 基础概念 模型工作流程 循环一致性 几个基本概念 假图像(Fake Image) 重建图像(Reconstructed Image) 身份映射图像(Identity Mapping Image) CyclyGAN损失函数 对抗损失 身份鉴别损失 Cyc…...

pytorch和yolo区别

PyTorch与YOLO的区别:一个简明的科普 在深度学习的领域,有许多工具和框架帮助研究人员和开发者快速实现复杂的模型。其中,PyTorch与YOLO(You Only Look Once)是两个非常重要的名词。本文旨在探讨这两个技术之间的区别&…...

使用树莓派搭建音乐服务器

目录 引言一、搭建Navidrome二、服务穿透三、音流配置 引言 本人手机存储空间128G,网易云音乐6个G,本就不富裕的空间更是雪上加霜,而且重点是,我根本没有听几首歌,清除缓存后,整个软件都还是占用了5个G左右…...

单链表的分解

编写算法创建以整数为数据元素的单向链表,实现将其分解成两个链表,其中一个全部为奇数,另一个全部为偶数(尽量利用已知的存储空间)。 输入格式: 1 2 3 4 5 6 7 8 9 0 输出格式: 1 3 5 7 9 2 4 6 8 输入样例: …...

[OS] 4.Linux 内核

1. 下载 Linux 内核源代码 首先,你需要从官方站点或镜像站点下载 Linux 内核源代码。 官方源代码:The Linux Kernel Archives 清华大学镜像站点:Index of /kernel/v5.x/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载 .t…...

flutter_鸿蒙next_Dart基础③函数

目录 说在前面 1. 函数的基本定义 例子 代码解释 2. 函数的调用 代码解释 3. 可选参数与命名参数 可选参数 代码解释 调用示例 命名参数 代码解释 调用示例 4. 匿名函数与高阶函数 例子 代码解释 说在最后 说在前面 在 Dart 编程语言中,函数是构建…...

基于猎豹优化算法(The Cheetah Optimizer,CO)的多无人机协同三维路径规划(提供MATLAB代码)

一、猎豹优化算法 猎豹优化算法(The Cheetah Optimizer,CO)由MohammadAminAkbari等人于2022年提出,该算法性能高效,思路新颖。 参考文献: Akbari, M.A., Zare, M., Azizipanah-abarghooee, R. et al. The…...

Linux:进程的创建、终止和等待

一、进程创建 1.1 fork函数初识 #include pid_t fork(void); 返回值:子进程中返回0,父进程返回子进程id,出错返回-1 调用fork函数后,内核做了下面的工作: 1、创建了一个子进程的PCB结构体、并拷贝一份相同的进程地址…...

数值优化基础——基于优化的规划算法

1 最优化问题的一般形式 最优化问题:满足一系列约束的可行域内,找到使得目标函数最小的解 min ⁡ f ( x ) s.t. x...

括号匹配——(栈实现)

题目链接 有效的括号https://leetcode.cn/problems/valid-parentheses/description/ 题目要求 样例 解题代码 import java.util.*; class Solution {public boolean isValid(String str) {Stack<Character> stacknew Stack<>();for(int i0;i<str.length();i)…...

【Java 并发编程】初识多线程

前言 到目前为止&#xff0c;我们学到的都是有关 “顺序” 编程的知识&#xff0c;即程序中所有事物在任意时刻都只能执行一个步骤。例如&#xff1a;在我们的 main 方法中&#xff0c;都是多个操作以 “从上至下” 的顺序调用方法以至结束的。 虽然 “顺序” 编程能够解决相当…...

Linux下载安装MySQL8.4

这里写目录标题 一、准备工作查看系统环境查看系统架构卸载已安装的版本 二、下载MySQL安装包官网地址 三、安装过程上传到服务器目录解压缩&#xff0c;设置目录及权限配置my.cnf文件初始化数据库配置MySQL开放端口 一、准备工作 查看系统环境 确认Linux系统的版本和架构&am…...

强化学习笔记之【DDPG算法】

强化学习笔记之【DDPG算法】 文章目录 强化学习笔记之【DDPG算法】前言&#xff1a;原论文伪代码DDPG算法DDPG 中的四个网络代码核心更新公式 前言&#xff1a; 本文为强化学习笔记第二篇&#xff0c;第一篇讲的是Q-learning和DQN 就是因为DDPG引入了Actor-Critic模型&#x…...

c++继承(下)

c继承&#xff08;下&#xff09; &#xff08;1&#xff09;继承与友元&#xff08;2&#xff09;继承与静态成员&#xff08;3&#xff09;多继承及其菱形继承问题3.1 继承模型3.2 虚继承3.3 多继承中指针偏移问题 &#xff08;4&#xff09;继承和组合&#xff08;9&#xf…...

数据结构 ——— 单链表oj题:反转链表

目录 题目要求 手搓一个简易链表 代码实现 题目要求 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 手搓一个简易链表 代码演示&#xff1a; struct ListNode* n1 (struct ListNode*)malloc(sizeof(struct ListNode)); assert(n1);…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上&#xff0c;所以报错&#xff0c;到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本&#xff0c;cu、torch、cp 的版本一定要对…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

群晖NAS如何在虚拟机创建飞牛NAS

套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...

用鸿蒙HarmonyOS5实现中国象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...