Sih对目前医疗诊断领域任务型对话的总结。
- End-to-End Knowledge-Routed Relational Dialogue System for Automatic Diagnosis
2019 AAAI https://arxiv.org/abs/1901.10623v2
- Task-oriented Dialogue System for Automatic Diagnosis
- Context-aware symptom checking for disease diagnosis using hierarchical reinforcement learning
2018 AAAI http://infolab.stanford.edu/~echang/aaai-2018-context.pdf
Abstract
本文提出了一个自动医疗诊断对话系统,通过与患者对话,收集患者自我报告之外的其他症状,自动做出诊断。
现有的对话系统主要依赖于数据学习,无法对额外的专用知识图谱(expert knowledge graph)进行编码。在这项工作中提出了一个端到端知识路由相关对话系统 (KR-DS),将丰富的医学知识图谱整合到话题转换中,使其与NLU,NLG相互协作。
本文使用基于Knowledge-routed的dqn网络 (krdqn) 来管理主题转换,它集成了一个编码不同症状和症状-疾病对之间关系的关系细化分支和一个用于主题决策的知识路由图分支。
在公共医疗对话数据集上的大量实验表明,本文提出的KR-DS模型明显优于目前最先进的方法(诊断准确率超过8%)。另外,本文从在线医学论坛收集了一个新的医疗数据集用于验证实验结果。
Introduction
1. 医学对话系统的难点
对话系统询问的症状应与潜在疾病相关,并与医学知识相一致。然而当前面向任务的对话系统高度依赖于复杂的belief tracker和纯数据驱动的学习, 由于这样的诊断缺乏医学知识的支撑所以它无法直接适用于自动诊断。
2. 现有的自动诊断系统和其缺点
Task-oriented Dialogue System for Automatic Diagnosis(2018 ACL) 率先构建了一个用于自动诊断的对话系统,将对话系统转换为马尔可夫决策过程,并通过reinforcement learning训练对话策略。
缺点:
这项工作只是利用DQN网络通过数据驱动学习来管理主题转换(确定应该询问哪些症状),而且结果复杂且重复。此外,本工作仅针对对话管理进行对话状态跟踪和策略学习,使用基于模板的自然语言处理模型,无法很好地匹配实际的自动诊断场景。
3. 本文的解决方法
本文提出了一个完整的端到端知识路由关系(KR-DS)自动诊断的对话系统,结合医学知识图谱和基于症状-疾病关系进行话题转换的对话管理(DM),并使其与NLU和NLG结合,如图1所示。
主要提出两个branch:knowledge-routed graph branch和 relational refinement branch。
一般来说,医生根据医学知识和诊断经验(medical knowledge and diagnosis experience)来确定疾病类型。受此启发,本文主要提出两个branch:knowledge-routed graph branch和 relational refinement branch。
Relational refinement branch 从历史诊断数据(historical iagnostic data)中学习不同症状和症状-疾病对之间(symptom-disease pairs)的关系,从而细化由basic DQN生成的粗略结果。
Knowledge-routed graph branch 通过基于条件概率的医学知识路由图谱的先验信息来帮助决策。
这两个分支通过knowledge guiding 和 relation encoding产生更加合理的决策结果。
4. 本文主要贡献:
本文进行关系建模(relation modeling)来处理相关的症状和疾病之间的关系,还进行了图谱推理(graph reasoning)来指导利用已有的医学知识进行策略学习。并且进一步介绍了一个面向终端任务的自动诊断对话系统和一个新的医疗对话系统数据集。
Adding: 医疗对话是如何进行的?
Proposed Work
本文提出的对话系统(krds)如图1所示,作为一个面向任务的对话系统,它包括NLU,DM,NLG。DM根据当前对话状态执行主题转换,agent学习通过询问症状来诊断疾病的任务,最后应告知患者疾病类型。此外本文也使用了用户模拟器来生成基于user goal的对话。
Policy Learning with KR-DQN
Natural Language Understanding
- 中文医疗诊断数据集
在该诊断系统中,假设有$M$种disease,$N$种symptom.- 4种agent action:
request+symptom, inform+disease, thanks, closing.
所以agent的action space的大小$D$可以表示为:
$D = num_{greeting}+M +N$. - 4种user action:
request+disease, confirm/deny/not-sure+symptom, thanks, closing - 4种symptom states:
positive, negative, not-sure and not mentioned ,在symptom vectors里表示为1, - 1, -2, 0
- 4种agent action:
- NLU和RL进行联合训练。
- 中文医疗诊断数据集
Policy Learning with KR-DQN
Basic DQN Branch.
先利用一个Basic DQN分支来生成一个粗略的动作结果,如公式1所示。MLP以状态$s_t$作为输入,输出一个粗糙的动作结果,先有一个粗略的DQN结果再对结果进行优化。Relational Refinement Branch
关系模块可以通过从一组其他元素的聚合信息来影响单个元素(例如,其他症状及疾病)。由于关系权重(relation weights)是由任务目标驱动自动学习的,因此关系模块可以对元素之间的依赖关系建模。因此本文设计了一个relational refinement module, 通过引进一个关系矩阵$R \epsilon R^{D\times{D}}$ 来表示所有动作间的依赖关系。
Basic DQN 预测的动作是$a_t^r$, 再乘以学习到的关系矩阵R得到新的action $a^f_t \epsilon R^D$, 该关系矩阵是不对称的,表示有向加权图。细化的动作向量$a^f_t$的每一个元素为初始预测动作$a_t^r$的加权和,其中权值表示元素之间的依赖关系.关系矩阵$R$由数据集的统计量进行条件概率的初始化。每个条目$R_{ij}$表示单位$x_j$以单位$x_i$为条件的概率。关系矩阵通过反向传播学习捕获动作之间的依赖关系。实验表明,这种初始化方法优于随机初始化,因为先验知识可以指导关系矩阵的学习。
Knowledge-routed Graph Branch
(与其他对话系统的不同之处:以user的self report 作为对话的基础)
设计思路:在拿到患者的自我报告时,医生首先要对患者可能存在几种候选疾病有一个大致的了解。随后,通过询问这些候选疾病(diease)的显著症状(symptoms),医生排除了其他候选病,直到确定诊断。
受此启发,本文设计了一个知识路由图谱(knowledge-routed graph)模块来模拟医生的思维过程。首先计算症状和疾病之间的条件概率作为有向医学知识图谱的权值,其中有两种类型的节点,如图2所示。
edges只存在于疾病和症状之间。每条edge都有两个weights,其中疾病到症状的条件概率为$P (dis|sym)$,症状到疾病的条件概率为$P (sym|dis)$. 在与病人交流的过程中,医生可能会有几种候选疾病。我们将候选疾病概率表示为与观察到的症状相对应的疾病概率。症状先验概率$P_{prior}(sym)$通过以下规则计算:- 对于提及到的症状,患有该症状设置为1,未患有该症状设置为-1
其他症状(不确定或未提及)的概率设置为从数据集中统计计算出来的先验概率。那么这些症状的概率 $P_{prior}(sym)$乘以条件概率$P(dis|sym)$得到疾病概率$P(dis)$,公式为:
考虑到候选疾病,医生经常根据他们的医学知识询问一些值得注意的症状来确诊, 因此由疾病概率$P(dis)$与条件概率矩阵$P (sym|dis)$相乘得到症状概率$P (sym)$:
将疾病概率$P(dis)$和症状概率$P (sym)$连接在一起,得到 knowledge-routed action的概率$a^k_t\epsilon D$。
有了这三个action $a_t^r, a_t^f , a_t^k$,然后把三个动作相加得到$a_t$, 作为KR-DQN在当前状态$s_t$下的最终结果。
Experiement
医疗对话数据集:
- MZ dataset: (Baidu拇指医生)710个user goal,66个症状,4类疾病。
- 本文提出的数据集 DX dataset: 527个对话, 41种症状, 5类疾病
评价指标:
- 使用正确诊断率作为对话的准确性。
- 匹配率,来评估症状对话系统请求的有效性,成功匹配意味着系统询问用户隐含存在的症状,否则就是失败匹配。
具体对话样例(与baseline的比较)
Sih conclusion
- 对话逻辑较为简单,主要是对知识建模,知识推理的过程。
- 可以将此方法尝试用于multi domain dialog。
- 利用知识图谱对知识建模值得借鉴。
- 编码不同症状和症状-疾病对之间的关系,Relation modeling也是值得借鉴的。