中医名词看不懂?用PaddleNLP做一个中医“百科全书”

ea5f1a828b797d914049d2e1657f4e24.png

我是一个深度学习爱好者,目前对自然语言处理感兴趣,热衷于了解一些人工智能中的数学推导和经典论文复现,正在成长的“小趴菜”一枚,在PPDE指导计划中,创作了中医文献阅读理解项目,下面将由我介绍在项目创作过程中的一些思考

6240a74c2af4ae0acde91352e0ebcb7f.png

方案介绍

5d00d3e082d7858d15e376ef6a70951e.png

项目简介

中医文献阅读理解是一个将自然语言处理技术应用于中医药领域的任务,其目标是使用能够读取、理解和回答中医药知识的模型普及和传播中医药知识。该任务需要建立一个大规模的中医药语料库,并使用自然语言处理技术对语料库进行处理,提取关键信息并建立模型。

模型的输入可以是一个中医药相关的问题,模型的输出则是问题的答案。例如,如果输入的问题是“什么是中医证候学?”,则模型的输出可能是“中医证候学是中医药的一个重要理论,它旨在通过观察患者的症状和体征,推断患者所患疾病的特点和发展趋势,为临床治疗提供理论指导。”   

此外,基于该任务还可以开发更多关于中医药知识的小应用,如中医药问诊系统、中医药辨证论治辅助工具等,以帮助更多人了解和应用中医药知识。

  • 项目链接

https://aistudio.baidu.com/aistudio/projectdetail/5166465

97a3a8ca9c305a00b7fdf2f1f2592c76.png

数据集介绍

本项目标注数据源来自四个中医药领域文本,包括《黄帝内经翻译版》《名医百科中医篇》《中成药用药卷》《慢性病养生保健科普知识》。共计5000篇文档,每篇文档人工标注产生 1~4对(问题, 答案),共标注13000对(文档、问题、答案)。

{
2  "id": 98,
3  "text": "黄帝道:什麽叫重实?岐伯说:所谓重实,如大热病人,邪气甚热,而脉象又盛满,内外俱实,便叫重实",
4  "annotations": [
5   {
6     "Q": "重实是指什么?",
7     "A": "所谓重实,如大热病人,邪气甚热,而脉象又盛满,内外俱实,便叫重实"
8   },
9   {
10   "Q": "重实之人的脉象是什么样?",
11   "A": "脉象又盛满"
12   }
13  ],
14  "source": "黄帝内经翻译版"
15   }

407e6392880e974e95058221097c5db4.png

技术点介绍

随着中医文献资源的不断增加, 如何高效地阅读和理解中医文献已经成为了一个重要课题。为了解决这个问题,我们需要利用一些自然语言处理、机器学习、可视化等相关技术。本项目的主要技术点包括:

  • 构建中医MRC数据集,使用PaddleNLP搭建、训练并调优阅读理解模型;

  • 采用多种内置模型进行实验,最终确定使用Roberta阅读理解模型

  • 动转静,完成静态图的推理,并用Gradio实现可交互的部署。

PaddleNLP

PaddleNLP是飞桨自然语言处理模型库,具备易用的文本领域API、丰富的预训练模型、多场景的应用示例和高性能分布式训练与部署能力,旨在提升开发者在文本领域的开发效率。

RoBERTa阅读理解模型

阅读理解本质是一个答案抽取任务,PaddleNLP对于各种预训练模型已经内置了对于下游任务-答案抽取的Fine-tune网络。以PaddleNLP中的RoBERTa模型为例,将模型Fine-tune完成答案抽取任务。

答案抽取任务的本质就是根据输入的问题和文章,预测答案在文章中的起始位置和结束位置。RoBERTa模型主要是在BERT基础上做了几点调整:

  • 训练时间更长,batch size更大,训练数据更多;

  • 移除了next predict loss

  • 训练序列更长;

  • 动态调整Masking机制

在BERT中,mask是在数据预处理过程中完成,这意味着,在每个epoch中,训练的每个句子的mask是固定的、静态的。RoBERTa提出一种动态mask的方法,将训练数据每个句子复制10次,采用不同的mask方法,这样在epoch为40的时候,平均每条mask的序列会出现4次。

对中文数据的处理中,预训练模型RoBERTa使用BPE (Byte-Pair Encoding,字节对编码)处理文本顺序。官方词表包含5万多的byte级别的token。其中,merges.txt文件存储了所有的token,vocab.json文件是一个byte到索引的映射,通常频率越高的byte索引越小。BPE编码转换的过程是,先将输入的所有tokens转化为merges.txt中对应的byte,再通过vocab.json中的字典进行byte到索引的映射。Tokenizer的作用是将原始输入文本转化成模型可以接受的输入数据形式。

基于Gradio实现AI算法可视化部署

如何将你的AI算法迅速分享给别人让对方体验,一直是一件麻烦事儿。Gradio算法可视化部署可以自动生成页面,形成交互,改动几行代码就能完成项目,支持自定义多种输入输出,支持生成可外部访问的链接,从而实现分享。

最终效果呈现

5b3561feee9fafd25054124c353446dc.jpeg

364ac1a0894ba852efc8c48f349d14bf.png

设计流程展示

f454962f1441fe60f393ded4227d9d22.png

环境配置

本项目基于PaddlePaddle2.0.2与PaddleNLP2.0.7版本。关于如何下载此版本可以点击飞桨官网,查看下载方式。更加推荐在AI Studio上一键运行哦。

  • 项目链接

https://aistudio.baidu.com/aistudio/projectdetail/5166465

f03f9dc1f2e5e78edf2fd2863eaae204.png

方案设计

430b7b6231259bc47162e835ea1040b4.png

阅读理解的方案如上图,query表示问句,一般是用户的提问,passage表示文章,query的答案要从passage里面抽取出来。query和passage经过数据预处理,生成其id形式的输入,然后经过RoBERTa模型,得到答案的位置,从而得到相应的answer。

d5c51ef846c67d4c21eb60840d7c9704.png

数据处理

具体的任务定义为:给定问题q和一个篇章p,根据篇章内容,给出该问题的答案a。数据集中的每个样本,是一个三元组<q, p, a>,例如:

问题 q: 草菇有什么功效?

篇章 p: 草菇荠菜汤鲜嫩清香、色味搭配,具有清热和脾、益气平肝、降糖降压等功效,是夏季解暑祛热的良食佳品…….

参考答案 a:  草菇荠菜汤鲜嫩清香、色味搭配,具有清热和脾、益气平肝、降糖降压等功效。

本项目的数据集是json格式,包括:

  • lid: 段落id 

  • ltext: 段落文本

  • lannotations: 每个段落拥有一个annotations,其中包含1~4对(问题、答案)

  • lQ:问题  

  • lA:答案

将上述数据进行简单地数据清洗以及格式(sqaud格式)转换操作。为了方便读取,具体格式如下:

{'id': 'xx', 'title': 'xxx', 'context': 'xxxx', 'question': 'xxxxx', 'answers': ['xxxx'], 'answer_starts': [xxx]
}

a4e782cf140560a0dd6b6c5a5b1b8650.png

模型训练与策略选择

设置Fine-tune优化策略
 

# 参数配置# 训练过程中的最大学习率
learning_rate = 3e-5 
# 训练轮次
epochs = 2
# 学习率预热比例
warmup_proportion = 0.1
# 权重衰减系数,类似模型正则项策略,避免模型过拟合
weight_decay = 0.01num_training_steps = len(train_data_loader) * epochs
lr_scheduler = ppnlp.transformers.LinearDecayWithWarmup(learning_rate, num_training_steps, warmup_proportion)# Generate parameter names needed to perform weight decay.
# All bias and LayerNorm parameters are excluded.
decay_params = [p.name for n, p in model.named_parameters()if not any(nd in n for nd in ["bias", "norm"])
]
optimizer = paddle.optimizer.AdamW(learning_rate=lr_scheduler,parameters=model.parameters(),weight_decay=weight_decay,apply_decay_param_fun=lambda x: x in decay_params)

设计损失函数

由于BertForQuestionAnswering模型将BERT模型的sequence_output拆成start_logits和end_logits,所以阅读理解任务的loss也由start_loss和end_loss组成。答案起始位置和结束位置的预测可以分成两个分类任务,我们需要自己定义损失函数。

设计的损失函数如下:

class CrossEntropyLossForSQuAD(paddle.nn.Layer):
def init (self):
super(CrossEntropyLossForSQuAD, self). init ()
def  forward(self,  y,  label):
start_logits,  end_logits  =  y    # both shape are [batch_size, seq_len]
start_position, end_position = label
start_position = paddle.unsqueeze(start_position, axis=-1) end_position =  paddle.unsqueeze(end_position, axis=-1) 
start_loss = paddle.nn.functional.softmax_with_cross_entropy(
logits=start_logits,  label=start_position,  soft_label=False) start_loss = paddle.mean(start_loss)
end_loss = paddle.nn.functional.softmax_with_cross_entropy( logits=end_logits,  label=end_position,  soft_label=False)
end_loss = paddle.mean(end_loss)loss = (start_loss + end_loss) / 2 return loss

模型训练

模型训练的过程通常有以下步骤:

  • 从dataloader中取出一个batch data

  • 将batch data喂给model,做前向计算;

  • 将前向计算结果传给损失函数,计算loss

  • loss反向回传,更新梯度。重复以上步骤。

每训练一个epoch时,程序通过evaluate()调用paddlenlp.metric.squad中的squad_evaluate()返回评价指标,compute_predictions() 评估当前模型训练的效果,用于生成可提交的答案。

5793f52e898e927b03913d618feac8da.png

预测部署

模型训练完成之后,我们实现模型的预测部署。虽然训练阶段使用的动态图模式有诸多优点,包括Python风格的编程体验(使用RNN等包含控制流的网络时尤为明显)、友好的debug交互机制等。但Python动态图模式无法更好地满足预测部署阶段的性能要求,同时也限制了部署环境。

高性能预测部署需要静态图模型导出和预测引擎两方面的支持。

a58d5d8da71de81a4448783ff7935c33.png

动转静导出模型

基于静态图的预测部署要求将动态图的模型转换为静态图形式的模型(网络结构和参数权重)。飞桨静态图形式的模型(由变量和算子构成的网络结构)使用Program来存放,Program的构造可以通过飞桨的静态图模式说明,静态图模式下网络构建执行的各API会将输入输出变量和使用的算子添加到Program中。

cb73cd5740b82bad277d39bb7c27fc8e.png

使用推理库预测

获得静态图模型之后,我们使用Paddle Inference进行预测部署。Paddle Inference是飞桨的原生推理库,作用于服务器端和云端,提供高性能的推理能力。使用 Paddle Inference 开发 Python 预测程序仅需以下步骤:

db8bff36ecd07f80559e9b743186a054.png

995169731b39b87ba5ec0dcd336ce4c2.png

Gradio进行交互项部署

Gradio部署有以下步骤:

  • 将模型拷贝到本地,并按照接口要求封装好方法;

import Gradio as gr
def question_answer(context, question):
pass # Implement your question-answering model here...
gr.Interface(fn=question_answer,  inputs=["text",  "text"],  outputs=["textbox",  "text"]).launch(share=True)
  • 加载用户输入的context和question,并利用模型返回answer;

  • 返回到Gradio部署的框内, 进行页面展示;

  • 生成公开链接。 

2e8fe6aacc1d458598204015c51afdef.png

总结与展望

db6bdd1ff9e27021a01e0af581dbd7e7.png

模型效果对比

本项目尝试了12L768H的bert-base-chinese、bert-wwm-ext-chinese和24L1024H的roberta-wwm-ext-large模型,效果如下,可以看到roberta-wwm-ext-large模型能够取得较好的效果,随之付出的代价就是模型的体积变大,并且训练速度变迟缓。除此之外,如果epoch过大,极易发生过拟合,可以调整学习率等参数避免过拟合。

c172ef0ff892832ed1349bc1b1c249e2.png

与roberta-wwm-ext-large相比,同规模的ERNIE 1.0-Large-cw、ERNIE 2.0-Large-zh在CLUE各项任务上平均精度更高,后续计划尝试ERNIE系列模型。

ebfd64ea4ff995a602dfc615f5baca33.jpeg

  • 模型Benchmark地址

https://github.com/PaddlePaddle/PaddleNLP/tree/develop/model_zoo/ernie-3.0

  • 使用方法参考

https://aistudio.baidu.com/aistudio/projectdetail/2017189

9bcdb532354b4728ab3ee3e0ecfecca1.png

项目展望

数据

寻找更多优质中医语料数据集,进行简单增强,采用回译等数据增强方法,从无到有的构建文本相似数据集。

项目部署

利用AI Studio部署趣味项目或将模型打包后使用flask框架,配合前端页面制作体验更好的小应用。

模型优化

将模型微调的几步epoch结果保存,进行模型平均操作。采用模型Bagging策略,将训练质量好的模型融合处理,探寻更多优质模型。针对任务,使用更多医疗数据集训练好的预训练模型。

更多

学习RocketQA等端到端问答模型,加上检索条件,在机器阅读理解基础上制作完整的基于检索的问答系统,并可为后续学习基于生成的问答模型打下基础。(PS:励志做个类似ChatGPT的通用问答模型)

开源项目地址

https://github.com/PaddlePaddle/PaddleNLP

参考文献

[1]https://aistudio.baidu.com/aistudio/projectdetail/2017189
[2]https://aistudio.baidu.com/aistudio/projectdetail/4113678

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30376.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

六问Chatgpt,小白如何在短时间内写出人生中第一个爬虫程序?

学习了Chatgpt后总是在想应该如何好好吧使用它? 直到找到了一直想下手学&#xff0c; 又一直在圈外打圈找不准学习方法的PYTHON编程。 缘起 工作上一直有一位同事要每天编报新的销售日报给BOSS&#xff0c;如是&#xff0c;利用系统做了一个销售日报简报地址&#xff0c;问题…

咋看百度文心一言?

北京时间3月16日下午2点&#xff0c;百度正式发布了自己的大模型文心一言。 发布会由百度李彦宏和cto王海峰亲自上场&#xff0c;足见百度对这场发布会的重视。不过整场发布会下来&#xff0c;内心也由如过山车一般&#xff0c;待我心绪经历了一个晚上才冷静下来。 本文从以下…

百度生成式AI产品文心一言邀请测试,五大场景、五大能力革新生产力工具

3月16日下午&#xff0c;百度于北京总部召开新闻发布会&#xff0c;主题围绕新一代大语言模型、生成式AI产品文心一言。百度创始人、董事长兼首席执行官李彦宏及百度首席技术官王海峰出席&#xff0c;并展示了文心一言在文学创作、商业文案创作、数理推算、中文理解、多模态生成…

西安交大,发Science!

点击上方“AI遇见机器学习”&#xff0c;选择“星标”公众号 第一时间获取价值内容 仅作学术分享&#xff0c;不代表本公众号立场&#xff0c;侵权联系删除 转载于&#xff1a;西安交大&#xff1b;青塔 4月7日&#xff0c;《科学》期刊在线发表了西安交通大学在高性能织构压电…

百度平地起“雷”,突然爆出的QPS数据意味着什么?

鲁迅先生1923年在北师大发表了著名的演讲《娜拉走后怎样》&#xff0c;其中的提问与思考方式振聋发聩&#xff0c;直到今天也依旧有效。面对很多产业现象、技术趋势&#xff0c;我们也不妨多问几个“之后怎样”。 比如说&#xff0c;自ChatGPT爆火之后&#xff0c;中国各个互联…

不贩卖焦虑,关于ChatGPT的思想实验

不知道大家有没有看到过这个有趣的思想实验&#xff0c;来自华盛顿大学的艾米丽本德尔&#xff0c;一个计算语言学家&#xff0c;用章鱼的故事来做说明。我们称之为章鱼实验&#xff0c;有点像图灵测试的变形版&#xff0c;故事内容&#xff1a; 假设有两个人&#xff0c;露丝…

chatgpt赋能python:Python摄像机:探索未知的世界

Python摄像机&#xff1a;探索未知的世界 在当代高科技社会中&#xff0c;人类已经可以通过数码设备记录并呈现许多神奇的场景&#xff0c;例如到了深海底部、进入火山口、清晰探望动物的习性等等。这些设备中&#xff0c;数码摄像机是其中必不可少的一员。而今天我们要探讨的…

ChatGPT一个建立于预训练模型之上的AI交互工具

火出圈的ChatGPT之所以会火&#xff0c;是与其他类型AI采取了不同的方式。内容生产范式正在加速其演进&#xff0c;至少经历了三个过程&#xff1a;从 PGC (Professional Generated Content&#xff0c;专业生产内容)&#xff0c;到 UGc (User Generated Content&#xff0c;用…

为什么我会选择 AI-TestOps 让测试更智能

catalogue 写在前面背景纵观AI-TestOps云平台进入平台自动化测试主流程AI视频流程图 写在前面 如今在IT行业中的测试岗位尤为重要&#xff0c;可谓是生产环境的最后一道防线&#xff0c;我们的愿景都是测试点头后绝无BUG&#xff0c;可见测试工程师在项目中的重要程度&#xf…

最新:AutoGPT、ChatGPT4等22种令你效率倍增的AI生成工具

省时查报告-专业、及时、全面的行研报告库 省时查方案-专业、及时、全面的营销策划方案库 【免费下载】2023年3月份热门报告合集 【限时免费】ChatGPT4体验&#xff0c;无需翻墙直接用 ChatGPT调研报告&#xff08;仅供内部参考&#xff09; ChatGPT的发展历程、原理、技术架构…

对话式 LLM 用于硬件设计,首个完全由 AI 辅助创建的微处理芯片诞生

将 ScienceAI 设为星标 第一时间掌握 新鲜的 AI for Science 资讯 编辑 | 绿萝 通常&#xff0c;开发任何类型的硬件&#xff08;包括芯片&#xff0c;作为电子设备大脑的微小电子元件&#xff09;&#xff0c;都是从用正常语言描述硬件应该做什么开始的。然后&#xff0c;经过…

互信息法确定时间序列最佳时延

1 代码实现 最近需要实现对时间序列的相空间重构&#xff0c;参考ChatGPT与相关论文&#xff0c;实现了基于互信息法确定时间序列最佳时延的程序&#xff0c;代码如下&#xff1a; import numpy as np import pandas as pd import matplotlib.pyplot as pltN_ft 1000def del…

GPT-3 的到来,程序员会被 AI 取代吗?

2020-07-26 10:08:26 无需任何训练&#xff0c;AI可用任何语言编程。 作者 | Frederik Bussler 译者 | 弯月&#xff0c;责编 | 屠敏 头图 | CSDN 下载自东方 IC 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 以下为译文&#xff1a; 2017年的时候&#x…

【IC设计】数字IC设计读书笔记

文章目录 《专用集成电路设计实用教程》集成电路系统的组成集成电路的设计流程综合转化逻辑优化映射同步电路和异步电路亚稳态单时钟同步设计的时序约束目标库和初始环境设置DC如何计算每个逻辑单元的延迟&#xff08;Cell Delay&#xff09;&#xff1f;target librarylink li…

从原理到实战,手把手教你在项目中使用RabbitMQ

RabbitMQ 的文章之前写过&#xff0c;但是当时给的示例是 Demo 版的&#xff0c;这篇文章主要是结合之前写的理论知识&#xff0c;将 RabbitMQ 集成到技术派项目中。 话不多说&#xff0c;上文章目录&#xff1a; 下面我们先回顾一下理论知识&#xff0c;如果对这块知识已经清…

GPT-5将死于GPT-4背刺?牛津剑桥研究警告:AI训AI成「剧毒」,会让模型崩溃!...

点击下方卡片&#xff0c;关注“CVer”公众号 AI/CV重磅干货&#xff0c;第一时间送达 点击进入—>【目标检测和Transformer】交流群 转载自&#xff1a;新智元 【导读】最差的人类语料&#xff0c;也要胜过AI生成的文本。 随着GPT-4、Stable Diffusion和Midjourney的爆火&a…

GPT-5将死于GPT-4背刺?牛津剑桥研究警告:AI训AI成「剧毒」,会让模型崩溃!

【导读】最差的人类语料&#xff0c;也要胜过AI生成的文本。 随着GPT-4、Stable Diffusion和Midjourney的爆火&#xff0c;越来越多的人开始在工作和生活中引入生成式AI技术。 甚至&#xff0c;有人已经开始尝试用AI生成的数据来训练AI了。难道&#xff0c;这就是传说中的「数…

微软、OpenAI用上“数据永动机” 合成数据是晨曦还是暮光?

微软、OpenAI、Cohere等公司已经开始测试使用合成数据来训练AI模型。Cohere首席执行官Aiden Gomez表示&#xff0c;合成数据可以适用于很多训练场景&#xff0c;只是目前尚未全面推广。 已有的&#xff08;通用&#xff09;数据资源似乎接近效能极限&#xff0c;开发人员认为&a…

论道AIGC:如何看待用于内容生成的永动机?| 大咖思辨-38

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 12月28日&#xff0c;“科技未来看青年”AI TIME 2022 年度嘉年华完美收官。本次年度嘉年华开启“青年学者说”、“科技新势力”、“Debate AIGC”三大板块&#xff0c;邀请AI领域的青年科学家、PhD等青年学者分…

让博客支持使用 ChatGPT 生成文章摘要是一种什么样的体验?

让博客支持使用 ChatGPT 生成文章摘要是一种什么样的体验&#xff1f; 起因 Sakurairo 主题支持了基于 ChatGPT 的 AI 摘要功能&#xff0c;我有点眼红&#xff0c;但是因为那是个主题限定功能&#xff0c;而我用的又是 Argon&#xff0c;遂想着让 Argon 也支持 AI 摘要功能。…