钟有东 王峰 邱逸铭 区汝轩
摘要:随着深度学习技术、自然语言处理技术、知识图谱技术、对话系统等相關技术的不断发展以及中医药在我国新冠肺炎疫情的治病救人中扮演了重要的角色,中医得到了前所未有的关注,文章正是在这种背景下提出来一种基于Rasa框架的中医问答系统设计的,该文是在ubuntu16.04的环境下,采用Rasa开源问答系统框架和基于Flask框架的轻量级的Web服务器,通过云端服务器的公网实现任何人都可访问的中医智能化问答系统。
关键词:Rasa;中医问诊;问答系统;知识图谱
中图分类号:TP311 文献标识码:A
文章编号:1009-3044(2022)11-0074-03
1 研究的背景和意义
问诊作为中医传统“望、闻、问、切”四诊的重要诊断方式之一[1],是指医生与病人或者陪诊者通过对话的形式,进行有目的有步骤的询问,从而掌握病人的疾病的发生发展情况、目前和历史症状表现以及疾病相关的所有相关信息[2],为医生对病人疾病的确诊提供重要的参考依据。据相关资料统计,病人的75%以上症状都是通过医生问诊的形式得到的[2],由此可见问诊在中医四诊中有多么重要的地位。
中医问诊的历史源远流长,内容极其丰富,经过历代医家的发展,形成独特的理论体系[3]。问诊内容主要包括一般情况、主诉、现病史、既往史、个人生活史、家族史[3],问诊过程就是医生问辨结合的过程,医生需要抓住主诉,全面询问;边问边辨,问辨结合;鉴别诊断,避免误诊[4]。
随着计算机技术、深度学习技术、自然语言处理技术、聊天机器人等相关技术不断地发展,中医问诊与相关技术的结合也迎来了新的发展。本文也正是在这种背景下设计了一种中医智能化问答系统。
2 Rasa开发环境的配置
2.1 Rasa开源自然语言处理框架概述
Rasa是一个基于自动文本和基于语音的对话的开源机器学习框架,支持多种语言,内置支持 Spacy、MITIE、Jieba 等多种开源 NLP 工具,可对各种组件进行组合配置,可根据需要构造定制化的 NLP Pipeline。
Rasa主要包括两部分:Rasa NLU和Rasa core。Rasa NLU可用于机器人的意图分类和实体识别;Rasa Core 会话引擎用真实的对话文本和机器学习算法训练得到模型,从而预测在收到消息后机器人该作何回复(动作) 。如图1所示为Rasa的消息处理流程。
用户输入文本信息或者语音信号后,Rasa的自然语言解释器(Interpreter) 将用户的信息转换成意图信息和实体信息,然后构建语义词典包括:用户原始文本(Text) 、用户意图(Intent) 、实体(Entity) 传输给Rasa Core。Rasa的对话状态追踪器(Tracker)获取当前的对话状态(实体信息和词槽情况) 并记录下来,策略(Policy)接收到当前的对话状态后,进而通过特征提取组件得到对话状态特征,按照对话状态特征预测和选择下一个动作(Action) ,然后Tracker记录当前执行的动作(Action) ,最后执行action将结果反馈给用户。
2.2 Rasa开发环境的配置
首先在ubuntu16.04系统安装Anconda用来配置Python的虚拟环境,在创建虚拟环境前安装python3的python依赖python3-devpython3-pip,然后运用conda create命令创建python3的虚拟环境。source activate激活刚创建的虚拟环境,然后安装执行pip3 install Rasa,接着分别执行pip3 install Rasa[spacy], pip3 install Rasa[MITIE],安装spaCy、MITIE、Jieba等必要的配置。首先创建工程文件夹,主要包括Rasa NLU和Rasa Core文件。整个项目在ubuntu16.04系统下使用Pycharm作为开发工具,程序语言以Python3为主。工程目录文件主要包括:config.yml、credentials.yml、domain.yml、endpoints.yml、data/nlu.yml、data/rules.yml、data/stories.yml、actions.py、data.json、data_to_neo4j.py、neo4j_Knowledge.py、models。其中config.yml用来存放组件配置的信息;nlu.yml用来存放训练模型的数据;models用来存放训练好的模型;其中domain.yml定义了问答机器人的所有信息,包括意图(intents) 、实体(entity) 、词槽(slots) 以及动作(actions) 、表单(form) 和回复(response) 等;actions.yml用来存放自定义actions的代码;credentials.yml用来连接到其他服务(services);data/stories.yml,用于训练Core模型的故事数据集。
3 中医智能问答机器人实现过程
3.1 中医术语语料收集
中医语料相关的原始数据往往需要经过非结构化转化为结构化的形式的预处理过程,便于后续的中文分词、词性标注、命名实体识别、意图识别、实体关系抽取、自然语言生成、对话系统等过程。本文数据收集了来自《中医临床诊疗术语 第1部分:疾病 修订版 2020年版》《中医临床诊疗术语 第1部分:证候 修订版 2020年版》《中医临床诊疗术语 第1部分:治法 修订版 2020年版》《中国名老中医药专家学术经验集》1-5卷、《传统医学名词术语国际标准》《中医基本名词术语中英对照国际标准》《中医药学名词》《中医药名词术语英译》《实用英文中医词典》等中医药术语语料[5]。
首先通过Adobe Acrobat软件将相关中医书籍从PDF格式转成WORD文档,然后校对WORD文档中的错误信息,再将WORD文档转换成计算机便于读取的UTF-8格式的TXT文档,便于建立中医语料库。在多名中医医学相关研究生帮助下,其中证名按照证名ID、证名、同义证名、证名英文术语、病因、主要症状、伴随症状,通过编写相关标记程序构建证候数据库;疾病按照疾病ID、同义疾病名、病因、主要证候、伴随证候进场程序化标记构建疾病数据库。治则按照治则ID、治则名、治则英文术语、同义治则、治则的前提情况、治疗的原则进行程序化处理;治法按照治法ID、治法名、治法英文术语、同义治法、方药或相关疗法、治疗的病症进行程序化处理;疗法按照疗法ID、疗法名、同义疗法、疗法介绍、疗法适用范围进行程序化处理构建治法数据库。其中对症状先从症候中提取出症状,按照一词一义的原则在多名中医医学研究生的帮助下人工尽量地枚举,然后通过分析不同症状之间的关系发现大概存在6种关系:同义关系、属种关系、交叉关系、互斥关系、矛盾關系、全异关系[6]。基于此,在枚举完后,先对症状按照始因、寒热、汗出、疼痛部位、疼痛性质、头身不适、睡眠情志声音、咳痰喘、饮食口味、大便、小便、经带精液、出血、神志血色、头面五官体征、颈胸腹部体征、形体肌肤体征、舌象、脉象等19种分类进行分类[7],然后对其中的同义关系进行标记。接着按照症状ID、症状名、同义症状名进行处理构建症状数据库。对相关的医案按照医案ID、患者基本信息、经查、辨证、治法、诊次、药用、随访、专家名、医案名称、医案来源对医案数据进行处理构建医案数据库。
3.2 中医知识图谱的构建
知识图谱(Konwledege Graph) 最早是由Googel公司在2012年提出,用于优化其搜索引擎。从学术的角度来说,知识图谱本质上把实体之间的关系表示成一种多关系的图谱构建的一个语义网络(Semantic Network) 知识库。其中实体是现实中人、事、物用概念的方法来描述,又叫作本体(Ontology) ;图(Graph) 中的节点表示实体(Entity) ,图(Graph) 中用边(Edge) 则表示实体之间的关系;组成知识图谱的三要素分别是:实体、实体的属性、实体之间的关系三元组。从原始数据到完成知识图谱的构建往往需要经历:知识的存储、知识的抽取、知识的融合、数据的建模、质量的评估等多个过程[8]。如今知识图谱成功地应用到了很多行业,如信息检索、自然语言理解、问答系统、推荐系统、电子商务、金融风控、教育医疗、司法辅助,公安刑事侦查等[9]。
通过构建中医知识图谱可以帮助人们更加深入了解症状、疾病、证候、辨证、治法、方药、药物之间的关系,结合名老中医的经验集、中医医案、中医临床数据、诊疗规范、中医临床研究等可以实现中医资源的有效整合,促进中医的标准化、现代化、智能化的发展。
构建中医知识图谱,首先要对中医行业知识建模,主要包括实体的定义、实体的属性的定义、实体关系的定义。本文基于《中医临床诊疗术语2020》《中国名老中医药专家学术经验集》1-5卷等相关中医术语资料,运用Neo4j图数据库构建了以证候、症状、疾病、经查、治法治则疗法、病因、药用、患者基本信息、医案名称、医案来源等为实体,以证候属性:证名ID、证名、同义证名、证名英文术语、病因、主要症状、伴随症状;疾病属性:疾病ID、疾病英文术语、同义疾病名、病因、主要证候、伴随证候;症状属性:症状ID、症状名、同义症状名;医案属性:医案ID、患者基本信息、主诉、经查、辨证、治法、诊次、药用、随访、专家名、医案名称、医案来源的中医知识图谱。
3.3 中医问诊机器人的对话脚本设计
中医医生问诊过程往往采取以主诉为切入点,围绕病人主要症状的演变、新旧、时间、缓解和加重因素、主要症状的伴随症状和其他相关伴随症状[10]。其中如肺部相关的伴随症状,需要询问病人咳嗽时是否有痰、喘、哮、胸痛、胸闷等症状。有时还需要根据患者的病情实际情况有选择性地询问病人的既往史、个人史、家族史等。基于此,对中医问诊的内容围绕以病人主要症状相关的情况询问和病人伴随症状相关情况的对话脚本设计,以避免过度的询问和病人主要病情不相关问题的无效询问。可以采取基于规则的对话管理来实现对病人主要症状和伴随症状等信息的收集。采用基于知识库的问答系统实现如疾病的同类名、病因、疾病的主要症状、伴随症状、疾病的英文术语的信息问答查询等。
3.4 RasaNLU意图识别数据训练
RasaNLU是一个开源的自然语言处理库,可用于问诊机器人的意图分类和实体识别。Rasa的NLU是一个基于有向无环图的通用型自然语言处理框架,组件(component) 之间通过有向无环图形式相互连接,且组件之间需要按照一定的顺序运行,如命名实体(NER) 组件前面必须先提供分词器才可以正常进行;同类组件之间可以相互替换,如复旦大学开发的分词器和清华大学开发的分词器均有同样的分词的功能。Rasa NLU典型的组件配置主要包括:语言模型组件、分词组件、特征提取组件、命名实体组件(NER) 、意图分类组件、结构化输出组件。比较适合中文开发者流水线(pipeline) 如下:
recipe:default.v1
laungue:”zh”
pipeline:
-name:JiebaTokenizer
-name:LanguageModelFeaturizer
model_name:”bert”
model_weigths:”bert-base-chinese”
-name:”DIETClassifier”
使用Chatito工具快速的构建Rasa NLU训练意图识别数据集,训练模型使用Rasa train nlu命令。
3.5 Rasa Core 对话管理数据训练
运用Rasa Core可以让指定问诊机器人该做什么或者该说什么(actions) 。Rasa Core同时也为我们提供了训练预测概率模型的工具,从而根据当前用户或者其他用户的历史会话预测下一步动作。首先为问诊机器人创建Domain文件,Domain文件由意图(intent) 、实体(entities) 、槽(slots) 、模板(templates) 、动作(actions) 组成。然后编写机器人的自定义动作(actions.py) ,实现调用API以及使用python程序实现的相关的操作。接着构造故事(story) ,即用户与中医问诊机器人之间的真实对话,用户输入的内容都会被转换成意图(intent) 和实体(entities) ,机器人对用户的响应都会视作动作(actions) 。在上述文件配置好(nlu、domain、stories、config) 便可以进行Rasa整个模型的训练,直接运行Rasa train即可。
3.6 云端部署和测试
文章通过python的Flask框架实现了一个轻便的web服务器,并将web服务器部署在阿里云服务器上,便于与Rasa进行交互。其中开发流程主要包括:python环境的配置、Mysql安装配置、VirtualEnv虚拟环境的配置、Flaskweb服务器安装配置、uwsgi和nginx的安装和配置、supervisor的安装配置。客户端和服务端工作的流程:客户端发送一个HTTP请求后,作为反向代理服务器的Nginx接收到请求,然后以uwsgi的协议形式将请求分发给WSGI server,WSGI server传给Flask web服务端,服务端处理请求后通过WSGI server和Nginx传回相应给客户端。
App核心就是实现HTTP请求(访问上述的web服务器) ,通过开启阿里云服务器的公网即可在任何地方都可以测试这个Rasa模型。做完这些步骤即可实现云端的测试。接下来发送HTTP请求,测试Rasa模型。
4 结论
本文首先简单地阐述了中医智能化问诊研究的背景和意义,然后描述了问答系统实现几个步骤,包括中医术语语料收集、中医知识图谱的构建、中医问诊机器人的对话脚本设计、意图识别和对话管理数据的训练、问答系统的云端部署和测试。由于不同中医书籍的中医术语具有时代性和概念不一致性以及缺乏医疗专业术语与病人口语用语相关的语料库,往往会出现提取实体不到位,从而导致无法识别出病人的证候,进而影响问答的效果;后续需要构建更加丰富的数据库来进一步完善。
参考文献:
[1] 迪盼祺,夏春明,王忆勤,等. 基于协同过滤算法的中医智能问诊系统研究[J].世界科学技术-中医药现代化,2021,23(1):247-255.
[2] 王旸.中医智能化问诊系统开发及应用前景[J].计算机产品与流通,2019(8):160.
[3] 梁建庆,何建成.中医问诊文献综述[J].中华中医药学刊,2014,32(10):2354-2356.
[4] 李媛媛,胡亮亮,赵倩倩,等.中医问诊方法和技巧[J].中医药导报,2019,25(24):139-141.
[5] 叶晓,童凌.中医药术语汉英双语平行语料库的创建和应用探讨[J].现代语言学,2019,7(2):207-211.
[6] 邹爱云,张启明.中医症状间的9种关系[J].北京中医药大学学报,2013,36(4):224-226.
[7] 朱文锋.证素辨证学[M].北京:人民卫生出版社,2008.
[8] 张吉祥,张祥森,武长旭,等.知识图谱构建技术综述[J].计算机工程,2021(10):1-16.
[9] 刘烨宸,李华昱.领域知识图谱研究综述[J].计算机系统应用,2020,29(6):1-12.
[10] 石强.“问所当问”——中医临床问诊的思路[J].江西中醫药,2018,49(6):9-11.
收稿日期:2022-03-02
基金项目:基于累积展开方法的纳米电子器件非平衡输运和量子效应理论研究(2016A030313698) ;广东省产学研合作项目(2015B09091060) ;基于光载无线技术的舰艇物联网平台的研究开发(2015B090901060) ;广州市科技计划项目(201604046007) ;广东省省级科技计划(产学研) 项目(2016B090918031)
作者简介:钟有东(1991—) ,男,江西赣州人,在读硕士,主要研究方向为机器学习和深度学习;王峰(1961—) ,男(美籍华裔) ,研究生导师,教授,博士,主要研究方向为卫星导航、纳米电子器件仿真、机器人和智能车辆建模和控制;邱逸铭,在读研究生;区汝轩,在读研究生。