基于小样本学习的意图识别冷启动
发布时间:2019-05-12 23:14:53   来源:自考网作者丨黎槟华、耿瑞莹、李永彬、孙健
单位丨阿里巴巴智能服务事业部小蜜北京团队
随着深度学习和自然语言处理技术的发展,很多公司都在致力于发展人机对话系统,希望人和机器之间能够通过自然语言进行交互。笔者所在的阿里巴巴小蜜北京团队打造了一个智能对话开发平台——DialogStudio,以赋能第三方开发者来开发各自业务场景中的任务型对话,而其中一个重要功能就是对意图进行分类。
大量平台用户在创建一个新对话任务时,并没有大量标注数据,每个意图往往只有几个或十几个样本,那如何使用现有的少量样本构建意图分类模型呢面对这类冷启动问题,我们提出使用小样本学习(few-shotlearning)来解决对话平台中的意图识别冷启动问题。
关于few-shotlearning的系统知识和最新进展情况,请参考我们之前的综述,本文主要详细介绍我们的工作:首先总结前人工作提出了Encoder-Induction-Relation的Few-shotLearningFramework,然后融合capsulenetwork和dynamicrouting,提出了InductionNetwork,在两个小样本文本分类数据集上,都做到了state-of-the-art。
问题定义
人类非常擅长通过极少量的样本识别一类物体,比如小孩子只需要书中的一些图片就可以认识什么是“斑马”,什么是“犀牛”。在这种人类的快速学习能力的启发下,我们希望模型在大量类别中学会通过少量数据正确地分类后,对于新的类别,我们也只需要少量的样本就能快速学习,这就是Few-shotlearning要解决的问题。
Few-shotlearning是metalearning在监督学习领域的一种应用场景,我们training阶段将数据集按类别分解为不同的meta-task,去学习类别变化的情况下模型的泛化能力,在testing阶段,面对全新的类别以及每个类别仅有少量数据,不需要变动已有的模型,就可以完成分类。
形式化来说,few-shot的训练集中包含了大量的类别,每个类别中有少量样本。在训练阶段,会在训练集中随机抽取C个类别,每个类别K个样本(总共C×K个数据)构建一个meta-task,作为模型的支撑集(Supportset)输入;再从这C个类中抽取一批样本作为模型的预测对象(Queryset或者Batchset)。即要求模型从C×K个数据中学会如何区分这C个类别,这样的任务被称为C-wayK-shot问题。
训练过程中,每轮(episode)都会采样得到不同meta-task的,即包含了不同的类别组合,这种机制使得模型学会不同meta-task中的共性部分,比如,如何提取重要特征及比较样本相似等,忘掉meta-task中领域相关部分。通过这种学习机制学到的模型,在面对新的未见过的meta-task时,也能较好地进行分类。详情见Algorithm1。
Few-shotLearning框架
Fewshotlearning中较为热门的方法大多是metric-based,即通过类别中少量样本计算得到该类别的表示,然后再用某种metric方法计算得到最终的分类结果。下面简单的介绍现有的相关方法。
如图1所示,孪生网络(SiameseNetwork)[1]通过有监督的方式训练孪生网络来学习,然后重用网络所提取的特征进行one/few-shot学习。具体的网络是一个双路的神经网络,训练时,通过组合的方式构造不同的成对样本,输入网络进行训练,在最上层通过样本对的距离判断他们是否属于同一个类,并产生对应的概率分布。在预测阶段,孪生网络处理测试样本和支撑集之间每一个样本对,最终预测结果为支撑集上概率最高的类别。
▲图1.SiameseNetwork
相比孪生网络,匹配网络(MatchNetwork)[2]如图2所示,它为Support集和Batch集构建不同的编码器,最终分类器的输出是支撑集样本和query之间预测值的加权求和。该网络在不改变模型的前提下能对未知类别生成标签,同时提出了基于memory和attention的matchingnets,使得可以快速学习。
此外该文章还使整个任务遵循传统机器学习的一个原则,即训练和测试是要在同样条件下进行的,提出在训练的时候不断地让网络只看每一类的少量样本,这使得训练和测试的过程是一致的。这一点也使得后续文章都会基于这样的方式进行训练和测试。
▲图2.MatchNetwork
原型网络(PrototypeNetwork)[3]基于这样的想法:每个类别都存在一个原型表达,该类的原型是supportset在embedding空间中的均值。然后,分类问题变成在embedding空间中的最近邻。
如图3所示,c1、c2、c3分别是三个类别的均值中心(称Prototype),将测试样本x进行embedding后,与这3个中心进行距离计算,从而获得x的类别。
▲图3.PrototypeNetwork
文章采用在Bregman散度下的指数族分布的混合密度估计,文章在训练时采用相对测试时更多的类别数,即训练时每个episodes采用20个类(20way),而测试对在5个类(5way)中进行,其效果相对训练时也采用5way的提升了2.5个百分点。
前面介绍的几个网络结构在最终的距离度量上都使用了固定的度量方式,如cosine,欧式距离等,这种模型结构下所有的学习过程都发生在样本的embedding阶段。
而RelationNetwork[4]认为度量方式也是网络中非常重要的一环,需要对其进行建模,所以该网络不满足单一且固定的距离度量方式,而是训练一个网络来学习(例如CNN)距离的度量方式,在loss方面也有所改变,考虑到relationnetwork更多的关注relationscore,更像一种回归,而非0/1分类,所以使用了MSE取代了cross-entropy。
▲图4.RelationNetworks
回顾上述方法,从表1中可以看出,现有的方法在表示新的类别时只是通过简单对样本向量加和(RelationNet)或求平均(PrototypeNet),在这种情况下,由于自然语言的多样性,同一个类的不同表述只有一部分是和类别的内容相关,其他部分则随每个人的语言习惯而产生较大的变化,所以很多关键信息都会丢失在同一个类的不同表述产生的噪音之中。
比如,在运营商领域,同样是表述“换套餐”的意图,既可以说的简单明了:“我想换套餐”,也可以说的十分繁琐:“我想下个月换套餐,就是把原本不需要的套餐取消掉,换个便宜的…”。
如果只是对不同话术简单加和,那么和分类无关的信息就会产生累积,进而影响分类的效果。
▲表1.MetricBased方法对比
与大量样本的监督学习不同,噪音问题会在fewshotlearning中变得更为明显,因为在监督学习的大量样本下,某个类别的数据中关键信息和噪音的比例悬殊,模型容易区别哪些是噪声(例如:词或n-gram),哪些是有效信息(例如:业务关键词或句式),相反fewshotlearning仅有少量样本,很难用简单的机制来捕获这样的信息,因此显式建模类别表示的步骤是非常有意义的,具体的实现细节在下文会详细描述。
所以更好的学习方法应该是建模归纳类别特征的能力:忽略掉和业务无关的细节,从样本级别多种多样的表达之中总结出类别的语义表示。因此,我们需要站在一个更高的视角,去重构支撑集中不同样本的层次化语义表示,动态的从样本信息中归纳出类别特征。
在本工作中,我们提出了InductionNetwork,通过将动态路由算法与metalearning机制结合,显式建模了从少量样本中归纳出类别表示的能力。
首先,我们团队总结了metric-based方法的的共性,提出了Encoder-Induction-Relation的三级框架[5],如图5所示,Encoder模块用于获取每个样本的语义表示,可以使用典型的CNN、LSTM、Transformer等结构,Induction模块用于从支撑集的样本语义中归纳出类别特征,Relation模块用于度量query和类别之间的语义关系,进而完成分类。
如表1所示,之前的工作往往致力于学习不同的距离度量方式,而忽视了对样本表示到类别表示的建模。而在自然语言当中,由于每个人的语言习惯不同,同一个类别的不同表述往往有很多种,如果仅仅是简单加和或取平均来作为类别的表示,这些与分类无关的干扰信息就会累加,影响最终的效果,因此我们的工作显式的建模了从样本表示到类别表示这一能力。
▲图5.Encoder-Induction-Relation三级框架
模型
如图6所示,我们的模型基于Encoder-Induction-Relation的三级框架,其中Encoder模块使用基于自注意力的Bi-LSTM,Induction模块使用动态路由算法,Relation模块使用神经张量网络。
Encoder模块
本工作共使用bi-lstmself-attention建模句子级别的语义,输入句子的词向量矩阵,经编码得到句子级的语义表示e。
Induction模块
将支撑集中每个样本编码为样本向量以后,Induction模块将其归纳为类向量。
这一过程中我们将支撑集中的样本向量视为输入胶囊,经过一层dynamicrouting变换后,输出胶囊视为每个类的语义特征表示。
首先,是对所有样本做一次矩阵转换,意味着将样本级的语义空间转换到类别级的语义空间,在此过程中我们对支撑集中所有的样本向量使用同一个转换矩阵,如此对于任意规模的支撑集都能进行处理,也就意味着我们的模型可以应对any-wayany-shot的场景。
然后,通过dynamicrouting的方式过滤无关信息,提取类别特征。在每次dynamicrouting的迭代中,我们动态的调整上下两层之间的连接系数并确保其加和为1:
其中bi连接系数的逻辑值,在第一次迭代时初始化为0。对于给定的样本预测向量,每个候选类向量是 的加权求和:
然后使用一个非线性的squash函数来保证每个类向量的模长不超过1:
每次迭代的最后一步是通过“routingbyagreement”的方式来调节连接强度,如果产生的类候选向量和某样本预测向量之间有较大的点乘结果,则增大他们之间的连接强度,否则减小之。
通过这种动态路由的方式建模样本向量到类别向量的映射过程,能够有效过滤与分类无关的干扰信息,得到类别特征,详情见Algorithm2。
Relation模块
我们通过Induction模块得到支撑集中每个类别的类向量表示,通过Encoder模块得到Batchset中每个query的向量,接下来要做到就是衡量二者之间的相关性。Relation模块是典型的neuraltensorlayer,首先通过三维tensor建模每个类向量和query向量对之间的交互关系,然后使用全连接层得到关系打分。
目标函数
我们使用最小平方损失来训练我们的模型,将关系打分回归至真实标签:匹配的类和query对之间的打分趋向于1而不匹配的打分趋向于0。在每个episode中,给定支撑集S和Query集 ,损失函数定义如下:
我们使用梯度下降法更新Encoder、Induction和Relation三个模块的参数。训练完成之后,我们的模型在识别全新的类别时不需要任何finetune,因为在meta训练阶段已经赋予了模型足够的泛化能力,而且会随着模型的迭代不断累加。
实验
我们在两个few-shot文本分类的数据集上验证模型的效果,所有的实验使用tensorflow实现。
数据集
1.ARSC数据集由Yu等人[6]在NAACL2018提出,取自亚马逊多领域情感分类数据,该数据集包含23种亚马逊商品的评论数据,对于每一种商品,构建三个二分类任务,将其评论按分数分为5、4、2三档,每一档视为一个二分类任务,则产生23*3=69个task,然后取其中12个task(4*3)作为测试集,其余57个task作为训练集。
2.ODIC数据集来自阿里巴巴对话工厂平台的线上日志,用户会向平台提交多种不同的对话任务,和多种不同的意图,但是每种意图只有极少数的标注数据,这形成了一个典型的few-shotlearning任务,该数据集包含216个意图,其中159个用于训练,57个用于测试。
参数设置
预训练词向量使用300维glove词向量,LSTM隐层维度设为128,dynamicrouting的迭代器爱次数设为3,Relation模块的张量数h=100。我们在ARSC数据集上构建2-way5-shot的模型,在ODIC数据集上C和K在[5,10]中选取得到四组实验。
在每个episode中,除了为支撑集选取K个样本以外,我们还为采到的每个类再采20个样本作为queryset,也就是说在5-way5-shot场景下每次迭代训练都会有5*5+5*20=125个样本参与训练。
实验结果
在ARSC和ODIC数据集上实验结果如表2和表3所示。
▲表2.ARSC数据集实验结果
▲表3.ODIC数据集实验结果
如表1所示,我们将基于metric的方法都纳入Encoder-Induction-Relation框架中,可以发现之前的工作往往致力于学习不同的距离度量方式,而忽视了对样本表示到类别表示的建模。
而在自然语言当中,由于每个人的语言习惯不同,同一个类别的不同表述往往有很多种,如果仅仅是简单加和或取平均来作为类别的表示,这些与分类无关的干扰信息就会累加,影响最终的效果,因此我们的工作显式的建模了将样本表示归纳为类别表示的能力,并超过了之前的state-of-the-art的模型。
实验分析
我们进一步分析转置矩阵的影响和模型对encoder模块的影响。
转置矩阵的作用
在5-way10-shot场景下,我们用t-sne降维并可视化经过transformation转置矩阵前后支撑集样本的变化,如图所示,可以发现经过转置矩阵之后的支撑集样本向量可分性明显变好。这也证明了矩阵转置过程对于转换样本特征到类别特征的有效性。
Query可视化
我们发现InductionNetwork不仅能够生成质量更高的类向量,而且可以帮助encoder模块学习更好的样本语义表示。通过随机抽取5个测试集的类别,并将其中所有样本Encoder之后的向量可视化,我们发现InductionNetwork中学到的样本向量可分性明显高于RelationNetwork,这说明我们的Induction模块和Relation模块通过反向传播给了Encoder模块更为有效的信息,使其学到了更易于分类的样本表示。
结论
在本工作中,我们提出了InductionNetwork来解决少样本文本分类的问题。我们的模型重构支撑集样本的层次化语义表示,动态归纳出类别的特征表示。我们将动态路由算法和metalearning的框架结合,模拟了类人的归纳能力。实验结果表明我们的模型在不同的少样本分类数据集上都超过了当前的state-of-the-art模型。
参考文献
[1]Koch,Gregory,RichardZemel,andRuslanSalakhutdinov."Siameseneuralnetworksforone-shotimagerecognition."ICMLDeepLearningWorkshop.Vol.2.2015.
[2]OriolVinyals,CharlesBlundell,TimLillicrap,DaanWierstra,etal.Matchingnetworksforoneshotlearning.InAdvancesinNeuralInformationProcessingSystems,pages3630–3638,2016.
[3]Snell,Jake,KevinSwersky,andRichardZemel."Prototypicalnetworksforfew-shotlearning."AdvancesinNeuralInformationProcessingSystems.2017.
[4]Sung,Flood,etal."Learningtocompare:Relationnetworkforfew-shotlearning."ProceedingsoftheIEEEConferenceonComputerVisionandPatternRecognition.2018.
[5]GengR,LiB,LiY,etal.Few-ShotTextClassificationwithInductionNetwork[J].arXivpreprintarXiv:1902.10482,2019.
[6]Yu,Mo,etal."Diversefew-shottextclassificationwithmultiplemetrics."arXivpreprintarXiv:1805.07513
点击以下标题查看往期内容推荐:
- 近期必读的12篇「推荐系统」相关论文
- 图神经网络综述:模型与应用
- 后ResNet时代:SENet与SKNet
- F-Principle:初探理解深度学习不能做什么
- 万字综述之生成对抗网络(GAN)
- 让Keras更酷一些:分层的学习率和自由的梯度
- 小米拍照黑科技:基于NAS的图像超分辨率算法
- AAAI2019|基于区域分解集成的目标检测
- AAAI2019|基于分层强化学习的关系抽取
下一篇
推荐文章
-
自考生课外阅读什么类型的书好
2024-06-28  阅读:662 -
今日自考,祝愿所有考生考试顺利!
2021-10-16  阅读:607 -
自考机构招生乱象横生
2021-10-10  阅读:688 -
自考大数据揭秘!每年的自考报考人数超过你想象
2021-10-07  阅读:629
自考网版权所有 2024 粤ICP备16065536号