热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python实现胶囊网络_胶囊网络(CapsuleNetwork)在文本分类中的探索

作者丨杨敏单位丨中国科学院深圳先进技术研究院助理研究员研究方向丨自然语言处理文本建模方法大致可以分为两类:(1)忽略词序、对文本进行浅层语义建模(代表模型包括LDA&

20180409092706_664.jpg

作者丨杨敏

单位丨中国科学院深圳先进技术研究院助理研究员

研究方向丨自然语言处理

文本建模方法大致可以分为两类:(1) 忽略词序、对文本进行浅层语义建模 (代表模型包括 LDA,EarthMover’s distance等); (2) 考虑词序、对文本进行深层语义建模 (深度学习算法,代表模型包括 LSTM,CNN 等)。

在深度学习模型中,空间模式(spatial patterns)汇总在较低层,有助于表示更高层的概念(concepts)。例如,CNN 建立卷积特征检测器提取来自局部序列窗口的模式,并使用 max-pooling 来选择最明显的特征。然后,CNN 分层地提取不同层次的特征模式。

然而, CNN 在对空间信息进行建模时,需要对特征检测器进行复制,降低了模型的效率 。正如(Sabouret al, 2017)所论证的那样,这类方法所需复制的特征检测器的个数或所需的有标签训练数据的数量随数据维度呈指数增长。

另一方面, 空间不敏感的方法不可避免地受限于丰富的文本结构 (比如保存单词的位置信息、语义信息、语法结构等), 难以有效地进行编码且缺乏文本表达能力 。

最近,Hinton 老师等提出了胶囊网络(Capsule Network), 用神经元向量代替传统神经网络的单个神经元节点,以 Dynamic Routing 的方式去训练这种全新的神经网络,有效地改善了上述两类方法的缺点。

正如在人类的视觉系统的推理过程中,可以智能地对局部和整体(part-whole)的关系进行建模,自动地将学到的知识推广到不同的新场景中。

到目前为止,并没用工作将 Capsule Network 应用于自然语言处理中(e.g., 文本分类)。

我们针对 Capsule Network 在文本分类任务上的应用做了深入研究 。对于传统的分类问题,Capsule Network 取得了较好性能,我们在 6 个 benchmarks 上进行了实验,Capsule Network 在其中 4 个中取得了最好结果。

更重要的是, 在多标签迁移的任务上(fromsingle-label to multi-label text classification),Capsule Network 的性能远远地超过了 CNN 和 LSTM 。

我们的工作已经发表在 arXiv上,论文名为 Investigating Capsule Networks with Dynamic Routing for Text Classificationm ,更多细节可以查看论文进行参考。我们会在论文发表后公开源码。

论文模型

文本主要研究胶囊网络在文本分类任务上的应用,模型的结构图如下:

20180409092706_465.jpg

其中, 连续两个卷积层采用动态路由替换池化操作 。动态路由的具体细节如下:

20180409092706_109.jpg

在路由过程中,许多胶囊属于背景胶囊,它们和最终的类别胶囊没有关系,比如文本里的停用词、类别无关词等等。因此,我们提出 三种策略有减少背景或者噪音胶囊对网络的影响 。

1. Orphan 类别 :在胶囊网络的最后一层,我们引入 Orphan 类别,它可以捕捉一些背景知识,比如停用词。在视觉任务加入 Orphan 类别效果比较有限,因为图片的背景在训练和测试集里往往是多变的。然而,在文本任务,停用词比较一致,比如谓词和代词等。

2. Leaky-Softmax :除了在最后一层引入 Orphan 类别,中间的连续卷积层也需要引入去噪机制。对比 Orphan 类别,Leaky-Softmax 是一种轻量的去噪方法,它不需要额外的参数和计算量。

3. 路由参数修正 :传统的路由参数,通常用均与分布进行初始化,忽略了下层胶囊的概率。相反,我们把下层胶囊的概率当成路由参数的先验,改进路由过程。 在 ablation test 中,我们对改进的路由和原始路由方法进行对比,如下:

20180409092707_932.jpg

此外, 为了提升文本性能,我们引入了两种网络结构 ,具体如下:

20180409092707_78.jpg

实验

数据集:为了验证模型的有效性,我们在 6 个文本数据集上做测试,细节如下:

20180409092707_626.jpg

在实验中,我们和一些效果较好的文本分类算法进行了对比。由于本文的重点是研究 Capsule Network 相对已有分类算法(e.g.,LSTM, CNN)是否有提升,我们并没有与网络结构太过复杂的模型进行对比。实验结果如下:

20180409092707_690.jpg

此外, 我们重点进行了多标签迁移实验 。我们将 Rueter-21578 数据集中的单标签样本作为训练数据,分别在只包含多标签样本的测试数据集和标准测试数据集上进行测试。详细的数据统计以及实验结果如下图所示。

从表中我们可以看出, 当我们用单标签数据对模型进行训练,并在多标签数据上进行测试时,Capsule Network 的性能远远高于 LSTM、CNN 等 。

20180409092707_515.jpg

20180409092707_905.jpg

此外,我们还做了 case study 分析,发现路由参数可以表示胶囊的重要性,并对胶囊进行可视化(此处我们主要可视化 3-gram 的结果)。

具体来说,我们删除卷积胶囊层,将 Primary Capsule Layer 直接链接到 Fully-connected Capsule Layer,其中 Primary Capsule 代表了 N-gram 短语在 Capsule 里的形式,Capsule 之间的链接强度代表了每个 Primary Capsule 在本文类别中的重要性(比较类似并行注意力机制)。

由图我们可以看出,对于 Interest Rate 类别,months-interbank-rate 等 3-grams 起着重要作用。

20180409092707_578.jpg

致谢

感谢 jhui 和苏剑林,他们的文章启发了我们的工作。感谢 naturomics 和 gyang274 的开源代码,让我们的开发过程变得高效。

主要参考文献

[1] Dynamic Routing Between Capsules

[2] Matrix Capsules with Em Routing

本文由 AI 学术社区 PaperWeekly 精选推荐,社区目前已覆盖自然语言处理、计算机视觉、人工智能、机器学习、数据挖掘和信息检索等研究方向, 点击即刻加入社区 !

20180409092708_55.jpg

#投稿通道#

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击 「交流群」 ,小助手将把你带入 PaperWeekly 的交流群里。

微信公众号:PaperWeekly

新浪微博:@PaperWeekly



推荐阅读
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本文详细介绍了 Python 中 thread 和 threading 模块的使用方法,并提供了丰富的示例和解释。文章首发于 HURUWO 的博客小站,本平台进行同步备份发布。如遇图片加载失败或有任何疑问,欢迎前往原博客留言。 ... [详细]
  • MATLAB实现Sobel边缘检测算法
    图像边缘是指图像中灰度值发生显著变化的区域。Sobel算子是一种常用的边缘检测方法,通过计算图像灰度值的梯度来检测边缘。本文介绍了Sobel算子的基本原理,并提供了基于MATLAB的实现代码。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • 拼多多的崛起之路
    随着4G通信技术的发展,互联网产品从PC端转向移动端,图像传输速度更快、更清晰,智能设备的应用提升了用户体验。移动互联网的普及为拼多多的崛起提供了时代背景。 ... [详细]
  • 对于众多创业公司而言,选择小程序或小视频的发展方向至关重要。本文将深入分析小程序和小视频的特点、优势及局限,帮助创业者做出更明智的选择。 ... [详细]
  • 使用多项式拟合分析淘宝双11销售趋势
    根据天猫官方数据,2019年双11成交额达到2684亿元,再次刷新历史记录。本文通过多项式拟合方法,分析并预测未来几年的销售趋势。 ... [详细]
  • MySQL 5.7 学习指南:SQLyog 中的主键、列属性和数据类型
    本文介绍了 MySQL 5.7 中主键(Primary Key)和自增(Auto-Increment)的概念,以及如何在 SQLyog 中设置这些属性。同时,还探讨了数据类型的分类和选择,以及列属性的设置方法。 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在探讨如何在Android的TextView中实现多彩文字与多样化字体效果时,本文提供了一种不依赖HTML技术的解决方案。通过使用SpannableString和相关的Span类,开发者可以轻松地为文本添加丰富的样式和颜色,从而提升用户体验。文章详细介绍了实现过程中的关键步骤和技术细节,帮助开发者快速掌握这一技巧。 ... [详细]
  • 本文介绍了如何利用 Delphi 中的 IdTCPServer 和 IdTCPClient 控件实现高效的文件传输。这些控件在默认情况下采用阻塞模式,并且服务器端已经集成了多线程处理,能够支持任意大小的文件传输,无需担心数据包大小的限制。与传统的 ClientSocket 相比,Indy 控件提供了更为简洁和可靠的解决方案,特别适用于开发高性能的网络文件传输应用程序。 ... [详细]
  • 如何在C#中配置组合框的背景颜色? ... [详细]
  • 在 Vue 应用开发中,页面状态管理和跨页面数据传递是常见需求。本文将详细介绍 Vue Router 提供的两种有效方式,帮助开发者高效地实现页面间的数据交互与状态同步,同时分享一些最佳实践和注意事项。 ... [详细]
author-avatar
夜幕下的狂人_119
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有