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

基于深度学习的医疗问诊助手

前言:

前几天博主做了一个基于chatgpt3.5的智能医疗问答系统,但是博主想着,总依靠别人的chatgpt模型不太合适,没法突出自身的核心优势,基于此想法,博主衍生出了做一个基于深度学习的医疗问诊助手的想法,依靠深度学习模型来做一个简单的医疗问诊机器人。

正文开始:

硬件准备

这里博主直接展示一下做这个项目的一些硬件准备,感兴趣的同学可以自己做一下。

image.png

PaddleNLP

PaddleNLP是基于PaddlePaddle深度学习框架的自然语言处理(NLP)工具库,提供了丰富的预训练模型和高效的NLP算法。它支持文本分类、命名实体识别、机器翻译等多种NLP任务,并具有易于使用的API和高性能的计算能力。
PaddleNLP是一个强大的自然语言处理开发库,它提供了多种预训练的 NLP模型,包括 BERT、ERNIE、GPT等,这些模型在各种 NLP任务中都表现出了优异的性能。对于情感分析任务,选择一个适合的模型至关重要。

PaddleNLP文档,相信信息大家可以点击文档进行查阅 

image.png

BiLSTM

BiLSTM(双向长短期记忆网络)在情感分析中挺常用的,因为它能更好地理解文本的上下文。简单来说,BiLSTM其实是有两个LSTM网络,一个从前往后处理序列,另一个从后往前处理。这样一来,它能同时捕捉到前后文的信息,理解起来更加全面。这在情感分析中很关键,因为一句话的情感往往需要靠前后文的语境来判断,光看单独的词语可能就不够准了。

image.png

Chatbot

这里博主也借鉴了一些网上的教程,采用百度的 plato-mini模型,百度推出的PLATO系列是国内领先的AI技术之一,专注于对话生成和文本理解等领域,表现非常出色。PLATO-mini是该系列的轻量级版本,它继承了PLATO系列的核心技术优势,同时在体积和运算需求上进行了优化,确保了较高的性能。通过缩小尺寸和降低资源消耗,PLATO-mini更加适合应用于实时交互场景,提供更高效的服务。
百度的PLATO-Mini模型让我们的对话系统变得更加智能和流畅。简单来说,当用户发送一条消息时,系统首先会对这条消息进行处理,接着将它传入PLATO-Mini模型。这个模型会根据消息的内容和上下文,分析出可能的回复,然后根据这些候选回复,系统会挑选出最适合当前对话的一个回复发给用户。

这个过程背后用到了深度学习的自然语言处理技术,特别是在理解和生成自然语言方面下了很多功夫。PLATO-Mini模型不仅能理解用户输入的意思,还能根据上下文来做出更加精准和自然的回应,提升了用户体验。

总结一下,就是PLATO-Mini帮助我们让对话系统在理解和回复上更自然、流畅,用户的每一次输入都能得到更加贴切的回应,整体体验更加顺畅。

对话流程设计

简单来说,整个会话模块的工作流程大概是这样的:

  1. 用户输入:用户通过界面输入文字,可能是提问、陈述或请求等各种形式。这个输入会被前端抓取,然后发送到后端系统处理。

  2. 输入处理:系统接收到用户的文字后,先进行“清理工作”,比如去掉无关的符号、标签之类的东西,让文本更干净。接着,系统会把连续的文字分割成词语或短语,这样模型才能更容易理解。然后,系统会将这些词语转化为数值,采用像“词嵌入”这种技术,这样模型就能理解它们的含义。最后,系统还会把这些输入与之前的对话内容结合起来,以确保模型理解到当前对话的上下文。

  3. 模型调用:处理好的输入会被送到PLATO-Mini模型,模型会根据输入和对话历史生成一个合适的回复。PLATO-Mini是经过大量中文对话数据训练的,能够生成非常自然流畅的回应。

  4. 回复输出:系统会把生成的回复发送回前端界面,界面会把文本转化为用户可以看到的格式,比如气泡框。这样,用户就能看到系统的回答了。

image.png

总的来说,就是一个不断循环的过程:用户输入——系统处理——模型生成回复——前端展示,整个过程让用户和系统之间的对话变得自然、顺畅。每一次用户输入,系统都会根据当前对话的上下文,生成适合的回应,确保对话连贯且符合上下文逻辑。

专业知识问答模块

搭建这个对话机器人的主要工作难度是数据提取与知识图谱的构建,对于数据集,博主选择了心理咨询问答语料库,该语料是为应用人工智能技术于心理咨询领域制作的语料,是心理咨询领域首个开放的 QA 语料库,包括 20000条心理咨询数据,也是迄今公开的最大的中文心理咨询对话语料,数据集内容丰富,包含分类信息不仅具备多轮对话内容[9]。该语料库来源于 github,既有原始语料库也含有已经人工标注处理后的语料库,并且该语料库可以直接从python中下载,使用非常方便。
知识图谱的搭建是复杂而必不可少的过程,它对于信息组织和检索具有十分重要的意义。构建心理咨询领域的知识图谱,运用 Python中的 py2neo模块是十分高效且灵活的方法,因为它方便地与 Neo4j图数据库建立连接并执行各种数据库操作。首先要保证对 py2neo模块进行正确的安装和与 Neo4j数据库的连接设置,这就涉及到定义数据库的主机名端口号用户名和密码等相关连接参数。一旦连接建立,博主就可以开始从数据源中读取资料并将其转化为知识图谱中的节点和关系,做到有效地对信息进行组织和管理。
博主的资料来源是 JSON 格式的资料,里面包含了疾病、症状、治疗方法等各种心理咨询相关的资料。博主的任务是对这些 JSON数据进行解析,并从中抽取将成为知识图谱中基础单元的三元组信息(主体-关系-客体)。博主在知识图谱中利用 PY2NEO 模块创建节点[10]。这些结点对不同的疾病、症状或治疗方法[10]等在JSON 数据中的实体。博主创建了一个节点,每个实体都有一个唯一的标志分配给它。同时,博主也可以在这些节点上增加一些额外的属性,比如名字、说明等等,这样就可以进行后续的搜索,也可以进行查询。
结点创建完成后,博主就需要把结点关系建立起来。这些关系与描述不同实体之间关联的 JSON 数据中的三元组信息相对应。一种疾病的结点可能会与多个症状结点联系在一起,而一种症状结点又会与多个治疗结点联系在一起。博主利用关系创建函数在 PY2NEO 模块中建立这些关系,并将一个类型分配到每个关系中。结点、关系建立好了,知识图谱的内容就能进一步丰富起来。博主可以在疾病节点上增加一些附加的属性,如病因,发病率,治疗手段等。从原始资料字典中可以提取这些属性,并作为问答系统的特征词库写入 TXT文件中。特色词库将有助于问答系统对用户提出的问题有更准确的理解和反应。
最后,通过 PY2NEO 模块将识别出来的实体和关系连接到 NEO4J 数据库中。这样就成功地把 JSON 数据变成了知识结构化图谱。此知识图谱既可作为向用户提供准确有用答案的问答系统的后端支持。

image.png

问答系统设计

构建完我们的知识问答模块了,那么接下来我们就该进行问答系统设计了,在构建知识图谱的过程中,我们从原始数据中抽取各个字段的属性值集合,并将这些信息写入文本文件作为问答系统的特征词库。然后,通过构建问题分类器,利用特征词库中的词汇匹配用户问句,从而确定问句的类型。为了加速分类与匹配,我们采用了 ACTree(自动分类树),该结构能快速识别关键词并将问句分类。此外,我们还构建了词典和疑问词列表,这些资源帮助我们准确地识别问句类型并提升分类器的效率。

image.png

在 NEO4J 知识图谱中存储了大量的实体及其关系,问答系统在用户输入问题时,会通过答案搜寻器根据已识别的实体类型检索相关信息。ACTree的使用加速了检索过程,使得系统能够快速定位到相关实体与关系,并生成符合用户需求的答案。为了保证答案的质量,系统会对生成的答案进行人工验证,及时修正错误并进行优化,以确保提供高质量的答案和更好的用户体验。

如下图所示,是一个总的对话逻辑流程图,大家可以看一下 

image.png

在Streamlit上部署PLATO-MINI

先把plato-mini的地址给大家粘贴出来,这样大家可以直接把模型给下载到自己的电脑上了 地址 PLATO-MINI| 6-layers, 12-heads, 768-hidden|在十亿级别的中文对话数据上进行预训练。参数量更小,但效果更好。只支持闲聊型对话。 博主认为最难的地方就在这里了,博主给大家记录一下自己的部署过程,还有代码的理解。首先是系统没有保存历史对话功能,添加一个保存history的列表,增加历史对话保存能力,所以有了下面的代码...

点击基于深度学习的医疗问诊助手查看全文。


http://www.kler.cn/a/460637.html

相关文章:

  • AngularJS 过滤器:提升用户体验的数据处理利器
  • C++ 并发专题 - std::promise 和 std::future 介绍
  • SQL Server中最大并行度详解
  • 只谈C++11新特性 - 内联命名空间
  • MySQL 入门大全:运算符
  • 三维场景重建3D高斯点渲染复现
  • Postman[3] 创建Get和Post请求
  • Django中创建自增主键字段的几种方法
  • UEBA-对等组聚类
  • 数据结构与算法之动态规划: LeetCode 72. 编辑距离 (Ts版)
  • 198.213.337.打家劫舍
  • MySql find_in_set 函数
  • 数据仓库: 9- 数据仓库数据治理
  • KubeOS
  • java基于ThreadLocal实现单例模式
  • Android 系统 AlertDialog 系统层深度定制
  • 基于AT89C51单片机的可暂停八路抢答器设计
  • 试用ChatGPT的copilot编写一个程序从笔记本电脑获取语音输入和图像输入并调用开源大模型进行解析
  • 【一起python】银行管理系统
  • linux上使用cmake编译的方法
  • ArrayList 和LinkedList的区别比较
  • 酒后饮品选择指南:科学缓解不适
  • 2024年年度总结
  • Pyqt5学习(学习中)
  • LoRaWAN协议在基于低地球轨道的大规模机器类通信架构中的无缝集成
  • 游戏引擎学习第64天