多任务学习:Transformer based MultiHead Self-Attention Networks

作者:禅与计算机程序设计艺术

1.简介

孤岛模型被证明是单词生成模型的理想基础。马尔可夫链蒙特卡洛(MCMC)方法,在统计物理和材料科学领域均产生了重大影响。同样,在自然语言处理领域,深度学习技术也扮演着至关重要的角色,包括基于RNN、CNN、LSTM等的预训练语言模型、神经机器翻译、条件随机场、长短时记忆网络等,这些模型都取得了显著的效果。而在医疗问答系统中,自然语言理解和机器阅读理解组件的实现也逐渐成为关键任务,如何将两种学习模型结合起来,并对医疗数据进行有效处理,是关键之处。
Transformer-based Multi-Head Self-Attention Networks for Medical Question Answering System是一种基于Transformers模型的多任务学习框架。它使用多个Transformer层堆叠的方式,通过不同的任务掩码对模型进行适应,从而在问答匹配中同时兼顾信息抽取和自回归过程,达到最优性能。通过进一步调参和优化,可以提升模型的效果。
本文采用两步训练方式,首先训练问答匹配任务,再训练阅读理解任务。其中,医生专家和患者提问序列和答案序列分别作为输入,输出的是答案或问题对之间的相似性分数。阅读理解模块则负责从医生专家提问中抽取重要信息,提升医生专家自我描述能力。此外,本文还考虑到不同级别的需求对模型的学习目标的影响。
此外,本文作者团队还针对不同类型的问题提出了多种方案,如类别嵌入、单词嵌入、词向量组合、先验知识引入等,可以有效地改善模型的性能。
在实验评测方面,本文提供了四个具有代表性的任务,包括Hypothetical Reasoning、Clinical Fact Checking、Medical Triple Extraction、Multihop Question Answering,所有的任务都表现出了良好的成绩。同时,对比了其他经典模型和现有的深度学习框架,本文的方法也胜过了它们的成果。
本文的代码已开源。在作者的GitHub上有详细的代码注释和运行实例,有兴趣的读者可以参考。
感谢您的阅读!我们期待您的评论。

2.背景介绍

医疗问答系统的构成

近年来,医疗问答系统越来越受欢迎。目前市面上主要有三大主流厂商的产品线,分别是康希诺、爱德华兹、医如仕。康希诺产品线以问答提升系统(CQSIS)为代表,能够利用自然语言处理技术提高医患双方的沟通效率,帮助他们更好地解决医疗问题;爱德华兹医疗健康解决方案(AHTS),以“健康秘书”为代表,能够利用语音识别、图像识别、文本理解等技术,帮助医护人员及患者快速获得准确的医疗服务;而医如仕的问答系统能够通过知识图谱(KG)、计算机视觉等技术,对用户输入的病历记录进行结构化分析,并给出精准、符合病人的医疗建议。
医疗问答系统由三个组成部分构成:检索模块、理解模块和响应模块。检索模块负责根据用户的输入,找到对应的信息资源。理解模块负责把文本转换为向量表示,使得文本之间可以比较。响应模块则负责按照用户需要的形式,整合不同的信息源,返回给用户最相关的信息。医疗问答系统的开发一直是一个重点关注的研究方向。

医疗问答的任务类型

医疗问答系统共分为三种任务类型:
(1)信息检索:检索模块根据用户的问题,找到问题对应的信息文档或答案。
(2)自然语言理解:理解模块把自然语言文本转换为向量表示,用于计算文本间的相似性或关联度。
例如,对于一个问题“气管咳嗽”,其理解模块可以输出一个向量[0.2, -0.5,…, 0.7],该向量代表用户问题的语义特征,可以通过计算两个向量的余弦距离或欧氏距离来衡量其相似性。
(3)医疗决策支持:响应模块将检索到的信息、自然语言理解结果和相关背景知识结合起来,生成相应的答案或建议。
除此之外,还有包括生成式模型、检索模型、组合模型等其它任务类型,比如生成式模型旨在生成新颖的、真实可信的答案;检索模型旨在找到与用户的问题最相关的相关文档或答案;组合模型则融合了前两种类型的能力,既可以进行信息检索,又可以进行自然语言理解,提升了系统的准确率。
基于这些任务类型,我们可以设计如下的数据流动流程:

数据流动流程如上图所示,其中,红色虚线表示医疗问答系统各个模块之间的交互。左侧输入模块接收用户的问题,右侧输出模块返回相应的答案。中间绿色虚线表示医疗问答系统的三种任务类型。医疗决策支持任务的输入是检索模块的输出、自然语言理解模块的输出以及用户背景知识,输出是医疗建议。信息检索任务的输入是用户的问题,输出是相应的文档或答案;自然语言理解任务的输入是用户的问题,输出是问题的语义特征表示,用户可以使用特征表示来进行信息检索和医疗决策支持。

现有多任务学习方法

由于医疗问答系统的特殊性,传统的单任务学习模型可能无法有效地解决多任务学习问题。因此,为了充分利用数据并减少错误,需要考虑多个任务的相互作用。目前,多任务学习的主要方法有以下几种:
(1)基于特征共享的多任务学习:特征共享即不同任务共享相同的特征。通常,不同的任务都可以抽象成特征,如序列、标签、向量等。特征共享的基本思路是学习一个全局共享的编码器,该编码器能够捕捉输入数据的普遍特征,然后应用到所有任务中。然而,全局共享的编码器往往难以捕捉每个任务独有的特征,因为它不能从每个任务的输入中获取足够的信息。因此,特征共享的多任务学习仍然存在局限性。
(2)联合训练的多任务学习:联合训练指的是同时训练多个任务,并且利用任务之间相互影响的信号,增强模型的学习能力。常用的联合训练方法有对抗训练、深度模型平均等。联合训练的基本思路是在学习不同任务的过程中,将任务之间的相互关系纳入模型中。但是,联合训练的方法过于依赖大量标注数据,且难以处理海量数据的情况。
(3)共享底层参数的多任务学习:共享底层参数指的是不同任务共用相同的底层参数,通过权重共享的方式来增强模型的学习能力。共享底层参数的基本思路是将不同任务的模型输出映射到一个共同的空间,然后用相同的参数学习这个空间。然而,共享底层参数的方法容易导致过拟合,因此在实际场景中并不被广泛采用。
(4)联合学习的多任务学习:联合学习即同时学习不同任务的共同表达。常用的联合学习方法有多任务学习框架、混合编码器等。联合学习的基本思路是利用不同任务的共同特征,而不是单独学习每一个任务。然而,联合学习的方法需要耗费大量的时间才能收敛,且无法直接扩展到更复杂的任务。
(5)多任务学习框架:多任务学习框架是指直接使用神经网络结构来学习不同任务之间的关系。多任务学习框架的基本思路是建立一个统一的神经网络模型,并且使用不同的路径连接不同任务的特征。这种方法能够有效地利用不同任务之间的特征信息,但需要手动定义各个任务之间的交互路径,且学习过程较慢。
从上述五种多任务学习方法中,联合学习和多任务学习框架方法较为接近医疗问答系统的要求,可以有效地捕获不同任务的互动。因此,本文选择联合学习的方法来实现多任务学习。

3.基本概念术语说明

模型概览

多任务学习是一种计算机视觉、自然语言处理、生物信息学、计算机科学等多个领域的研究工作。它以多种任务共同学习的方式来提升最终的性能。医疗问答系统就是一个典型的多任务学习系统。本文使用Transformer-based Multi-Head Self-Attention Networks (TMSA) 来实现多任务学习。

Transformer模型

Transformer是Google Brain团队2017年推出的最新型机器翻译模型,它的特点是端到端的预训练+微调,可以在不同尺寸的数据上进行fine tuning,并且在很多NLP任务上都取得了很好的效果。在医疗问答系统中,使用Transformer模型能够有效地提取序列的语义信息,并获取到更多的特征,对自然语言理解和分类任务都有着极大的帮助。
TMSA中使用的Transformer模型结构如下图所示:

  1. Input Embedding Layer: 对输入序列的embedding。
  2. Positional Encoding: 通过位置编码来标记不同的位置。
  3. Transformer Encoder Layer: 由多个Encoder Layer组成。
  4. Output Layer: 将Transformer encoder的输出进行分类或回归。
      Transformer模型与其他模型最大的区别在于它的Self-Attention机制。它允许模型将注意力集中到输入序列中的某些特定区域。

self-attention mechanism

self-attention机制的作用是在编码过程中,不同位置的元素之间共享注意力,从而捕捉到不同元素之间的依赖关系。例如,在图像分类任务中,不同位置的像素之间具有高度相关性,因此使用self-attention机制能够提取到这样的特征。在自然语言理解中,同一个词的不同词性之间也存在一些联系,因此使用self-attention机制能够捕捉到这样的信息。而在医疗问答系统中,多个序列之间存在相互关联的关系,因此使用self-attention机制就能够捕捉到这些关系。
在TMSA中,使用Transformer的Encoder部分来实现self-attention mechanism,每个Encoder layer都会包含以下两个子层:

  1. multi-head attention: 包含K、Q、V矩阵,输入为前一层的输出。
  2. feed forward network: 使用两层全连接层来实现非线性变换,然后与multi-head attention输出做残差连接。

信息编码模块

信息编码模块用于编码医疗数据,包括编码器、解码器、数据标准化和词向量。编码器用于对医疗数据进行编码,将原始数据编码为固定长度的向量表示。解码器用于解码编码后的向量表示,将其转化为原始数据。数据标准化模块用于标准化医疗数据,消除不同量纲带来的影响。词向量模块用于将医疗数据中的词汇转换为向量表示。

编码器

编码器用于对原始数据进行编码,将原始数据编码为固定长度的向量表示。Encoder的输入是医疗数据,输出为经过编码的向量表示。在TMSA中,编码器使用Transformer模型来实现,Encoder Layer由多个multi-head attention、feed forward networks和layer normalization组成。如下图所示:

  1. multi-head attention:用于捕捉不同位置元素之间的依赖关系。
  2. feed forward network:实现非线性变换,提高模型的非线性鲁棒性。
  3. layer normalization:防止梯度爆炸或消失。

解码器

解码器用于解码编码后的向量表示,将其转化为原始数据。Decoder的输入是经过编码的向量表示,输出为原始数据。在TMSA中,解码器也是使用Transformer模型来实现,解码器包含一个输出层和一个位置编码层。如下图所示:

  1. output layer:用于分类或回归。
  2. positional encoding:用于标记不同的位置。

数据标准化模块

数据标准化模块用于标准化医疗数据,消除不同量纲带来的影响。例如,不同模态的数据的量纲往往不同,因此需要标准化之后才能对齐。在TMSA中,数据标准化模块包含两个层,如下图所示:

  1. MinMaxScaler:用于缩放数据到0~1之间。
  2. StandardScaler:用于标准化数据到0~1之间。

词向量模块

词向量模块用于将医疗数据中的词汇转换为向量表示。在TMSA中,使用预训练好的词向量,例如Word2Vec或者GloVe,将词汇转换为固定维度的向量表示。

任务掩码

任务掩码用于控制模型学习哪个任务。在TMSA中,任务掩码是一个大小与任务数量一致的数组,用来控制模型学习哪个任务。假设任务数量为t,那么任务掩码的大小为(batch_size, t),值为1或0。值为1的元素表示模型需要学习这个任务,值为0的元素表示模型不需要学习这个任务。如下图所示:

4.核心算法原理和具体操作步骤以及数学公式讲解

任务学习阶段

在任务学习阶段,模型要完成以下两个任务:
(1)自动学习任务间的相互影响:通过共享底层参数或联合训练的方式,让不同任务的模型能够相互影响,从而使模型在学习多个任务的时候更加有效。
(2)自动学习不同任务的共同表达:通过联合学习不同任务的共同表达,让模型能够提取到不同任务之间的共同特征,从而有效地学习整个任务。
为了同时完成这两个任务,在任务学习阶段,我们可以先用普通的MLP或CNN来做基线模型,然后对多任务模型进行finetuning,使模型能够学习到不同任务之间的共同表达。在TMSA中,我们通过将任务学习阶段和普通的训练阶段放在一起,形成一个统一的框架。

任务学习阶段概览

任务学习阶段的输入是医疗数据,包括患者提问、医生专家答案、医生专家提问、患者答案,任务学习阶段的输出是匹配分数。模型的输入包括:
(1)医生专家提问、患者提问。
(2)医生专家答案、患者答案。
(3)任务掩码,大小为(batch_size, task_num)。
模型的输出是匹配分数,是一个浮点数,范围在-1到1之间。
任务学习阶段的具体操作步骤如下:

(1)初始参数共享。模型的参数由基线模型(普通的MLP或CNN)给出。
(2)训练并fine tuning。将任务掩码设置为1,用医生专家提问、患者提问、医生专家答案、患者答案,作为模型的输入,训练模型。fine tuning结束后,将模型的参数更新到新的共享参数。
(3)训练结束,将模型的参数保存下来,作为下一次任务学习阶段的初始化参数。
(4)任务学习结束。将所有任务的模型得到的匹配分数求平均,作为任务学习阶段的输出。

具体算法流程

当模型收到一个新任务时,进行以下操作:

(1)加载已经训练好的基线模型。
(2)加载任务学习阶段的初始化参数。
(3)将任务掩码设置为1,对新任务进行训练。
(4)fine tuning结束后,将模型的参数更新到新的共享参数。
(5)将模型的参数保存下来,作为下一次任务学习阶段的初始化参数。
(6)完成所有任务的训练。将所有任务的模型得到的匹配分数求平均,作为任务学习阶段的输出。

阅读理解模块

阅读理解模块的输入是医疗专家提问序列,输出是问题的答案或问题对之间的相似性分数。模型的输入包括:
(1)医生专家提问序列。
(2)患者提问序列。
(3)患者答案序列。
(4)医生专家答案序列。
模型的输出是问题的答案或问题对之间的相似性分数,是一个浮点数,范围在-1到1之间。
阅读理解模块的具体操作步骤如下:

(1)编码医疗数据。对医生专家提问序列、患者提问序列、患者答案序列、医生专家答案序列进行编码。
(2)位置编码。对位置信息进行编码,使模型能够捕捉到不同位置的特征。
(3)计算相似性。使用不同的相似性函数来计算输入的两条序列之间的相似性分数。
(4)训练结束,将模型的参数保存下来,作为下一次阅读理解任务的初始化参数。
(5)测试阶段。对待预测的问题的答案或问题对的相似性分数进行预测。

测试阶段

当模型收到一个新任务时,进行以下操作:

(1)加载已经训练好的阅读理解模型。
(2)加载阅读理解模块的初始化参数。
(3)对新任务进行预测。将新任务的医生专家提问序列作为模型的输入,得到问题的答案或问题对之间的相似性分数。
(4)完成所有任务的预测。将所有任务的模型得到的匹配分数求平均,作为任务学习阶段的输出。

猜你喜欢

转载自blog.csdn.net/universsky2015/article/details/132014196
今日推荐