Skip-Thought Vectors

已经分享过多种无监督的word level表示模型,和多种有监督的sentence level表示模型,以及与word2vec模型类似的paragraph vector模型。无监督模型比有监督模型带给大家更多的惊喜,本文将会分享一篇sentence level的无监督表示模型,模型中用到了当下流行的seq2seq框架。paper的题目是Skip-Thought Vectors,作者是来自多伦多大学的Ryan Kiros博士。

word level表示已经有太多无监督模型,然而sentence level表示大多仍停留在监督模型的范畴内,比如之前分享过的RNN、CNN、RCNN等模型来表示一个句子,主要是针对具体的分类任务来构造句子向量,仅适用于本任务,不具有一般性。之前,Tomas Mikolov(word2vec的作者)提出了一种类似于Word2vec的paragraph vector,也是一种无监督模型,但并不能很好地扩展来用。

本文旨在提出一个通用的无监督句子表示模型,借鉴了word2vec中skip-gram模型,通过一句话来预测这句话的上一句和下一句。本文的模型被称为skip-thoughts,生成的向量称为skip-thought vector。模型采用了当下流行的端到端框架,通过搜集了大量的小说作为训练数据集,将得到的模型中encoder部分作为feature extractor,可以给任意句子生成vector。

当然,这里存在一个很大的问题是,如果测试数据中有未登录词,如何表示这个未登录词?针对这个问题,本文提出了一种词汇表扩展的方法来解决这个问题。

首先,介绍本文的模型,参考下图来理解:

模型分为两个部分,一个是encoder,一个是两个decoder,分别decode出当前句子的上一句和下一句。

encoder-decoder框架已经介绍过太多次了,这里不再赘述。本文采用了GRU-RNN作为encoder和decoder,encoder部分的最后一个词的hidden state作为decoder的输入来生成词。这里用的是最简单的网络结构,并没有考虑复杂的多层网络、双向网络等提升效果。decoder部分也只是一个考虑了encoder last hidden state的语言模型,并无其他特殊之处,只是有两个decoder,是一个one maps two的情况,但计算方法一样。模型中的目标函数也是两个部分,一个来自于预测下一句,一个来自于预测上一句。如下式:

其次,介绍下本文的另一大亮点,词汇表扩展。

借鉴于Tomas Mikolov的一篇文章Exploiting Similarities among Languages for Machine Translation中解决机器翻译missing words问题的思路,对本文训练集产生的词汇表V(RNN)进行了扩展,具体的思路可参考Mikolov的文章,达到的效果是建立了大数据集下V(Word2Vec)和本文V(RNN)之间的映射,V(Word2Vec)的规模远远大于V(RNN),本文中V(RNN)包括了20000个词,V(Word2Vec)包括了930000多个词,成功地解决了这一问题,使得本文提出的无监督模型有大的应用价值。文中给出了一个例子,如下图:

当然,词汇表扩展有很多方法,比如不同词,而用字符来作为基本元素,这种思路在语言模型中也常常被用到。

最后,作者在Semantic relateness、Paraphrase detection、Image-sentence ranking和classification任务中进行了测试和对比,验证了本文模型的效果。最后还给出了在多个数据集上对句子聚类的可视化结果,以及用decoder部分生成一段话。

关于未来的改进,作者有几点想法:

  • 用更深的encoder和decoder网络。
  • 用更大的窗口,而不仅仅预测上一句和下一句。
  • 试着将sentence替换成paragraph。
  • 换一些别的encoder来做,比如用CNN。

每个想法都可能会是未来另一篇牛paper的思路。

看过了很多的decoder,有char-level,word-level和sentence-level,我有一个小小的想法是,到底哪种level生成的paragraph更出色呢?速度方面,不必比较了,sentence-level一定要快一些,但是质量方面呢?文中最后给出了一个本文模型生成的demo,如下:

来源:paperweekly

原文链接

时间: 2024-10-03 08:56:52

Skip-Thought Vectors的相关文章

awesome-nlp

  awesome-nlp  A curated list of resources dedicated to Natural Language Processing Maintainers - Keon Kim, Martin Park Please read the contribution guidelines before contributing. Please feel free to pull requests, or email Martin Park (sp3005@nyu.e

Skip 方法

  在读取 TextStream 文件时跳过指定个数的字符. object.Skip(characters) 参数 object 必选项.总是某个 TextStream 对象的名称. characters 必选项.在读取文件时要跳过的字符个数. 说明 被跳过的字符即被放弃. 下面的示例演示了Skip 方法的用法: function SkipDemo(){   var fso, f, r;   var ForReading = 1, ForWriting = 2;   fso = new Acti

关于Oracle 9i 跳跃式索引扫描(Index Skip Scan)的小测试

oracle|索引 在Oracle9i中我们知道能够使用跳跃式索引扫描(Index Skip Scan).然而,能利用跳跃式索引扫描的情况其实是有些限制的. 从Oracle的文档中我们可以找到这样的话: Index Skip ScansIndex skip scans improve index scans by nonprefix columns. Often, scanning index blocks is faster than scanning table data blocks.Sk

跳跃式索引(Skip Scan Index)浅析

在Oracle9i中,有一个新的特性:跳跃式索引(Skip Scan Index).当表有一个复合索引,而在查询中有除了索引中第一列的其他列作为条件,并且优化器模式为CBO,这时候查询计划就有可能使用到SS.此外,还可以通过使用提示index_ss(CBO下)来强制使用SS. 举例: SQL> create table test1 (a number, b char(10), c varchar2(10)); Table created. SQL> create index test_idx1

Computing Tangent Space Basis Vectors for an Arbitrary Mesh

为一个任意网格模型计算其切线空间的基本向量(即切线空间的T B N三个向量) Modern bump mapping (also known as normal mapping) requires that tangent plane basis vectors be calculated for each vertex in a mesh. This article presents the theory behind the computation of per-vertex tangent

Vectors For All (almost)

本文讲的是Vectors For All (almost), 经常阅读 Styling Android 的读者会知道我有多么喜欢用 VectorDrawable 和 AnimatedVectorDrawable .直到我在写这篇文章之前我还在等待 VectorDrawableCompat (译者注:之前大家以为官方会出兼容 Support ,后来官方使用了另外一种方案,详细内容可戳该链接),所以目前矢量图只能够在 API 21+ (Lollipop) 上面使用.然而,Android Studio

Vectors For All (最终篇)【译】

本文讲的是Vectors For All (最终篇)[译], 这是关注 Android 的 VectorDrawable 系列博文中的第三篇,之前的文章是Vectors For All (almost),在此之前的另外一篇是Vectors For All (slight return).这两篇文章向我们展示了 VectorDrawable 的可用性有了很大的提升,但是对 VectorDrawableCompat 的热切等待一直落空.直到2016年2月24号,Google 发布了 Android

MySQL8.0新特性随笔: NOWAIT以及SKIP LOCKED

MySQL8.0版本中对SELECT..FOR UPDATE进行了扩展,实现了新的子句NOWAIT 及 SKIP LOCKED ( WL#3597 及 WL #8919). 本文简单的试玩一把,并看看是怎么实现的.最后介绍下AliSQL中存在的类似功能 测试 如新语法的字面含义,NOWAIT表示当无法获取到锁时直接返回错误,而不是等待:SKIP LOCKED表示忽略那些已经被其他session占有行锁的记录. --session 1 mysql> use test Database change

跳跃表Skip List的原理和实现

二分查找和AVL树查找 二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存.这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了. 如果需要的是一个能够进行二分查找,又能快速添加和删除元素的数据结构,首先就是二叉查找树,二叉查找树在最坏情况下可能变成一个链表, 于是就出现了平衡二叉树,根据平衡的算法不同有AVL树,B-Tree,B+Tree,红黑树等,但是AVL树实现起来比较复杂, 平衡操作较难理解,这时候就可以用SkipList跳跃表结构. 什

Tip or Skip 激发购物原始欲望

近日,据相关媒体报道,人人都是天生购物狂,普通人和购物狂之前的不同的只是在于是否激发了这种天性.一款名为Tip or Skip的应用就能够激发我们最原始的购物欲望,让我们欲罢不能. Tip or Skip是一款社区型的购物信息分享应用.所有的用户可以直接使用自己的Facebook帐号登录,他们在上传自己满意的商品图片的同时可以浏览朋友们上传的图片.在浏览这些新奇商品的同时,用户可以选择将其标记保存(Tip)或跳过(Skip).如此一来,手指轻轻动一动,足不出户就可以和朋友一起逛街啦.这一应用同时