上一篇介绍了如何用无监督方法来训练sentence embedding,本文将介绍如何利用监督学习训练句子编码器从而获取sentence embedding,包括利用释义数据库PPDB、天然语言推理数据SNLI、以及综合利用监督训练数据和无监督训练数据。html
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 } \]git
论文实现了6种类型的编码函数\(g\),具体以下:github
论文经过大量实验来对比上述6种编码器的优劣,获得以下结论:web
2017年发表的论文Supervised Learning of Universal Sentence Representations from Natural Language Inference Data提出使用天然语言推理(natural language inference, NLI)数据集来学习通用的句子表示。选择NLI任务是由于NLI是一个high-level理解任务,涉及推理句子间的语义关系。模型总体架构以下:数据库
论文对比了7种不一样的句子编码器,包括:架构
GRU,取最后一个隐状态框架
LSTM,取最后一个隐状态ide
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
2018年发表的论文Universal Sentence Encoder在前人研究的基础上,综合利用无监督训练数据和有监督训练数据,进行多任务训练,从而学习一个通用的句子编码器。无监督训练数据包括问答(QA)型网页和论坛,Wikipedia, web news,有监督训练数据为SNLI。多任务模型设计以下图所示,其中灰色的encoder为共享参数的句子编码器。
论文对比了DAN和Transfomer这两种编码器。得出以下结论:
更详细的介绍能够参考论文做者的博客Google AI Blog (中文版)。
个人github仓库https://github.com/llhthinker/NLP-Papers包含了近年来深度学习在NLP各领域应用的优秀论文、代码资源以及论文笔记,欢迎你们star~