首页> 中国专利> 一种面向高血压的智能问答系统

一种面向高血压的智能问答系统

摘要

本发明公开了一种面向高血压的智能问答系统。包含:高血压知识图谱的构建;确定高血压这一专业领域的知识来源,分析知识图谱的构建过程,包括源数据的清洗处理、本体层构建、实体层构建。知识问答有关的算法和高血压智能问答系统的实现;研究问句意图分类和命名实体识别有关技术,实现问句语义的理解,以及对自然语言理解模型(NLU)进行相应的训练。除自主式问答方式的研究实现之外,还需要研究向导式问答有关算法。向导式问答主要目的是引导用户去提问,其中需要涉及推荐有关的技术,对于待推荐的问题需要进行分类,考虑以什么为推荐的依据,并且,需要设计机器人智能问诊模块,采集用户的大致病情特征。

著录项

  • 公开/公告号CN113314236A

    专利类型发明专利

  • 公开/公告日2021-08-27

    原文格式PDF

  • 申请/专利权人 南华大学;

    申请/专利号CN202110605808.2

  • 发明设计人 刘永彬;欧阳纯萍;王成;万亚平;

    申请日2021-06-01

  • 分类号G16H80/00(20180101);G06F16/332(20190101);G06F40/295(20200101);

  • 代理机构32344 苏州拓云知识产权代理事务所(普通合伙);

  • 代理人王云峰

  • 地址 421001 湖南省衡阳市蒸湘区常胜西路28号

  • 入库时间 2023-06-19 12:21:13

说明书

技术领域

本发明涉及高血压智能诊疗系统领域,特别涉及一种面向高血压的智能问答系统。

背景技术

慢性病是我国居民健康的一个重大危害,其危险因素一直处于一个较高水平。据《健康 管理蓝皮书:中国健康管理与健康产业发展报告(2018)》中的数据显示,我国有大约有3 亿的慢性病患者,在慢性病中高血压的患病率是最高的,并且高血压抽样调查结果显示,在 我国大于18岁的人群中,高血压患病率为23.2%,患病人数达2.45亿。

对于不同的高血压患者的而言,其症状表现会有所不同,患者初期也许没有明显的表现 出什么症状,只是偶然的血压偏高。然而,如果患者没有及时发现病情,随着疾病慢慢加重, 就容易出现比较严重的,甚至难以控制的症状。并且它作为一种常见的慢性病,整个诊疗时 间较长,治愈较低,为终身性疾病。高血压这种终身性慢性病所具有的特点直接导致了患者 需要对自身病情进行长期持续性的关注。

据2018年《中国网民科普需求搜索行为报告》统计,健康与医疗主题一直是网民搜索 的科普热点,意味着在搜索引擎上查找医疗健康方面信息的人是越来越多。然而,搜索引擎 提供的信息服务并不够准确,在一定程度上,仍需用户去筛选有效信息。除此之外,在日常 诊疗过程中,患者对于自身病情的了解不够充分,很难根据自己的病情提出专业的咨询问题, 往往只是被动的听取一些医嘱。

问答系统与搜索引擎提供信息服务的形式有着一定程度的差别。对于搜索引擎而言,它 给用户提供的更多是按照关键词匹配而来的文档排序,而问答系统给用户提供的答案是一种 更加接近日常的自然语言的形式。

因此,本专利提出面向高血压的智能问答系统,系统问答依赖于一个高血压的知识图谱。 作为基于知识库的自动问答的常见应用之一,知识图谱被用来描述现实世界中实体、概念以 及实体与概念之间的关系,它是语义网络的一种表现形式。在智能问答中,需要先把用户的 问题使用自然语言处理技术提取实体和语义信息,然后再从知识图谱中查找答案。系统为弥 补用户对于高血压这一专业领域知识的欠缺,在自主式问答的基础上,提出向导式的问答方 式,让用户在即使不了解专业知识的前提下也可以轻松向医生咨询专业问题。在一方面,完 善的专业领域知识库,可以帮助用户解决日常生活中大部分问题,节省线下公共医疗卫生资 源;在另一方面,使不具备专业知识的患者也能够通过问答系统学会咨询医生专业问题,对 于自己的病情有更加深入的了解,有助于患者对于高血压的控制和治疗。

1.1医疗领域应用知识图谱的国内外现状

近年来,随着人工智能相关技术的发展,知识图谱在医疗领域的应用场景也在逐步增多, 而正是由于知识图谱的发展,问答系统与其相关的技术也在不断地进步。在2012年的时候, 谷歌首次提出知识图谱的概念,这一概念的提出将信息检索从字符串匹配上升到智能理解的 阶段。比较有名的国外医疗领域智能问答系统IBM的Watson Health第一次在智力竞赛上 战胜人类选手时,曾一度引起巨大的轰动,Watson基于强大的认知计算能力以及丰富的知 识库数据,主要针对肿瘤、癌症帮助医生进行决策支持。医学系统命名法-临床术语SNO MED-CT,构建医疗本体知识图谱,其涵盖了如药品、人体结构等很多方面的临床信息,能 够满足临床工作者以及其他相关者的各种各样的需求。

国内,阮彤等人与上海曙光医院合作构建了中医药问答和辅助开药系统,该系统依赖于 包括疾病库、症状库、中草药库等多个库的中医药知识图谱。阿里健康建立的“医知鹿”医 学智库,可以直接通过搜索疾病的名称,就能查询到相关疾病的全链条信息。另外国内知识 图谱搜索技术做得比较好还有搜狗的知立方、百度的知心搜索。在解决如何建设权威的科普 内容和怎么精准地传播科普知识这个两个医学方面的科普问题上,搜狗以“AI+Professiona l+专业医学编辑”(APGC)这样一种协作生产科普内容的模式,打造AI医学知识图谱。

将知识图谱应用于医疗领域,并与搜索引擎相结合,能够提升信息服务的准确度,弥 补已有问答模式的不足,使得问答更加具有智能性。另外,将知识图谱应用于辅助诊疗,决 策分析也成为如今的热点,这一部分主要的用户群是临床专家等医疗专业人员。而对于面向 普通大众的医疗知识问答,目前大多数提供的是一种针对用户自主提问形式的应用,也就是 说,用户知道自己的问题是什么,只需要向系统寻求解答。但是,在现实生活中,信息存在 着不对等的特点,在医学领域更是如此,对于大多数用户而言,自身掌握的领域知识少,有 时候并不知道自己应该如何提问。

发明内容

为解决上述现有技术存在的问题,本发明提供了一种面向高血压的智能问答系统,整 个系统利用高血压知识图谱生成一些较为专业的问题,病人用推荐的问题去与医生交流,可 以相当于具备一些医学常识的病人的提问,会更有针对性。从而可以改变过去医患之间知识 完全不对等的情况,通常只有医生问,病人答,病人都不知道如何开始问问题,也不知道该 问哪些与高血压相关的专业问题。

为达到上述目的,本发明采用如下方案实现:

一种面向高血压的智能问答系统,

包括知识图谱模块,形成用于高血压问答的数据以及知识图谱,以应对不同情况患者 的提问;

问答系统模块,基于知识图谱模块的数据,针对患者提问给出回答;

进一步的,所述知识图谱模块包括高血压源数据模块,数据处理模块,本体层模块, 实体层模块;

进一步的,所述问答系统模块包括消息接收模块,翻译者模块,追踪器模块,策略选 择模块,动作执行模块以及消息反馈模块;

进一步的,所述问答模块能够接收文字信息以及语音信息;

进一步的,所述问答模块包括自主式问答模块,向导式问答模块,以及语音输入模块, 能够接收文字信息以及语音信息;在问答开始之前,用户可以在系统首页选择自主式、向导 式中的任意一种问答方式进行咨询;系统首界面为每种问答模式提供按钮,可以直接点击进 行选择问答模式,也可以直接输入对应的文字进行选择;

自主式问答模块具体为:

点击进入自主式问答模块之后,用户可以直接输入自己想问的问题进行提问;对于一 些特定的问题,比如“查询高血压的更多信息”、“查询利血平片的说明书”,系统回答之 前会先进一步确定用户的详细查询意图;用户想要知道高血压的更多信息,系统会把高血压 有关的信息类别列出来,供用户选择需要查询的具体内容;

自主式问答提供高血压有关多类问题查询,包括别名、是否医保、挂号科室、发病部 位、传染性、治愈率、多发人群、并发症、典型症状等方面。包含高血压相关多种疾病查询, 包括妊娠高血压、老年人高血压、儿童青少年高血压、原发性高血压、继发性高血压;还包 含高血压相关药品信息查询,包括成份、性状、适应证、用法用量、不良反应、禁忌;

向导式问答模块具体为:

向导式问答主要目的是引导用户咨询高血压有关专业问题,以《中国高血压防治指南 2018年修订版》中信息为主要问诊依据,模拟医生与患者之间的问诊过程,对于用户的病 情有一个基本的了解,然后依据病情的评估推荐咨询问题,以此达到准确推荐问题的效果;

进入向导式问答之后,系统会询问用户一系列设计好的问诊问题,问诊时,避免用户 随意输入答案,造成对用户病情判断不够准确,也采用按钮形式,直接选择答案进行回答;

在问诊结束之后,系统会依据用户的病情,推荐相关的问题给用户参考,帮助用户进 行提问;用户每次向系统提出一个问题,系统需要先对此进行解答,然后继续推荐其他类型 的问题,直到与病情有关的每类问题都已经推荐过为止;

语音输入模块具体为:

系统语音输入模块采用在线语音听写方法;首先系统前端网页使用js调用navigato r.mediaDevices.getUserMedia()方法,进行音频捕捉,然后将获取到的音频流通过AudioC ontext对象进行处理,接着将Blob对象的音频转为base64形式,使用ajax上传到服务器 进行解析,调用科大讯飞的语音听写API将语音转为文字,最后把相应的文字显示在网页输 入框中,以便用户对待输入的信息进一步确认。

进一步的,所述本体层模块中,本体包含有治疗方法、疾病、药品、症状、其他共五个 大类;并发症、用药、治疗、具有症状、包括、相关这六个领域关系为:

进一步的,所述实体层模块具体包括:识别命名实体和实体分类。

进一步的,上述问答系统具体的问答步骤为:

步骤1:用户首先选择是否是知道自己要问的问题,选择“是”,则进入自主问题模块 -步骤2,选择“否”,则进入“问题向导”模块-步骤7;

步骤2:当进入自主问题模块,输入要问的问题,进入步骤3;

步骤3:对输入的问题进行分词,得到问题的词向量表示,进入步骤4;

步骤4:利用深度循环神经网络算法判断用户输入的是与高血压相关的“实体”还是“问 题意图”,如果是“实体”则转到步骤6,否则转到步骤5;

步骤5:对“问题意图”进行处理,找到问题意图可能匹配的“实体”,转到步骤6;

步骤6:查询高血压知识图谱,查找到与“实体”对应的知识实例,输出结束;

步骤7:“问题向导”主要是帮助用户和医生进行对话,并不需要机器给出答案,主要 是帮助用户生成问题;先收集一些基本信息:年龄,性别,病史年限,高压,低压;转到步骤8.

步骤8:基于模板生成与高血压相关的问题(5个一批),模板是基于知识图谱生成的; 转到步骤9;

步骤9:用户从推荐的五个问题中选择自己想要问医生的问题,如果推荐的“五个问题” 有一个合适,则转到步骤10,如果没有合适的,则再转到步骤8;

步骤10:选择一个合适的问题对医生进行提问,并简单输入医生的答案,转到步骤11;

步骤11:询问是否结束提问,如果是,转到步骤13,否则转到步骤12;

步骤12:结合上一个问题,医生给出的答案,查询高血压知识图谱中的知识,再次转 到步骤8利用模板生成新的5个推荐问题;

步骤13:结束。

本发明的有益效果为:

整个系统利用高血压知识图谱生成一些较为专业的问题,病人用推荐的问题去与医生 交流,可以相当于具备一些医学常识的病人的提问,会更有针对性。从而可以改变过去医患 之间知识完全不对等的情况,通常只有医生问,病人答,病人都不知道如何开始问问题,也 不知道该问哪些与高血压相关的专业问题。

附图说明

图1高血压知识图谱构建流程图;

图2为本发明系统的完整流程图;

图3为命名实体识别流程;

图4为实体分类流程;

图5为高血压知识图谱部分内容;

图6为Pipeline流程;

图7为Pipeline配置文件;

图8为编写训练数据;

图9为Rasa Core对话引擎架构;

图10stories.md文件;

图11向导式问答流程;

图12问诊部分模板;

图13系统架构图;

图14Rasa NLU与Core交互流程;

图15系统首界面;

图16向导式问答;

图17语音识别效果。

具体实施方式

高血压知识图谱构建

在知识图谱中,实体表示现实中的事物或者概念,实体之间的关系表示事物或概念之间 的关系。知识图谱与本体存在着一定的差别,本体一般用于学术研究,其侧重于表达概念与 概念之间的关系。而知识图谱在本体之外还增加了实例,简化本体中复杂的概念关系,重点 在于融合现实中的众多实体。因而,本专利在构建高血压的知识图谱过程分为本体层的构建 与实体层的构建。构建过程如图1、2所示。

本体层构建主要参考《中国高血压防治指南2018年修订版》,从这一高血压专业书籍 中获取有关专业知识,整理出概念术语,获取概念之间的层次关系,进一步完善概念有关的 对象属性以及属性值,确定好各个属性之间的关系。

实体层构建一部分数据来源于《中国高血压防治指南2018年修订版》,该指南中包含 结构化的表格数据与非结构化的文本数据,另外一部分来源于39健康网,主要是半结构化 数据。

本体层构建

本体是指对客观存在系统的解释和说明,构建本体时需要分析领域需求,明确数据的来 源,接着从数据来源中确定领域概念以及概念之间的关系。本专利的高血压专业知识主要来 源于《中国高血压防治指南2018年修订版》,在医学术语的规范上,依据国际疾病分类I CD-11中文版。

本体包含有治疗方法、疾病、药品、症状、其他共五个大类,如表1所示。

表1本体类型表

使用统计的方法,归纳得到并发症、用药、治疗、具有症状、包括、相关这六个领域关 系,如表2所示。

表2领域关系

实体层构建

识别命名实体

实体层数据来源于《中国高血压防治指南2018年修订版》和39健康网。提取文本中的 医学实体,是为了先提取关键的概念,然后提取实体之间的关系和其他数据,最后用标准化 的形式表示这些数据。命名实体识别主要包括:基于词典、基于启发式规则以及基于机器学 习这三种方法。生物医学领域和普通领域的命名实体识别相比,会有存在几个问题:实体数 量、种类多;实体可能会有较多其他词语修饰,以至于不好划分边界;生物医学语言命名方 式不统一,实体表达方式多种多样;实体存在着缩写、嵌套、大小写混合、含特殊字符等情 况。

指南数据处理

该指南为PDF文件,由于本专利后台的编程语言使用的是python,因此使用pdfplumb er包将PDF文件转为文本专利件,不过pdfplumber只能将PDF文件中文字提取出来,而文 件还有一些表格、图片等信息,在提取过程中发现,表格中的文字也被提取出来,但是失去 了原有的格式,处理时直接将这一部分数据删除,后面再单独对表格进行处理,然后再清除 其他一些噪音,得到高血压源数据。

指南中的表格信息提取使用的是camelot-py工具。camelot-py工具是一个用来从PDF 文件提取表格的Python包。提取表格时,先确定好表格所在的页码,然后结合matplotlib 绘制出该页面的坐标,根据坐标图准确定位表格所在区域,设置table_areas。虽然camelot- py默认能够直接识别表格坐标,但是在该指南中使用效果不好,直接提取容易存在两个问 题,一是会将其他区域文本当做表格,二是会使表格信息部分缺失。提取之后可以输出到E xcel文件或以其他形式存储。

经过上述方法,得到了该指南的文本数据。对文本数据进行抽取实体时使用的哈工大的 pyltp自然语言处理工具包,该工具包是对LTP的Python语言的封装,具有分词、词性标注、 命名实体识别等功能。

中文分词主要作用就是拆分汉字序列为词序列,使用条件随机场算法,能够比较好的处 理分词歧义问题,对于部分未登录词的问题也可以得到比较理想的解决,LTP也正是使用了 基于条件随机场的分词方法。同时,为了使分词方法对于不同的领域都有较好的适应性,L TP还对分词方法扩展了兼容外部词典的序列标注。

词性标注是对于每个词都要分辨该词是名词,是动词,还是其他的词性。LTP的词性标 注使用支持向量机作为底层的分类器,其为了解决数据的稀疏问题,尤其是在分词的时候识 别没有登录词的问题,引入汉字特有的偏旁部首特征,以此来增加词性的泛化能力。

LTP的命名实体识别采用了统计和规则相结合的方式,其训练数据来源于人民日报,统 计模型使用的是最大熵马尔可夫模型,可以对人名、地名、机构名、专有名词等七种类型的 实体进行识别。

由于pyltp原有命名实体识别主要是针对于人名等实体,而本专利主要提取的是高血压 有关的生物医学命名实体,直接使用pyltp中的命名实体识别不够准确,有很多专业的实体 无法准确的识别出来,所以主要使用pyltp中的分词与词性标注,从而将提取实体分为:分 词、词性标注、命名实体识别三个步骤。

实际使用过程中,发现pyltp对于某些专业领域的词汇的识别并不够准确,因而在分词 之前,加入医学领域的词典,作为用户外部词典引入。在分词结果中,实体主要依据词性标 注结果,如n表示名词,nd表示方位词,nh表示人名,ni表示组织机构,并加以一定的规则,基本可以识别出指南中的实体。为了使结果更加准确,后期需要进行一定的人工修正。

39健康网数据处理

39健康网上的数据形式主要是半结构化数据,本专利需要提取的信息主要有高血压相 关的疾病(如高血压、高血压危象、原发性高血压、妊娠高血压等),高血压有关的症状(如 颈性高血压、门诊高血压等),高血压有关的检查(如血压测量、动态血压监测等),高血压有关的药物(如奥美沙坦酯片、硝苯地平控释片等)。

来自同一个网站的网页一般会有相同的模板,通过分析html中标签,发现上述四个类 别的信息,每个类别具有一致的模板,因而分析归纳出四个模板,进行数据提取。由于这些 数据自身具有一定结构,在提取实体时,可以分为两个部分:

第一部分,以名词短语形式存在的数据,如高血压治疗方法:“药物治疗、饮食疗法”, 其中“药物治疗”、“饮食疗法”这两个词语就可以直接作为实体,不需要进行其他处理。

第二部分,以文本形式存在的数据。比如高血压的简介:“在未用抗高血压药的情况下, 非同日3次测量,收缩压≥140mmHg和(或)舒张压≥90mmHg,可诊断为高血压……”,以 这种形式存在的数据,实体和关系混杂在数据之中,就需要进一步的处理,处理过程和指南 数据处理中文本形式数据时识别命名实体过程类似。

在识别出命名实体之后,实体库中可能会存在重复的实体,需要加入到set中进行去重 操作。命名实体识别流程如图3所示。

实体分类

实体分类主要针对从指南中提取的实体,计算实体相似度时可以采用WordNet、同义词 网络以及Word2Vec计算词与词之间的相似性。本专利使用的是fastText,fastText是用于文 本分类和文本向量表示的一个模型。

fastText模型可以分为模型架构,层次softmax以及N-gram子词特征三个部分。fastTe xt的架构和word2vec中的连续词袋模型(Continuous Bag of Words,CBOW)的架构比较 相似,它们的却别是CBOW用上下文去预测中心词,而此处用全部的n-gram去预测指定类 别,使用softmax函数f计算类别的概率分布。对于有N个文档的训练集而言,这样能够使得负对数似然最小:

其中x

对于每一个单词,word2vec会将其看作原子,这种方式生成的词向量忽略了单词本身 的所具有的内部特征,而fastText表示每个词都是按照字符级别,并考虑了局部词序,这样 不仅可以通过叠加字符级n-grams向量的方式,构建训练词库中没有登录的词,而且可以优 化低频词生成的词向量的效果。

本发明主要应用fastText的文本分类的功能。对于上一步得到实体,有一部分已经具有 类别,用这些实体,到百科网上爬取相对应的词条,然后把这些词条进行清洗,去除HTM L标签,分词,去掉停用词,作为fastText的训练集,训练得到文本分类模型。同样,对于待分类的实体,也爬取到对应的词条,处理词条数据之后,作为fastText待分类的数据集,加载之前训练好的模型,就能完成标签预测。实体分类流程如图4所示。

数据存储

类和属性

本体层归纳出疾病、药品、治疗方法、症状、其他共五个类,每个类具有的属性如表3 至表7所示。

(1)疾病类,标签:disease

表3疾病类

(2)药品类,标签:drug

表4药品类

(3)治疗方法类,标签:cure

表5治疗方法类

(4)症状类,标签:symptom

表6症状类

(5)其他类,标签:others

表7其他类

关系

作为信息抽取中一个不可或缺的部分,实体关系抽取是为了确定实体之间的语义关系。 本专利中的数据多数实体之间具有明确的关系,少数关系不明确的数据的抽取则是基于简单 的规则,因此在本专利中不作过多的叙述。

本专利把抽取的实体和关系存入neo4j数据库,然后使用Python包py2neo提供的方法 编写程序进行数据插入。neo4j的存储索引包含有基于节点的索引和基于关系的索引,本专 利的关系比较简单,主要查找的对象是节点,所以按照类的名称建立了索引。图5为高血压 知识图谱的可视化形式,截取了数据库中部分数据。

自主式问答

自主式问答即是常见的一问一答模式,由用户咨询一个问题,然后系统分析该问题之后, 进行解答。

问句理解流程

本专利的问句理解基于Rasa NLU,Rasa NLU是一个基于Pipeline的自然语言理解框 架。Pipeline由多个组件构成,每个组件之间具有一定顺序关系,彼此之间相互依赖,对于 功能相同的组件,可以相互替换。为了实现命名实体识别和意图分类,Pipeline需要执行以 下流程,如图6所示。

(1)初始化组件

初始化组件主要有两个作用,一是加载模型,二是为后续组件提供支持。R asaNLU有两个初始化组件MitieNLP和SpacyNLP,Mitie目前对于中文支持较 好,因而本专利使用MitieNLP组件,该组件能够初始化mitie框架,还能够为M itieEntityExtractor、MitieFeaturizer、MitieIntentClassifier等组件提供对象。

(2)分词组件

分词组件有WhitespaceTokenizer、JiebaTokenizer等,用于处理中文的只有JiebaTokenizer组件,JiebaTokenizer组件以一个中文分词器jieba作为底层分词引 擎。

(3)特征提取组件

特征提取组件有MitieFeaturizer、SpacyFeaturizer、NGramFeaturizer、CountVectorsFeaturizer等,它们为实体识别和意图分类提供词向量支持。

(4)命令实体识别组件

命令实体识别组件有MitieEntityExtractor、SpacyEntityExtractor等。本专利使用的MitieEntityExtractor组件是基于mitie的实体抽取来进行识别的,其底层 分类器使用具有稀疏线性内核和自定义功能的多分类线性SVM。

(5)意图分类组件

意图分类组件有SklearnIntentClassifier、KeywordIntentClassifier等。Sklear nIntentClassifier分类组件使用spaCy库加载预训练的语言模型,该模型会将用户 消息中的词表示为词嵌入形式

累加之后,求均值,然后执行网格搜索找到支持向量机的最佳 参数,该分类器会将词向量均值装换为不同的意图。

(6)结构化输出组件

Rasa NLU的结构化输出由NLU框架提供支持,不需要添加另外的组件。

Rasa NLU在意图识别上默认使用词袋模型,在实体识别上使用条件随机 场,而上述选用的管道组件依赖于一个MITIE特征提取器模型,该模型通过非 监督学习的方式训练大量中文语料而来。

MITIE是一个信息提取工具,它使用了分布式词嵌入技术,文本分类器基 于SVM实现,实体识别基于结构化SVM实现。训练该模型需要一个大规模的 中文语料,由于训练对于硬件要求较高,并且需要花费一定的时间,本专利直接 使用crownpku训练的基于中文维基百科Dump和百度百科语料训练的模型。

NLU模型训练

(1)配置Pipeline

在训练问句理解模型之前,需要在yml文件中对Pipeline进行相应的配置,按照自主 式问答模块中的分析,配置Pipeline如图7所示。

Rasa NLU中的组件对于语言的种类是比较敏感的,所有组件都会有一个语言兼容性 列表,在配置中设置language参数之后,框架会先自动检测配置文件中所设置的语言,并 且为Pipeline中的组件都加载设置的语言模型,其中language参数需要指定Rasa NLU将要 处理语言内容为中文,如果不设置语言,该参数默认会是“en”值,即加载英文模型。

由于jieba分词对于高血压相关领域词汇识别不是特别的准确,因而本发明在训练模 型时额外设置了user_dicts参数,配置jieba的外部词典路径,以用户自定义的高血压领域词 典来提高其分词的效果。

(2)准备训练集

在写Rasa NLU的训练数据集时可以使用entity_synonyms定义多个同义词,实体中能 够使用正则表达式匹配,也可以指定外部文本专利件或者元素类表作为查找表。

编写训练集时,本发明借助一个在线辅助生成数据集的工具Chatito,通过Chatito, 只需要定义好一定数量的规则就能生成大量的训练数据。在Chatito文件中编写好意图、同 义词、实体、训练数据量、测试数据量之后,即可导出json文件格式的训练集与测试集。

如图8所示,本发明在Chatito文件中定义了两个意图viewDrugManual、viewDrugSi ngleItem,每个意图对应不同的问句,问句由实体槽、同义词组成,并设置了训练集的数量 training,Chatito会根据该文件自动对问句中的实体、同义词以及是否省略某些词进行排列 组合,从而生成指定数量的数据,大大减少了人工编写训练集的工作量,简化了数据集的生 成过程,也使得训练集中的数据更加具有普遍性和完整性。

对话引擎

人机对话部分使用Rasa Core框架维护对话过程。Rasa Core是一个对话引擎框架, 该框架由翻译者、追踪器、策略、动作组成。用户发来的消息传递给翻译者,翻译者将消息 转换为由原始文本、意图、实体组成的字典。追踪器的作用是保持会话,接入新消息,记录 每次动作的选择。策略的作用是接收追踪器的当前状态并决定下一个动作。其上层架构如图 9所示。

策略会和特征器一起进行实例化,特征器会为当前的对话状态创建一个向量表示,并 传递给追踪器。标准的特征描述应该包含:最后的动作、最近用户消息中的实体和意图以及 当前定义了哪些词槽。词槽的特征向量在不同情况下会有差异。简单情况下,它只由一个二 进制的向量元素表示该词槽是否被填充。但是如果其作为分类变量时,由k个二进制向量编 码而成,其中具有连续值的向量将指定影响特征的阙值,或者简单的以浮点数的形式传递给 特征器。

Rasa Core提供多种策略选择,如Memoization Policy、Keras Policy、EmbeddingPol icy。本专利使用的Keras Policy是基于Keras中的神经网络,通过LSTM算法预测下一个 动作。训练之前可以对Policy进行相应的配置,并编写stories.md文件(图10)和domain. yml文件。stories.md文件是原始对话与domain映射的训练集,domain.yml文件指定对话的 领域范围,包含有实体槽、实体、意图、模板,动作。

训练时,Rasa Core会载入stories.md文件,追踪器会记录实体、实体位置,意图等信 息,并转为状态编码,然后将准备好的训练数据进行长短期记忆网路的训练。在进行预测时, 从追踪器记录的聊天数据中取出消息作为模型输入,得到每个动作的概率,概率最大的即为 下一个动作。

为使Rasa Core预测模型更加准确,本发明进一步使用了交互式训练方式,交互训练 采用在线训练模式,由用户输入一个问句,系统将问句交给Rasa NUL做实体识别与意图分 析,分析结束之后,控制台会显示每个意图的概率与抽取出来的实体,可以直接对于Rasa NLU处理的结果作出进一步的确认或者修正,然后Rasa Core会预测接下在需要执行的动 作,同样的,用户可以直接进行确认,每一个问题修正的结果都将在一次完整的交互式训练 后记录在stories文件和NLU的数据文件中。

向导式问答

就目前大多数的就医场景而言,医患之间的知识是不对等的,在整个医患沟通环节中, 患者往往都是处于一种被动状态,不知道该如何咨询专业问题,而这种完全由医生主导的就 医容易导致患者有些困惑无法得到有效的解答,向导式问答专门为不知道如何提问的用户提 供服务,由系统挖掘用户可能想咨询的问题,然后推荐给用户。

为了使推荐更加的准确,就要对用户的病情有一个基本的了解,类似于日常生活中的 问诊,按照《中国高血压防治指南2018年修订版》中的问诊内容,设计了用户病情采集, 把采集到的用户数据建立病情特征,然后系统为用户提供一些可能的专业问题,用户挑选其 中一个最契合的向医生提问,此处,可以是在在线平台利用自主问答进行提问,也可以是在 线下问诊时,直接询问医生用户可以选择最符合情况的问题向医生提问,可以在在线平台上 输入问题,由自主式问答模块进行回答。也可以在线下问诊时,直接选择推荐的问题向医生 提问,根据医生的回答,再次使用本发明推荐后续的问题。向导式问答流程如图11所示。

用户病情采集

用户病情采集部分以《指南》为理论依据,全面了解病人的病史,设计问诊问题包含 有,性别、年龄、家族史、病程、症状及既往史、继发性高血压的线索、生活方式、心理社会因素这些方面,结合Rasa Core中的templates,实现每种类型问题的询问,考虑到用户的回答形式是多样的,为使后台更好的处理,这部分使用buttons的形式,用户可以直接选择答案,不需要手动输入文字,也避免了用户的各种不确定性回答带来的歧义或难以判断等问 题。问诊部分模板如图12所示。

收集到用户病情的整体情况之后,对答案做一个映射,建立病情特征。

问题推荐

问题推荐部分推荐的问题来源于一本高血压科普知识手册:《高血压知识问答手册》。 该手册以问答对的形式讲解了高血压各个方面的知识,对于这些数据,需要先进行文本分类, 分类依据问题与答案的内容。首先选择手册中部分数据定义好类别,然后把这些已知类别的 文本分词,去掉停用词,接着使用fastText训练模型。另外一部分待分类的数据也进行分词, 去掉停用词,然后通过训练好的模型初步地分类,最后人工对分类结果进行一定的调整。

将所有分好类的文本转化为问题特征向量,接收到用户病情采集到的病情特征之后, 计算病情特征向量

D(D

Q(Q

其中,特征涉及到用户病情采集中的年龄、性别、家族史、病程等,而问题的类型包含有是否是妊娠一类的问题,适合于什么样的年龄段,是否伴随着其他的疾病,有关饮食方面的问题,有关于运动方面的问题等等。

比如,如果用户在诊断过程中选择了自己是高血压伴糖尿病,那么系统会从有关糖尿病的问 题中,找出和用户病情相似度最高的几个进行推荐。这样一来可以使得系统推荐的问题更加 的全面,涵盖到患者的注意事项、用药、饮食、运动等各个方面。

系统实现与测试

前面的章节详细的阐述了高血压知识图谱的构建、知识问答的具体实现。本章将对自 主式问答、向导式问答和语音输入的具体实现与测试进行叙述。

系统开发环境

用户交互界面的网页渲染使用基于Python的web框架Tornado,后台服务端由于Ras a Core对话引擎附带web框架Flask,就直接使用了Flask框架。系统的开发部署和部署环 境如表8和表9所示。

表8开发环境

表9部署环境

系统整体架构

系统主要是通过构建高血压专业领域知识图谱,为高血压患者提供准确的知识问答, 同时,为解决医患之间知识不对等所带来的,患者很难向医生咨询专业相关的问题的情况, 提供向导式问答模式,用以引导用户进行提问。这样为高血压患者提供了一个很好的咨询平 台,给他们长期的日常诊疗带来了很大的便利。

系统的整体架构如图13所示,用户输入的咨询问题通过前端交互式界面接收,前端 与业务逻辑层之间通过Socket.IO进行相互通信。在业务逻辑层,问题首先会交给RasaN LU进行意图分类与实体抽取,处理出来的实体与意图传递给Rasa Core,其完成意图到动作的映射。Rasa NLU与Rasa Core之间交互流程如图14所示。

Rasa Core执行相应的动作时,可以从词槽中取出实体或者关系,然后将实体和关系 传到数据层。数据层为业务层提供了数据增删查改接口,通过该接口可以增加、更新知识数 据库中的数据,也可以查询知识数据库中的实体或关系,建立答案的基础构成。

系统实现

本系统有三个模块,自主式问答模块、向导式问答模块、语音输入模块。在问答开始 之前,用户可以在系统首页选择自主式、向导式中的任意一种问答方式进行咨询。如图15 所示,系统首界面为每种问答模式提供按钮,可以直接点击进行选择问答模式,也可以直接 输入对应的文字进行选择。

自主式问答模块

点击进入自主式问答模块之后,用户可以直接输入自己想问的问题进行提问。对于一 些特定的问题,比如“查询高血压的更多信息”、“查询利血平片的说明书”,系统回答之 前会先进一步确定用户的详细查询意图。用户想要知道高血压的更多信息,系统会把高血压 有关的信息类别列出来,供用户选择需要查询的具体内容。

自主式问答提供高血压有关多类问题查询,包括别名、是否医保、挂号科室、发病部 位、传染性、治愈率、多发人群、并发症、典型症状等方面。包含高血压相关多种疾病查询, 包括妊娠高血压、老年人高血压、儿童青少年高血压、原发性高血压、继发性高血压等。还 包含高血压相关药品信息查询,包括成份、性状、适应证、用法用量、不良反应、禁忌等。

向导式问答模块

向导式问答主要目的是引导用户咨询高血压有关专业问题,以《中国高血压防治指南 2018年修订版》中信息为主要问诊依据,模拟医生与患者之间的问诊过程,对于用户的病 情有一个基本的了解,然后依据病情的评估推荐咨询问题,以此达到准确推荐问题的效果。

进入向导式问答之后,系统会询问用户一系列设计好的问诊问题,问诊时,避免用户 随意输入答案,造成对用户病情判断不够准确,也采用按钮形式,直接选择答案进行回答, 如图16所示。

在问诊结束之后,系统会依据用户的病情,推荐相关的问题给用户参考,帮助用户进 行提问。用户每次向系统提出一个问题,系统需要先对此进行解答,然后继续推荐其他类型 的问题,直到与病情有关的每类问题都已经推荐过为止。

语音输入模块

系统语音输入模块采用在线语音听写方法。首先系统前端网页使用js调用navigator. mediaDevices.getUserMedia()方法,进行音频捕捉,然后将获取到的音频流通过AudioConte xt对象进行处理,接着将Blob对象的音频转为base64形式,使用ajax上传到服务器进行解 析,调用科大讯飞的语音听写API将语音转为文字,最后把相应的文字显示在网页输入框 中,以便用户对待输入的信息进一步确认。语音识别效果图如图17所示。

系统测试

在整个系统构建完成之后,本节将编写测试用例介绍系统测试。通过测试环节,能够 在软件正式投入运营使用之前发现问题,及时对问题进行修复,以确保软件系统各项功能满 足设计需求。测试可以分为白盒测试和黑盒测试。其中,黑盒测试主要是利用一定的输入条 件以此验证系统功能的完成情况,因此黑盒测试也被称为功能测试。本专利主要测试系统功 能,下面将设计功能测试用例进行相关功能实现情况的验证。

自主式问答测试,测试步骤结果如下表10所示:

表10自主式问答测试

向导式问答测试,测试步骤结果如下表11所示:

表11向导式问答测试

语音输入测试,测试步骤结果如下表12所示:

表12语音输入测试

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何不 经过创造性劳动想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保 护范围应该以权利要求书所限定的保护范围为准。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号