毕业设计第一次总结(基于知识图谱的医疗问答)

毕业设计第一次总结(基于知识图谱的医疗问答)

写在文章前面:之所以做总结是因为本人也是一个刚入门知识图谱的本科萌新,也不是什么大佬,在整个过程中遇到了不少困难,然后也有一些自己的心得,想分享给后来人。

本人的排版比较差,多多关照哈哈哈哈

**项目参考:**中科院软件所刘焕勇老师在github上的开源项目,b站up主‘’每天都要机器学习‘’的基于知识图谱的智能问答项目实战。然后还有几篇比较不错的关于深度学习的文章就不推荐了。在后续总结中会慢慢写出来。
目前阶段任务:完成最基本的知识图谱医疗问答系统的搭建。后续根据自己的时间安排和需求再对项目进行优化。
做了哪些工作:把两个项目都全部部署了一遍,然后就是繁琐枯燥的读源码。下面介绍一下在两个项目中原作者都做了什么工作以及整个项目流程。参考两者简单设计出了第一版问答系统雏形。

1. 中科院刘焕勇老师的github项目

部署起来很简单,相关github中有所提及,就不在赘述了,主要讲一下这个项目里面的一些不太完善的地方(不完善的地方后续我们进行优化更改就可以变成自己的东西了)。

  1. 数据来源方面:该数据所说也是来源于寻医问药网站,一开始没细看,等部署完成之后使用起来就发现很大的问题了,数据有一些乱,尤其是在疾病症状

在这里插入图片描述
不知道为什么会出现人名可能是当时爬虫的问题。所以后续大家如果使用数据根据自己的需求自己去网站爬下来就好了。
数据导入neo4j:在导入数据的时候就是用py2neo一个一个节点和关系导入,整个过程会比较慢,大家可以在爬取到数据之后就保存规整的csv文件直接导入到neo4j中会快很多。
整个数据大多数都是半结构化数据,所以使用起来很方便,对于新手来说构建知识图谱很简便,建议大家刚开始尝试的时候可以先不用考虑非结构化文本如何处理的,先上手熟悉一下即可。
该项目开源的代码中data_spider.py文件感觉里面东西有点小乱,主要注意的地方就是基本上所有东西需要自己重新写,因为网站肯定不是一成不变的,有些xpath语句肯定是需要自己去根据自己需求重新写一份。作者是把数据都存到mongodb中了,所以你需要提前下好mongodb,最好顺带下个可视化工具,看起来方便一些。
2. 问答算法:该项目对于用户输入的text文本进行规则化匹配,并没有涉及到机器学习或者深度学习的算法,更不用跑模型,所以很容易上手。问答系统完全是基于规则匹配实现,用关键字匹配,对问句分类,然后拼接成cypher语句去neo4j里面查找结果再返回给用户
3. 可借鉴的地方:最可以借鉴的地方就是项目数据的来源,所以我的毕业设计知识图谱部分的数据来源主要是寻医问药网站,其次就是该项目的图谱的scheam定义,我打算借鉴一部分,然后再根据具体爬到的数据在进行修改或者增加一部分实体和关系(具体还要看后续的进度)。

2. up主‘’每天都要机器学习‘’的项目

整个项目部署起来还是有点繁琐的,作者开源的gitbuh中有相关部署的介绍,可以结合看一下。简单说一下我在部署的时候遇到的一些坑,最大的坑就是各种模块的版本的问题。
第一点:因为作者是用keras实现的各类算法,所以在用tensorflow和keras时候一定要注意两者的版本是不是配套的,具体对应关系,要不然你可能在训练模型或者加载模型的时候回出现各种各样的bug。然后还有就是注意python的版本,python3.7是可以用tensorflow1.xx的 如果你是python3.8或者更高版本就不适用,你用pip直接指定版本会报错找不到该版本,即使你去官网下载whl文件安装也会提示你当前这个安装包不能在该环境下使用。所以这一点也要注意。
第二点:注意很多数据集是需要自行下载好的,包括一些模型也是需要自行训练的,因为我尝试着直接加载作者的weights发现不太可行,问了一些学长,可能是版本环境各种因素不同。所以大家还是老老实实自己训练吧。如果是想快速的想体验一下项目的话,那就得和原作者所有版本环境一致。但是大家自己做东西的话就不用照抄别人的了,参考一下别人的思路和流程,剩下的自己diy也是不错的高效学习的方法。
第三点:原作者使用itchat做一个交互,因为微信网页版不能用了,所以那个itchat不能用, itchat-uos也不能用了所以大家需要自行寻找其他途径。

  1. 数据来源方面:参考了刘焕勇老师整理好的数据。
  2. 问答算法设计:该项目主要是在问答方面给出了很多的深度学习模型方法和设计思路,原视频还介绍了联合抽取实体和关系的模型,实体规范化等以及同名公众号上有关系属性等相关的介绍,有兴趣的小伙伴一定要看看(非常具体和详细)。并且作者还在原中科院老师的项目上增加了多轮对话的功能。
  3. 可借鉴的地方:问答系统的设计思路上面,语义槽的定义,一些模型的设计。

3. 衍生出来的毕业设计

1:数据来源:参考上面两个项目的项目来源,由于我想实现的问答系统的问答分类跟他们不太相同,所以需要的数据也需要一些其他类型的,但是还是来源于寻医问药网站。爬取了相关疾病的多方面相关的资料,因为考虑到后续可能会实现更多功能所以在爬取数据的时候尽可能规整且类别多。只有后面用不用得到得看个人时间安排,毕设毕竟是要以完成为目的。现阶段主要完成问答的模型的训练和一些底层逻辑的设计,对于知识图谱构建相关技术,比如实体抽取关系抽取属性抽取会在后面慢慢更新。
2:目前数据初步scheam定义:
实体:毕业设计第一次总结(基于知识图谱的医疗问答)_第1张图片
关系:毕业设计第一次总结(基于知识图谱的医疗问答)_第2张图片
目前项目实体和关系初步设计为这些。
3:问答系统的算法设计:
项目对于用户输入的文本见意图分类,首先会进行简单地一个意图分类,确定用户是在问医疗方面的问题还是闲聊,处理模型就是简单地LR(逻辑回归)融合GBDT进行简单的对用户意图进行分类,主要为一下几类:
在这里插入图片描述
还有accept类别属于多轮对话的设计,将会对用户上下文解析。目前该模型训练的效果比较不错。
毕业设计第一次总结(基于知识图谱的医疗问答)_第3张图片
进行粗分类之后,如果是医疗方面的问答就会交给医疗问答模块进行处理,使用bert模型进行意图识别,定义相关语义槽,使用blistm_crf进行实体识别填槽。目前该bert模型效果并不是很理想,后需要进一步优化,后续打算再找点数据集或者用模板生成一些。blistm_crf模型训练效果还可以,后续要需要等bert模型具体优化好了之后再看看两者效果。主要是对数据量和一些意图的类别数量上进行不断的调整,模型具体参数和细节设计不会动太大。
bert训练效果如下:
毕业设计第一次总结(基于知识图谱的医疗问答)_第4张图片
还是很有待提高的,accuracy才达到0.63。可以说是很惨了,感觉是我数据量太少加上一些其他原因,后续接着优化。
blistm-crf模型训练结果如下:
毕业设计第一次总结(基于知识图谱的医疗问答)_第5张图片
这个模型我比较熟悉,毕竟之前两篇博客写的就是相关实体识别相关的内容。训练效果还可以,用的数据集也是公开的数据集,毕竟自己没那么人工去标注数据。

下一个阶段要做的就是丰富实体类型和关系,尽量扩展问答系统可以进行问答的种类。对bert模型进行调优修改,数据进一步扩大。

写在最后

最后的毕设是打算设计一个前端展示的,打算用flask+Vue去做,有兴趣的小伙伴可以一直跟着我后续发的博客,相对于flask之前大一的时候自学过一些,Vue不太懂还没入门。介于本人其实也是一个萌新,懂得东西很少,可能在写博客的时候有很多纰漏的地方还希望广大网友指出,大家一起改进提高。
等毕业设计真的完成之后,有机会的话我会像一些作者一样也会录制视频,从0开始从源码讲起,带着大家走一遍我的毕设。并且也会把代码开源。
我相信学习最快捷的途径就是走别人做过的路,但是最可怕的也是这条路,希望大家可以从模仿中学会创新,最后把别人的知识变成自己的。
作为一个程序员最应该学会的就是ctrl+c和ctrl+v,更需会的是改进,优化,扩展。

你可能感兴趣的:(python,人工智能,深度学习,知识图谱,keras)