Task-oriented Dialogue System for Automatic Disease Diagnosis via Hierarchical RL翻译

本文主要是介绍Task-oriented Dialogue System for Automatic Disease Diagnosis via Hierarchical RL翻译,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

在本文中,我们专注于在面向任务的对话环境中使用加强学习(RL)方法来学习自动疾病诊断。与常规的RL任务不同,疾病诊断的动作空间(例如,症状)很大,尤其是当疾病数量增加时。但是,现有的方法针对该问题采用了一个flat RL策略,该策略通常在简单任务中效果表现很好,但在诸如疾病诊断之类的复杂情况下面临重大挑战。为此,我们提出将一个两级分层策略整合到对话策略学习中。高级策略由一个名为master的模型组成,该模型负责触发低级策略的模型,低级策略由若干症状检查器和疾病分类器组成。与现有系统相比,在真实世界数据集和合成数据集上的实验结果表明,我们的分层框架在疾病诊断方面的准确性更高。此外,数据集和代码都开源可用,https://github.com/nnbay/MeicalChatbot-HRL。

1.介绍


  随着电子健康记录(EHRS)系统的发展,研究员探索了用于自动诊断的不同机器学习方法。尽管已经有工作报道了针对各种疾病识别的令人印象深刻的结果,但它们主要依赖于EHR的构建,这会耗费大量人力。此外,针对一种疾病进行的有监督训练的模型很难迁移到另外一种疾病,因此,每种疾病都需要一个独立的EHR。
  为了减轻构建EHR的压力,研究人员引入了面向任务的对话系统,以自动从患者处请求症状,然后进行疾病诊断。他们将任务看作是马尔可夫决策过程(MDP),并采用了基于强化学习(RL)的方法来进行系统的策略学习。现有框架利用了一种 flat policy的方式,即将所有的疾病和症状都看作是动作。尽管基于RL的方法对症状的收集显示了积极的结果,但是当涉及到实际环境中数百种疾病时,flat policy的方式是不切实际的。
  通常,特定的疾病与某些症状有关。也就是说,患病的人通常会同时具有一些对应的症状。如图1所示,我们展示了疾病和症状之间的相关性。x轴代表症状,y轴是相关疾病的比例。我们可以轻松看到一些模式。换句话说,每种疾病都有一组相应的症状,不同症状组之间的重叠是有限的。这促使我们按医院部门的设置,将疾病分为不同的组,并设计症状获取和疾病诊断的分层结构。
  最近,分层强化学习(HRL)(通过训练多层策略以执行决策),已成功应用于不同的场景,包括课程推荐,视觉对话,关系提取等。目标任务的自然层次结构是通过手动或自动建模的。受这些研究的启发,我们探索了通过HRL探索疾病的聚类信息,以解决大型动作空间的问题。
  在本文中,我们将疾病分为若干组,并建立一个具有两级的分层对话系统,通过使用HRL方法进行自动疾病诊断。高级策略由一个名为master的模型组成,低级策略由若干worker和一个疾病分类器组成。master负责触发低级模型。每个worker负责查询与某些疾病有关的症状,而疾病分类器负责根据worker收集的信息进行最终诊断。所提出的框架模仿了来自不同部门的医生,一起对患者进行诊断。其中,每个worker的动作就像是来自特定部门的医生,而master的行为就像一个任命医生与该患者互动的委员会。当从worker那里收集的信息足够时,master将激活单独的疾病分类器以进行诊断。两个级别的模型共同训练,以更好地诊断疾病。我们构建了一个大型真实数据集和一个合成数据集,以评估我们的模型。实验结果表明,我们的分层框架的性能在两个数据集上都要优于目前最好的方法。

2.Hierarchical Reinforcement Learning Framework for Disease Diagnosis

在本节中,我们介绍了用于疾病诊断的分层强化学习框架。我们从flat policy设置开始,然后从两个级别介绍我们的分层结构策略。我们通过奖赏设计技术进一步提高模型的性能。

2.1 Reinforcement Learning Formulation for Disease Diagnosis

对于基于RL的自动诊断模型,agent的动作空间为 A = D ∪ S \mathcal A=D\cup S A=DS,其中 D D D是所有疾病的集合和 S S S是与这些疾病有关的所有症状的集合。在第 t t t轮时,给定状态 s t ∈ S s_t∈\mathcal S stS,agent根据其策略 a t 〜 π ( a ∣ s t ) a_t〜π(a|s_t) atπ(ast)来选择动作,并从环境(患者/用户)接收中间奖赏 r t = R ( s t , a t ) r_t=R(s_t,a_t) rt=R(st,at)。如果 a t ∈ S a_t\in S atS,那么agent会选择一个症状来询问患者或用户。然后,用户以 t r u e / f a l s e / u n k n o w n true/false/unknown true/false/unknown来响应agent,并表示为对应症状的3维one-hot向量 b ∈ R 3 b\in \mathbb R^3 bR3。如果 a t ∈ D a_t\in D atD,那么agent将对应疾病作为诊断结果告知用户,并且对话过程将因诊断的success/fail而被终止。状态被表示为 s t = [ b 1 T , b 2 T , ⋅ ⋅ ⋅ , b ∣ S ∣ T ] s_t=[b^T_1,b^T_2,···,b^T_{|S|}] st=[b1T,b2T,,bST],即,由每种症状的3维one-hot编码拼接得到,对于没被提及的症状则表示为 b = [ 0 , 0 , 0 ] b=[0,0,0] b=[0,0,0]
  agent的目标是找到最优策略,以便它可以获取到最大化的期望累积衰减奖赏 R t = ∑ t ′ = t T γ t ′ − t r t ′ R_t=\sum^T_{t'=t}γ^{t'-t}r'_t Rt=t=tTγttrt,其中 γ ∈ [ 0 , 1 ] γ∈[0,1] γ[0,1]是衰减因子, T T T是当前对话的最大轮次。 Q − v a l u e Q-value Qvalue函数是在状态 s s s时基于策略 π π π来选择动作 a a a的期望价值,如下所示:
Q π ( s , a ) = E [ R t ∣ s t = s , a t = a , π ] Q^{\pi}(s,a)=\mathbb E[R_t|s_t=s,a_t=a,\pi] Qπ(s,a)=E[Rtst=s,at=a,π]
  最优 Q − v a l u e Q-value Qvalue函数是所有可能策略中的最大Q值: Q ∗ ( s , a ) = m a x π Q π ( s , a ) Q^∗(s,a)=max_πQ^π(s,a) Q(s,a)=maxπQπ(s,a)。它遵循贝尔曼方程:
Q ∗ ( s , a ) = E s ′ [ r + γ m a x a ′ ∈ A Q ∗ ( s ′ , a ′ ) ∣ s , a ] Q^*(s,a)=\mathbb E_{s'}[r+\gamma~\mathop{max}\limits_{a'\in \mathcal A}Q^*(s',a')|s,a] Q(s,a)=Es[r+γ aAmaxQ(s,a)s,a]
  当且仅当对于每个状态和动作,满足 Q π ( s , a ) = Q ∗ ( s , a ) Q^π(s,a)=Q^∗(s,a) Qπ(s,a)=Q(s,a)时,策略π才是最优的。然后可以通过 π ( a ∣ s ) = a r g m a x a ∈ A Q ∗ ( s , a ) π(a|s)=argmax_{a∈\mathcal A}Q∗(s,a) π(as)=argmaxaAQ(s,a)确定性需要选择的动作。

2.2 Hierarchical Policy of Two Levels

在这里插入图片描述
  为了减少大型动作空间的问题,我们将上述RL形式扩展到具有两层策略的分层结构,以进行自动诊断。基于options框架,我们的框架的设计如图2所示。该框架中一共有五个组件:master,workers,disease classifier,internal critic和user simulator。
  具体而言,我们将 D D D中的所有疾病分为 h h h个子集 D 1 , D 2 , . . . , D h D_1,D_2,...,D_h D1,D2,...,Dh,其中 D 1 ∪ D 2 ∪ ⋅ ⋅ ⋅ ∪ D h = D D_1∪D_2∪···∪D_h=D D1D2Dh=D并且 D i ∩ D j = ∅ D_i∩D_j=∅ DiDj=。每个 D i D_i Di都与一组症状 S i ⊆ S S_i\subseteq S SiS有关,其症状与 D i D_i Di中的疾病有关。同时worker w i w^i wi负责从用户收集有关症状 S i S_i Si的信息。
  在第 t t t轮,master决定是从用户那里收集症状信息(挑选一个worker与用户交互若干轮),还是告知用户诊断结果(选择疾病分类器以输出预测的疾病)。图3中显示了模型之间相互作用的诊断过程。对于internal criti,它既负责将奖赏返回给worker,又要告诉被调用worker的子任务是否完成。此外,用户模拟器被用于与我们的模型进行交互,并返回外部奖赏。
在这里插入图片描述

2.2.1 Master

master的动作空间为 A m = { w i ∣ i = 1 , 2 , ⋅ ⋅ ⋅ , h } ∪ { d } \mathcal A^m=\{w^i|i=1,2,···,h\}∪\{d\} Am={wii=1,2,,h}{d}。动作 w i w^i wi表示激活worker w i w^i wi,而 d d d是一个原始动作,表示激活疾病分类器。在每个对话轮次 t t t中,master将对话状态 s t ∈ S s_t∈\mathcal S stS作为输入,并根据其策略 π m ( a t m ∣ s t ) π^m(a^m_t|s_t) πm(atmst)来选择动作 a t m ∈ A m a^m_t∈\mathcal A^m atmAm。外部奖赏 r t e r^e_t rte将从环境中获取并返回给的master。
  master的决策过程不是一个标准的MDP。master激活一个worker后,该worker将与用户交互N轮,直到子任务终止。然后,master才能采取新的行动并观察新的对话状态。正如[7]指出的那样,master的学习问题可以作为半马尔可夫决策过程(SMDP)提出,在这种过程中,在用户和所选worker交互期间返回的外部奖赏可以作为master的中间奖赏进行累积。也就是说,在采取动作 a t m a^m_t atm之后,可以将master的奖赏 r t m r^m_t rtm定义为:
r t m = { ∑ t ′ = 1 N γ t ′ r t + t ′ e , i f a t m = w i r t e , i f a t m = d r^m_t= \begin{cases} \sum^N_{t'=1}\gamma^{t'}r^e_{t+t'},& if~ a^m_t=w^i\\ r^e_t,& if~ a^m_t=d \end{cases} rtm={t=1Nγtrt+te,rte,if atm=wiif atm=d
其中 i = 1 , . . . , h i=1,...,h i=1,...,h r t e r^e_t rte是环境在第 t t t轮返回的外部奖赏, γ γ γ是master的衰减因子, N N N是worker的对话轮次。我们可以将master的Bellman方程写为如下所示:
Q m ( s , a m ) = r m + E { s ′ , a m ′ } [ γ N Q m ( s ′ , a m ′ ) ∣ s , a m , π m ] Q_m(s,a^m)=r^m+\mathbb E_{\{s',a^{m'}\}}[\gamma^NQ_m(s',a^{m'})|s,a^m,\pi^m] Qm(s,am)=rm+E{s,am}[γNQm(s,am)s,am,πm]
其中 s ′ s' s是master采取动作后观察到的对话状态, a m ′ a^{m'} am是状态为 s ′ s' s时的下一个动作。
  master的目标是通过SMDP来最大化外部奖赏,因此我们可以按以下方式写出master的损失函数:
L ( θ m ) = E s , a m , r m , s ′ ∼ B m [ ( y − Q m ( s , a m ; θ m ) ) 2 ] \mathcal L(\theta_m)=\mathbb E_{s,a^m,r^m,s'\sim \mathcal B^m}[(y-Q_m(s,a^m;\theta_m))^2] L(θm)=Es,am,rm,sBm[(yQm(s,am;θm))2]
其中 y = r m + γ N m a x a m ′ Q m ( s ′ , a m ′ ; θ m − ) y=r^m+γ^Nmax_{a^{m'}}Q_m(s',a^{m'};θ^-_m) y=rm+γNmaxamQm(s,am;θm) θ m θ_m θm是当前迭代的网络参数, θ m − θ^-_m θm是上一次迭代的网络参数,而 B m \mathcal B^m Bm是从master的固定缓冲区中采样的。

2.2.2 Worker

worker w i w^i wi对应于疾病 D i D_i Di和症状 S i S_i Si集合。worker w i w^i wi的动作空间为: A i w = { r e q u e s t ( s y m p t o m ) ∣ s y m p t o m ∈ S i } \mathcal A^w_i=\{request(symptom)|symptom∈S_i\} Aiw={request(symptom)symptomSi}。在第 t t t轮,如果调用了worker w i w^i wi,master的当前状态 s t s_t st将传递给worker w i w^i wi,然后worker w i w^i wi将从 s t s_t st中提取 s t i s^i_t sti并以 s t i s^i_t sti作为输入来生成动作 a t i ∈ A w i a^i_t∈\mathcal A^{w^i} atiAwi。状态提取函数如下所示:
s t i = E x t r a c t S t a t e ( s t , w i ) = [ b ( 1 ) i T , b ( 2 ) i T , . . . , b ( k i ) i T ] T s^i_t=ExtractState(s_t,w^i)=[b^{iT}_{(1)},b^{iT}_{(2)},...,b^{iT}_{(k_i)}]^T sti=ExtractState(st,wi)=[b(1)iT,b(2)iT,...,b(ki)iT]T
其中 b ( j ) i b^{i}_{(j)} b(j)i是症状 j j j的表示向量。
  在选择行动 a t i ∈ A w i a^i_t∈\mathcal A^{w^i} atiAwi之后,对话被更新为 s t + 1 s_{t+1} st+1,worker w i w^i wi将从 internal critic 模块中获得固定奖赏 r t i r^i_t rti。因此,worker的目的是最大化期望累积的内部衰减奖赏。worker w i w^i wi的损失函数可以写为:
L ( θ w i ) = E s i , a i , r i , s i ′ ∼ B i w [ ( y i − Q w i ( s i , a i ; θ w i ) ) 2 ] \mathcal L(\theta^i_w)=\mathbb E_{s^i,a^i,r^i,s^{i'}\sim \mathcal B^w_i}[(y_i-Q^i_w(s^i,a^i;\theta^i_w))^2] L(θwi)=Esi,ai,ri,siBiw[(yiQwi(si,ai;θwi))2]
其中 y i = r i + γ w m a x a i ′ Q w i ( s i ′ , a i ′ ; θ w i − ) y_i=r^i+γ_wmax_{a^{i'}} Q^i_w(s^{i'},a^{i'};θ^{i-}_w) yi=ri+γwmaxaiQwi(si,ai;θwi) γ w γ_w γw是worker的衰减因子, θ w i θ^i_w θwi是当前迭代时的网络参数, θ w i − θ^{i-}_w θwi是上一次迭代的网络参数, B i w \mathcal B^w_i Biw是worker w i w^i wi样本的固定长度缓冲区。

2.2.3 Disease Classifier

一旦疾病分类器被master激活,它将以主状态 s t s_t st作为输入,并输出向量 p ∈ R ∣ D ∣ \textbf p∈\mathbb R^{|D|} pRD,其表示了在所有疾病上的概率分布。具有最高概率的疾病将作为诊断结果返回给用户。此处使用两层多层感知器(MLP)进行疾病诊断。

2.2.4 Internal Critic

internal critic模块负责在第 t t t轮选择行动 a t i a^i_t ati后,为worker w i w^i wi生成一个固有的奖励 r t i r^i_t rti。如果工人要向用户请求症状,则 r t i r^i_t rti等于 + 1 +1 +1。如果worker w i w^i wi生成了重复的动作或子任务轮数到达 T s u b T^{sub} Tsub,则 r t i r^i_t rti − 1 -1 1。 否则, r t i r^i_t rti 0 0 0
  internal critic模块还负责判断worker的终止条件。在我们的任务中,当生成了重复的动作或子任务轮数到达 T s u b T^{sub} Tsub,worker被视为失败而终止。当用户对agent请求的症状做出确认响应时,工人被视为成功而终止。这意味着目前的worker通过收集足够的症状信息来完成子任务。

2.2.5 User Simulator

与[4]和[5]类似,我们使用用户模拟器与agent进行交互。在每个对话的开始,用户模拟器随机从训练池中采样了一个用户目标。被采样用户目标的所有显式症状均用于初始化会话。在对话过程中,根据某些规则,模拟器根据用户目标与agent进行交互。如果agent做出正确的诊断,则将作为成功终止对话。如果通知的疾病不正确或对话轮次达到最大轮次 T T T,则将作为失败终止对话。为了提高相互的效率,当系统选择重复动作时,对话将被终止。

2.3 Reward Shaping

实际上,一个患者患有的症状数要比症状集合S中的症状数少的多,这就导致了特征空间稀疏的问题。换句话说,agent很难找到用户真正遭受的症状。为了鼓励master选择一个可以发现更多正确症状的worker,我们采用与[12]类似的方法,使用奖赏设计方法为原始的外部奖赏增加一个额外的辅助奖励,同时保持最优的强化学习策略不变。
  从状态 s t s_t st s t + 1 s_{t+1} st+1的辅助奖赏函数被定义为 f ( s t , s t + 1 ) = γ ϕ ( s t + 1 ) − ϕ ( S t ) f(s_t,s_{t+1})=γ\phi(s_{t+1})-\phi(S_t) f(st,st+1)=γϕ(st+1)ϕ(St),其中 ϕ ( s ) \phi(s) ϕ(s)是潜在函数,可以定义为:
ϕ ( s ) = { λ × ∣ { j : b j = [ 1 , 0 , 0 ] } ∣ , i f s ∈ S / S ⊥ 0 , o t h e r w i s e \phi(s)= \begin{cases} \lambda\times |\{j:b_j=[1,0,0]\}|,& if ~ s\in \mathcal S/\mathcal S_{\perp}\\ 0,& otherwise \end{cases} ϕ(s)={λ×{j:bj=[1,0,0]},0,if sS/Sotherwise
其中 ϕ ( s ) \phi(s) ϕ(s)计算给定状态 s s s情况下的确认症状的数目, λ > 0 λ>0 λ>0是一个超参数,控制奖赏设计的大小, S ⊥ \mathcal S_{\perp} S是终止状态集。因此,master的奖励函数将变为 R t ϕ = r t + f ( s t , s t + 1 ) R^{\phi}_t=r_t+f(s_t,s_{t+1}) Rtϕ=rt+f(st,st+1)

2.4 Training

master策略 π m π^m πm和每个worker的策略 π w i π^{w^i} πwi均通过深度Q网络进行参数化。在DQN中,经常按照 ϵ \epsilon ϵ贪心策略选择动作。在我们的分层结构框架中,master和worker在训练时都采用 ϵ \epsilon ϵ贪心策略选择动作,测试时则使用贪心策略。在训练过程中,我们将 ( s t , a t m , r t m , s t + N ) (s_t,a^m_t,r^m_t,s_{t+N}) (st,atm,rtm,st+N)存储在 B m \mathcal B^m Bm中,并将 ( s t i , a t w , r t i , s t + 1 i ) (s^i_t,a^w_t,r^i_t,s^i_{t+1}) (sti,atw,rti,st+1i)存储在 B w i \mathcal B^{w^i} Bwi中。在每个训练步骤,我们都会执行经验回放,以分别更新master和worker的当前网络,而在经验回放过程中,目标网络是固定的。仅当一次经验回放结束时,目标网络才会更新(由当前网络替换)。在每个步骤中,当前网络将在训练集上进行评估,只有当当前网络的性能优于任何成功率的任何版本时,体验缓冲区才会刷新。因此,以前的迭代中生成的样品将从体验缓冲区中删除,并会加快训练过程。至于疾病分类器,在每10个时期对主人进行培训后,它将使用末端状态和相应的疾病标签进行更新。

3.Dataset

3.1 Real-world Dataset

3.2 Synthetic Dataset

这篇关于Task-oriented Dialogue System for Automatic Disease Diagnosis via Hierarchical RL翻译的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/361062

相关文章

CS162 Operating System-lecture2

A tread is suspended or no longer executing when its state’s not loaded in registers the point states is pointed at some other thread .so the thread that’s suspended is actually siting in memory and

Kimichat使用案例026:AI翻译英语PDF文档的3种方法

文章目录 一、介绍二、腾讯交互翻译TranSmart https://transmart.qq.com/三、沉浸式翻译三、谷歌网页翻译 一、介绍 短的文章,直接丢进kimichat、ChatGPT里面很快就可以翻译完成,而且效果很佳。但是,很长的PDF文档整篇需要翻译,怎么办呢? 二、腾讯交互翻译TranSmart https://transmart.qq.com/ 软件

Creating custom and compound Views in Android - Tutorial(翻译)

Creating custom and compound Views in Android - Tutorial(翻译) 译前的: 之前做了三篇学习笔记,从知乎上面看到了这篇英文的推荐,总的来说可以是一篇导读,没有相关的学习,看这篇,可以作为一个学习脉络导向;有相关的学习底子,可以作为一个基础夯实、思维理清。没想到一翻译就是四个多小时…英语渣,很多词句都不太准确,幸好有之前的学习基础打底…

在WinCE的C#编程中,需要静态调用C++的动态库,需要添加using System.Runtime.InteropServices

using System.Runtime.InteropServices;         [DllImport("Win32DLL.dll", EntryPoint = "WriteREG_SZToRegTCHAR")]         private static extern bool WriteREG_SZToRegTCHAR(int iFlag, string regKeyP

c语言使用system函数后台运行python脚本

最近需要在c工程的mian函数中使用system函数调用一个shell脚本,shell脚本是用来将某些系统配置通过sock通信发送给主核进程,但是可能出现偶发性的配置失败情况,经过分析可以大概断定是由于sock通信的时候,主核进程正在忙于其他事物导致未能在expire之前将消息接受并处理,导致消息丢失,而发送方无法感知系统是否成功加载配置。         所以,需要在脚本的最后

java system.in问题

public static final InputStream in system关于in属性的定义InputStream是一个抽象类。抽象类本身是没有对象的,怎么可能用IN 属性调用reaad()方法?system.in.read();方法的解释 我想具体的知道是怎么得到这个 InputStream对象的。system方法中并没有给出定义。既然IN对象没有创建,有怎么可能调用IN方法?说起

面试:关于word2vec的相关知识点Hierarchical Softmax和NegativeSampling

1、为什么需要Hierarchical Softmax和Negative Sampling 从输入层到隐含层需要一个维度为N×K的权重矩阵,从隐含层到输出层又需要一个维度为K×N的权重矩阵,学习权重可以用反向传播算法实现,每次迭代时将权重沿梯度更优的方向进行一小步更新。但是由于Softmax激活函数中存在归一化项的缘故,推导出来的迭代公式需要对词汇表中的所有单词进行遍历,使得每次迭代过程非常缓慢

JSP中System.out.println()与out.println()区别

out.println()输出到客户端。   在out.println()中,out是response的实例,是以response为对象进行流输出的,即将内容输出到客户端。如果在JSP页面中使用System.out.println(),在客户端只会输出一个空格。System.out.println()打印在控制台当中。    System.out.println()用的是标准输出流,这个是输出在

spring task 定时任务实现

一、引入spring相关jar包: 二、在web.xml中配置spring <listener><description>Spring监听器</description><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><conte

获取时间戳是使用System.currentTimeMillis()还是使用new Date().getTime()(阿里开发规范)?

1.阿里规范 在阿里的Java开发手册中强制要求使用System.currentTimeMillis() 2.为什么(源码详解) new Date().getTime()它实际上也是调用的System.currentTimeMillis(),源码分析。 这个fastTime是它的成员变量,在new Date()的时候就被赋值了。 扩展一下这个transient这个关键字,它是为了保护