少样本文本分类 InductionNet

点击下面卡片关注我呀,每天给你送来AI技术干货!

来自:朴素人工智能

前两篇关于meta learning的文章介绍了机器如何利用少量的现有类别的样本作为支持数据,并将一个新样本匹配为其中最接近的类别。

类比下,在你手头有很多不同动物的图片(比如猫狗牛羊兔等等),在当你拿到一张新的动物照片时,只需要去现有的图片库里比对,将其归类为长相最接近的动物,而无需靠记忆(参数)通过大量的各种动物的图片来学习动物特征,再来判断它的类别。

Meta Learning 1中提到了在实践中有2种不同的解决方案:metric-based和optimization-based。前面2篇推送已经详细介绍了metric-based的做法,本文继续介绍它。

Metric-based method,即基于度量的方法,分3步走:编码-归纳-求相似度。

  • 编码,即将图片/文本等等原始状态的数据样本support samples转为浮点数值的向量表示sample vectors,即 support samples -> sample vectors

  • 归纳,则是将一种类别的所有支持样本的向量表示进行归纳总结,如求平均、求和等等方式,得到该类别的向量class vector表示,即 sample vectors -> class vector

  • 求相似度就是将输入的新样本编码后的向量query vector和前面归纳的类别向量class vectors进行比对,得到对应类别的相似度得分,即 class vector × query vector -> relation score

文本分类领域,文章Few-Shot Text Classification with Induction Network提出了一种「归纳」的全新方法,不再是简单地将所有样本向量求和或者求平均,而是利用动态路由dynamic routing的方法得到类别向量。

1. 模型结构

InductionNet是由阿里团队提出的模型结构,用于少样本文本分类。模型结构有着清晰的三段式结构,包括:

  1. Encoder | 支持样本的编码

  2. Induction | 支持样本向量表示的归纳

  3. Relation | query vector与class vectors求相似度

InductionNet模型结构
1.1 Encoder模块

Encoder模块是比较常规的模块,即将文本内容转为浮点数编码。文章利用双向LSTM模型得到的特征拼接成 ,再经过线性变换和激活,得到权重 ,再乘上 向量求和得到加权的样本向量

1.2 Induction模块

Induction归纳模块,应用了动态路由dynamic routing)来计算带权重的类别向量(class vector),其中利用了Capsule Network胶囊网络来对样本向量进行「归纳」。

胶囊网络是Sabour等人于2017年正式在文章Dynamic Routing Between Capsules中正式提出的。相比于普通的神经网络的标量神经元,胶囊使用的是向量神经元,可以用于记录局部的信息在整体中的方位信息。

在人脸识别的应用中,如果调换人脸图像中五官的相对位置,比如把眼睛和嘴巴的位置互换一下,传统的卷积神经网络CNN仍旧会将其识别为人脸,虽然面部的特征是齐全的,但相对位置是错乱的。这样的结果显然是不可以接受的。Hinton提到CNN中常用的pooling池化就是一个「错误」,因为它可能会导致重要的信息丢失。比如两只眼睛一只鼻子还有一张嘴巴并不代表一张脸,因为它没有保留原始的方位信息。

而胶囊网络,最小计算单元不再是每个神经元的输出标量,而是一组神经元输出的向量,即用于表征局部特征,比如「眼睛胶囊」、「鼻子胶囊」、「嘴巴胶囊」等等这些局部特征。多层的胶囊网络会利用动态路由逐层将低级特征映射至高级的特征,比如前面的眼睛/鼻子/嘴巴特征映射至高层的「脸胶囊」这种高级特征,且保留不同特征之间的相对位置、方向等信息,即可以得到局部在整体中的方位,从而判断一张图片是否是正常的人脸。

动态路由,就是将低层胶囊按照特定权重加权映射到上层的胶囊的一种方法,而其核心,其实是一种带权重加权的mean pooling。在InductionNet中具体的步骤如下:

Dynamic Routing的伪代码流程

上面的流程中,输入为支持样本(support sample)的向量表示 ,其中 代表类别, 代表样本编号。具体可以分为以下5步:

  1. 矩阵转化

对向量 进行矩阵变换。如果在图像的层面考察,相当于进行了图像的平移、缩放、旋转等变换操作。

  1. 输入加权

对类别 的对于各个样本的耦合参数(coupling coefficients) 进行softmax操作,得到权重 ,即为类别 中每一个样本 的权重系数。 的初始化值为0。

  1. 加权求和

用前面计算的权重系数 对类别 中的所有样本加权求和得到未激活的类别向量(class vector)

  1. 非线性激活

对上面的中间类别向量进行非线性激活操作,这个操作被称为squash,意为「压缩」,保持原有的向量的方向,但将向量的长度控制到0-1之间。胶囊网络中用向量的长度来表征其是否包含某个特征的概率。

  1. 参数更新

这一步是在更新耦合系数 ,可以看到如果第 个样本如果本身占权重很大,权重的更新会强化其主导地位。


到这里,经过多轮的迭代上述的流程,最终得到的 就是代表类别 的向量。

InductionNet中的胶囊网络中capsule的数目为1,是其在这篇文章中的特例应用,用于归纳类别中多个样本的类别向量(class vector)。即利用动态路由的方法对各个样本向量 加权求平均

1.3 Relation模块

在得到类别向量 之后,将输入的query经过encoder模块得到 向量,再和各个 计算相关系数。

得到上面的相关性的向量之后,再计算得到相关性系数。

在得到query与各个类别向量 的相关性系数之后,再选择系数最大的 作为query的类别。

2. 总结

InductionNet介绍了一种根据知识库中的支持样本作为参考,将新的样本进行分类的做法。其中最重要的部分,就是利用动态路由的方法「归纳」各个支持样本的表征,得到类别的数值表征

文本是基于度量的元学习方法的最后一篇。本系列的下一篇将会带来基于优化的元学习方法,敬请期待。

说个正事哈

由于微信平台算法改版,公号内容将不再以时间排序展示,如果大家想第一时间看到我们的推送,强烈建议星标我们和给我们多点点【在看】。星标具体步骤为:

(1)点击页面最上方深度学习自然语言处理”,进入公众号主页。

(2)点击右上角的小点点,在弹出页面点击“设为星标”,就可以啦。

感谢支持,比心

投稿或交流学习,备注:昵称-学校(公司)-方向,进入DL&NLP交流群。

方向有很多:机器学习、深度学习,python,情感分析、意见挖掘、句法分析、机器翻译、人机对话、知识图谱、语音识别等。

记得备注呦

点击上面卡片,关注我呀,每天推送AI技术干货~

整理不易,还望给个在看!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值