将句子表示为向量(下):基于监督学习的句子表示学习(sentence embedding)
1. 引言
上一篇介绍了如何用无监督方法来训练sentence embedding,本文将介绍如何利用监督学习训练句子编码器从而获取sentence embedding,包括利用释义数据库PPDB、自然语言推理数据SNLI、以及综合利用监督训练数据和无监督训练数据。
2. 基于释义数据库PPDB
2015发表的论文Towards universal paraphrastic sentence embeddings提出使用PPDB(the Paraphrase Database)来学习通用的sentence embeddings。论文模型的基本流程是输入mini-batch的释义对\(<x_1, x_2>\)集合\(X_b\),并通过对\(X_b\)中的句子进行采样得到\(x_1,x_2\)对应的负样本\(t_1, t_2\),将这四个句子通过编码器(编码函数)\(g\)得到句子编码,然后使用一种 margin-based loss进行优化,损失函数的基本思想是希望编码后的释义对\(<x_1,x_2>\)能够非常相近而非释义对\(<x_1,t_1>\)和\(<x_2,t_2>\)能够有不小于\(\delta\)的间距。对于全体训练数据\(X\),目标函数如下,其中\(\lambda_c,\lambda_w\)为正则化参数,\(W_w\)为word embedding参数,\(W_{w_{initial}}\) 为word embedding初始化矩阵,\(W_c\)是除了\(W_w\)后的其他参数。
\[
\min _ { W _ { c } , W _ { w } } \frac { 1 } { | X | } \left( \sum _ { \left\langle x _ { 1 } , x _ { 2 } \right\rangle \in X } \max \left( 0 , \delta - \cos \left( g \left( x _ { 1 } \right) , g \left( x _ { 2 } \right) \right) + \cos \left( g \left( x _ { 1 } \right) , g \left( t _ { 1 } \right) \right) \right)\right. \\ + \max \left( 0 , \delta - \cos \left( g \left( x _ { 1 } \right) , g \left( x _ { 2 } \right) \right) + \cos \left( g \left( x _ { 2 } \right) , g \left( t _ { 2 } \right) \right) \right) \bigg) \\ + \lambda _ { c } \left\| W _ { c } \right\| ^ { 2 } + \lambda _ { w } \left\| W _ { w _ { i n i t i a l } } - W _ { w } \right\| ^ { 2 }
\]
论文实现了6种类型的编码函数\(g\),具体如下:
- 词向量平均;
- 词向量平均后通过一个线性层;
- DAN模型:词向量平均后通过多层带非线性函数的全连接层;
- Simple RNN,取最后一个隐状态向量;
- identity-RNN (iRNN), 一种特殊的simple RNN,其weight矩阵初始化为单位矩阵,bias初始化为0向量,激活函数为恒等函数,最终的句子编码向量为最后一个隐状态向量除以句子中词的个数。当正则化程度很高时(模型参数几乎不更新),iRNN将变成模型1(词向量平均),不同的是iRNN能够考虑词序,有希望能够比模型1效果好;
- LSTM,取最后一个隐状态向量。
论文通过大量实验来对比上述6种编码器的优劣,得到如下结论:
- 对于无监督文本相似度任务,复杂的模型如LSTM在垂直领域数据集上表现更好,而对于开放域数据集,简单的模型如词向量平均比LSTM的效果更好;
- 对于句子相似度,句子蕴含以及情感分析这三种有监督任务,词向量平均模型在句子相似度和句子蕴含两个任务上表现比LSTM的效果更好,而情感分析任务LSTM表现非常不错。
3. 基于自然语言推理的InferSent模型
2017年发表的论文Supervised Learning of Universal Sentence Representations from Natural Language Inference Data提出使用自然语言推理(natural language inference, NLI)数据集来学习通用的句子表示。选择NLI任务是因为NLI是一个high-level理解任务,涉及推理句子间的语义关系。模型整体架构如下:

论文对比了7种不同的句子编码器,包括:
GRU,取最后一个隐状态
LSTM,取最后一个隐状态
BiGRU,前向GRU与反向GRU最后一个隐状态的连结
BiLSTM+mean pooling
BiLSTM+max pooling
Self-attentive network: bi-LSTM+inner Attention with multiple views,Inner Attention机制如下:
\[
\overline { h } _ { i } = \tanh \left( W h _ { i } + b _ { w } \right) \\
\alpha _ { i } = \frac { e ^ { \overline { h } _ { i } ^ { T } u _ { w } } } { \sum _ { i } e ^ { \overline { h } _ { i } ^ { T } u _ { w } } } \\
u = \sum _ { t } \alpha _ { i } h _ { i }
\]其中\(\{h_1,...,h_T\}\)为BiLSTM的隐状态输出,将它们输入到tanh变换层产生keys集合\(( \overline { h } _ { 1 } , \ldots , \overline { h } _ { T } )\),然后与可学习(可训练)的query向量(上下文向量)计算得到\(\{a_i\}\),然后进行加权得到句子表示\(u\),如下图所示:

论文具体是采用4个上下文向量\(u _ { w } ^ { 1 } , u _ { w } ^ { 2 } , u _ { w } ^ { 3 } , u _ { w } ^ { 4 }\)(multiple views),对应产生4个表示后进行连结作为最终的句子表示。
Hierarchical ConvNet,多层卷积(4层),每层卷积的maxpooling输出进行连结得到最终句子表示,模型结构如下图:

论文实验表明:BiLSTM+maxpooling作为编码器,训练数据为SNLI,能够训练出比Skip-Toughts和FastSent等无监督方法更好的sentences embedding,在2017年达到state-of-the-art,代码见https://github.com/facebookresearch/InferSent
4. 我全都要:Universal Sentence Encoder
2018年发表的论文Universal Sentence Encoder在前人研究的基础上,综合利用无监督训练数据和有监督训练数据,进行多任务训练,从而学习一个通用的句子编码器。无监督训练数据包括问答(QA)型网页和论坛,Wikipedia, web news,有监督训练数据为SNLI。多任务模型设计如下图所示,其中灰色的encoder为共享参数的句子编码器。

论文对比了DAN和Transfomer这两种编码器。得出如下结论:
- Transformer 模型在各种任务上的表现都优于简单的 DAN 模型,且在处理短句子时只稍慢一些。
- DAN模型也能具有很不错的表现,并且相较于Transformer模型,训练时间和内存的开销都更小,尤其是当句子较长时。
更详细的介绍可以参考论文作者的博客Google AI Blog (中文版)。
5. 总结
- 基于监督学习方法学习sentence embeddings可以归纳为两个步骤:
- 第一步选择监督训练数据,设计相应的包含句子编码器Encoder的模型框架;
- 第二步选择(设计)具体的句子编码器,包括DAN、基于LSTM、基于CNN和Transformer等。
- Sentence Embedding的质量往往由训练数据和Encoder共同决定。Encoder不一定是越复杂越好,需要依据下游任务、计算资源、时间开销等多方面因素综合考虑。
我的github仓库https://github.com/llhthinker/NLP-Papers包含了近年来深度学习在NLP各领域应用的优秀论文、代码资源以及论文笔记,欢迎大家star~
References
- Wieting et al. - 2015 - Towards universal paraphrastic sentence embeddings
- Conneau et al. - 2017 - Supervised Learning of Universal Sentence Representations from Natural Language Inference Data
- Cer et al. - 2018 - Universal Sentence Encoder
- Google AI - 2018 - Advances in Semantic Textual Similarity
将句子表示为向量(下):基于监督学习的句子表示学习(sentence embedding)的更多相关文章
- 大数据下基于Tensorflow框架的深度学习示例教程
近几年,信息时代的快速发展产生了海量数据,诞生了无数前沿的大数据技术与应用.在当今大数据时代的产业界,商业决策日益基于数据的分析作出.当数据膨胀到一定规模时,基于机器学习对海量复杂数据的分析更能产生较 ...
- 基于Doc2vec训练句子向量
目录 一.Doc2vec原理 二.代码实现 三.总结 一.Doc2vec原理 前文总结了Word2vec训练词向量的细节,讲解了一个词是如何通过word2vec模型训练出唯一的向量来表示的.那接着 ...
- 将句子表示为向量(上):无监督句子表示学习(sentence embedding)
1. 引言 word embedding技术如word2vec,glove等已经广泛应用于NLP,极大地推动了NLP的发展.既然词可以embedding,句子也应该可以(其实,万物皆可embeddin ...
- NLP之基于Transformer的句子翻译
Transformer 目录 Transformer 1.理论 1.1 Model Structure 1.2 Multi-Head Attention & Scaled Dot-Produc ...
- .NET环境下基于RBAC的访问控制
.NET环境下基于RBAC的访问控制 Access Control of Application Based on RBAC model in .NET Environment 摘 要:本文从目前信息 ...
- 【应用笔记】【AN004】VB环境下基于RS-485的4-20mA电流采集
版本:第一版作者:周新稳 杨帅 日期:20160226 =========================== 本资料高清PDF 下载: http://pan.baidu.com/s/1c1uuhLQ ...
- 在Jena框架下基于MySQL数据库实现本体的存取操作
在Jena框架下基于MySQL数据库实现本体的存取操作 转自:http://blog.csdn.net/jtz_mpp/article/details/6224311 最近在做一个基于本体的管理系统. ...
- windows下基于sublime text3的nodejs环境搭建
第一步:先安装sublime text3.详细教程可自行百度,这边不具体介绍了. 第二步.安装nodejs插件,有两种方式 第一种方式:直接下载https://github.com/tanepiper ...
- 在XP下基于VHD版XP 2003 win7制作的RAMOS心得
在XP下基于VHD版win7制作的RAMOS心得1.用DiskGenius创建1.85G的VHD固定磁盘文件,以win7prosen.vhd为例,然后进行分区格式化,格式化时启用NTFS压缩.2.为了 ...
随机推荐
- C# event线程安全
突然想到有关C#中使用event特性时关于线程安全的问题,以前虽然有遵从“复制引用+null判断”的模式(盲目地),但没有深入了解和思考. 为之查询了资料和实验,对此有了进一步的理解. 一般event ...
- 【php增删改查实例】第五节 - easyUI的基本使用
1. 列表组件 datagrid 1.1 创建一个grid.html <html> <head> <meta charset="utf-8" /> ...
- tkinter 对键盘和鼠标事件的处理
鼠标事件 <ButtonPress-n> <Button-n> <n> 鼠标按钮n被按下,n为1左键,2中键,3右键 <ButtonRelease-n> ...
- EJB开发第二期---开发具有本地接口的无状态Bean
一.EJB中的bean 1.1 EJB中bean分类 会话bean(session bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过jdbc直接操作数据库,但大多数情况下都 ...
- C# Language Specification 5.0 (翻译)第三章 基本概念
应用程序启动 拥有进入点(entry point)的程序集称应用程序(application).当运行一应用程序时,将创建一新应用程序域(application domain).同一个应用程序可在同一 ...
- Flume的简单理解
由于没具体研究过画图,以前在公司每天都用Excel,所以很多图画都是画在了Excel上再剪切的,看着可能不太舒服. 先来看一下数据走向: 这样我们就大致了解了flume是干嘛的,在什么位置了. Flu ...
- npm install的几种命令形式区别
转自未来与传说.jigetage 我们在使用 npm install 安装模块的时候 ,一般会使用下面这几种命令形式: npm install moduleName # 安装模块到项目目录下 npm ...
- 服装盘点机PDA在服装行业颜色尺码仓库条码高效管理应用
服装行业的商品管理的特点是需要管理颜色和尺码 具体逻辑就是: 什么商品,什么颜色,什么尺码,入库多少个? 什么商品,什么颜色,什么尺码,出库多少个? 什么商品,什么颜色,什么尺码,还有库存多少个? 如 ...
- [转载] JVM 内存结构
转载自:http://gityuan.com/2015/10/17/java-memory/
- PAT甲题题解-1056. Mice and Rice (25)-模拟题
有n个老鼠,第一行给出n个老鼠的重量,第二行给出他们的顺序.1.每一轮分成若干组,每组m个老鼠,不能整除的多余的作为最后一组.2.每组重量最大的进入下一轮.让你给出每只老鼠最后的排名.很简单,用两个数 ...