返回介绍

数学基础

统计学习

深度学习

工具

Scala

二、Skip-Thought Vectors [2015]

发布于 2023-07-17 23:38:25 字数 47464 浏览 0 评论 0 收藏 0

  1. 近年来,已经开发了几种方法来学习将 word vector映射到 sentence vector ,包括 RNNCNN 等。所有这些方法产生的 sentence representation 都被传递给一个有监督的任务,并依赖于一个类别标签。因此,这些方法学习高质量的 sentence representation ,但只针对各自的任务进行调优。

    paragraph vector 是上述模型的一个替代方案,因为它可以通过引入 distributed sentence indicator 作为神经语言模型的一部分来学习无监督的 sentence representation 。缺点是在测试时,需要进行推理来计算一个新的paragraph vector

    在论文 《Skip-Thought Vectors》 中,作者抛弃了 composition method ,并考虑一个替代的损失函数。论文考虑以下问题:是否存在一个任务和相应的损失函数,使我们能够学习高度通用的 sentence representation ?论文通过提出一个学习高质量 sentence vector 的模型来证明这一点,而没有考虑到特定的监督任务。以 word vector 学习为灵感,作者提出了一个目标函数,将 《Efficient estimation of word representations in vector space》skip-gram 模型抽象到 sentence level 。也就是说,不是用一个单词来预测它的 surrounding context ,而是对一个句子进行编码来预测它的 surrounding sentence 。 因此,任何 composition operator 都可以被替换为 sentence encoder,只需要修改目标函数。模型如下图所示。论文称这个模型为 skip-thoughts ,而模型得到的向量被称为 skip-thought vector

    模型依赖于连续文本的训练语料库。论文选择使用一个大型的小说集合,即 BookCorpus 数据集来训练模型。这些是由尚未出版的作者写的免费书籍。该数据集有 16 种不同类型的书籍,例如,浪漫类(2865本)、幻想类(1479本)、科幻类(786本)、青少年类(430 本),等等。下表给出了 BookCorpus 的汇总统计。

    除了记叙文之外,BookCorpus 还包含对话、情感、以及人物之间的广泛互动。此外,有了足够大的集合,训练集就不会偏向于任何特定的领域或应用。下表显示了在 BookCorpus 数据集上训练的模型的句子的最近邻。这些结果表明,skip-thought vector 学会了准确捕获它们所编码的句子的语义和句法。

    作者在一个新提出的 setting 中评估了skip-thought vector :在学习了 skip-thoughts 之后,冻结模型并将编码器作为一个通用的特征提取器用于任意的任务。在论文的实验中,作者考虑了 8 个任务:语义相关性、转述检测paraphrase detectionimage-sentence ranking 、以及 5 个标准的 classification benchmark 。在这些实验中,论文抽取 skip-thought vector 并训练线性模型来直接评估这些 representation ,而不需要任何额外的微调。事实证明,skip-thoughts 产生了通用的 representation ,在所有考虑的任务中都表现得很鲁棒。

    这样的实验设置导致的一个困难是:难以构建一个足够大的 word vocabulary 来编码任意的句子。例如,Wikipedia 文章中的一个句子可能包含一些极不可能出现在 book vocabulary 中的名词。作者通过学习一种映射来解决这个问题,该映射将 word representation 从一个模型迁移到另一个模型。利用 word2vec representation ,作者学习从 word2vec 空间到编码器空间的线性映射。经过训练,任何出现在 word2vec 中的单词都可以在编码器的 word embedding 空间中得到一个向量。

2.1 模型

  1. 我们利用 encoder-decoder 框架来实现 skip-thoughts

    • 一个编码器将句子映射到一个 sentence vector

    • 一个解码器根据 sentence vector 来生成周围的句子。

    人们已经探索了一些 encoder-decoder ,如 ConvNet-RNNRNN-RNNLSTM-LSTM 。在我们的模型中,我们使用一个带有GRURNN encoder 和一个带有 conditional GRURNN decoder 。这种模型组合几乎与神经机器翻译中使用的 RNN encoder-decoder 相同。GRU 已经被证明在序列建模任务上与 LSTM 表现得一样好,而在概念上却更简单。

    2023 年最热门的、用于 NLPencoder-decoder 框架是 Transformer

  2. 给定关于句子的一个三元组(si1,si,si+1)$ (\mathbf s_{i-1}, \mathbf s_i, \mathbf s_{i+1}) $ ,其中si1$ \mathbf s_{i-1} $ 是si$ \mathbf s_i $ 位于文档中紧挨着的前一个句子,si1$ \mathbf s_{i-1} $ 是si$ \mathbf s_i $ 位于文档中紧挨着的后一个句子。令wit$ w_i^t $ 表示句子si$ \mathbf s_i $ 的第t$ t $ 个单词,xit$ \mathbf {\vec x}_i^t $ 为wit$ w_i^t $ 的 word embedding 。我们的模型包含三个部分:编码器、解码器、目标函数。

    • Encoder:令句子si$ \mathbf s_i $ 的单词序列为(wi1,,wiN)$ \left(w_i^1,\cdots,w_i^N\right) $ ,其中N$ N $ 为句子si$ \mathbf s_i $ 中的单词的数量。在每个 time step ,编码器产生一个隐状态hit$ \mathbf{\vec h}_i^t $ ,它可以被解释为单词序列(wi1,,wit)$ \left(w_i^1,\cdots,w_i^t\right) $ 的 representation。因此,隐状态hiN$ \mathbf{\vec h}_i^N $ 就代表完整句子的 representation

      为了编码一个句子,我们递归地执行如下方程(去掉下标i$ i $ ):

      (5)rt=σ(Wrxt+Urht1)zt=σ(Wzxt+Uzht1)h¯t=tanh(Wxt+U(rtht1))ht=(1zt)ht1+zth¯t

      其中:h¯t$ \bar{\mathbf{\vec h}}^t $ 为t$ t $ 时刻的 proposed state updatezt$ \mathbf{\vec z}^t $ 为 update gatert$ \mathbf{\vec r}^t $ 为 reset gate$ \odot $ 为逐元素乘法;σ()$ \sigma(\cdot) $ 为 sigmoid 函数;Wr,Ur,Wz,Uz,W,U$ \mathbf W_r,\mathbf U_r,\mathbf W_z, \mathbf U_z, \mathbf W, \mathbf U $ 为模型权重。

    • Decoder:解码器是一个神经语言模型,它以编码器的输出hi$ \mathbf{\vec h}_i $ 为条件来输出周围的句子。第一个解码器用于下一个句子si+1$ \mathbf s_{i+1} $ ,第二个解码器用于上一个句子si1$ \mathbf s_{i-1} $ 。每个解码器都使用单独的参数,但共享 vocabulary matrixV$ \mathbf V $ 。下面我们描述用于下一个句子si+1$ \mathbf s_{i+1} $ 的解码器(用于si1$ \mathbf s_{i-1} $ 的解码器也是类似的)。令hi+1d,t$ \mathbf{\vec h}_{i+1}^{d,t} $ 为t$ t $ 时刻解码器的隐状态,那么解码器递归地执行如下方程(去掉下标i+1$ i+1 $ ):

      (6)rd,t=σ(Wrdxt1+Urdhd,t1+Crhi)zd,t=σ(Wzdxt1+Uzdhd,t1+Czhi)h¯d,t=tanh(Wdxt1+Ud(rd,thd,t1)+Chi)hd,t=(1zd,t)hd,t1+zd,th¯d,t

      其中:hi=hiN$ \mathbf{\vec h}_i = \mathbf{\vec h}_i^{N} $ 为句子si$ \mathbf s_i $ 的 representation

      给定句子si$ \mathbf s_i $ 的 representationhi$ \mathbf{\vec h}_i $ 、以及给定句子si+1$ \mathbf s_{i+1} $ 的前面t1$ t-1 $ 个单词的条件下,预测句子si+1$ \mathbf s_{i+1} $ 的第t$ t $ 个单词为wi+1t$ w_{i+1}^t $ 的概率为:

      (7)P(wi+1tsi+1<t,hi)exp(vwi+1thi+1d,t)

      其中:si+1<t$ \mathbf s_{i+1}^{\lt t} $ 表示句子si+1$ \mathbf s_{i+1} $ 的前面t1$ t-1 $ 个单词组成的序列;vwi+1t$ \mathbf{\vec v}_{w_{i+1}^t} $ 为目标单词的 output word embedding ,它对应于V$ \mathbf V $ 的行。

      前一个句子si1$ \mathbf s_{i-1} $ 的解码器也是类似的。

    • Objective:给定三元组(si1,si,si+1)$ (\mathbf s_{i-1}, \mathbf s_i, \mathbf s_{i+1}) $ ,优化目标是:前面句子、后面句子的对数条件概率之和,即:

      (8)tlogP(wi+1tsi+1<t,hi)+tP(wi1tsi1<t,hi)

    这种方法是 Transformer-based 中典型的 encoder-decoder 方法,并非常类似于 GPT 预训练的思想。Skip-Thoughts 无法区分前一个句子、后一个句子。在 Transformer-based 方法中也仅仅考虑 next sentence generation

    可以通过编码器中添加一个 indicator token 来指示:是生成前一个句子还是后一个句子。使用时联合考虑这两种情况(考虑前一个句子和后一个句子)下的 representation

    GPT 预训练是根据文本顺序来依次预测,而并没有考虑逆序预测(即这里的P(wi1tsi1<t,hi)$ P\left(w_{i-1}^t\mid \mathbf s_{i-1}^{\lt t}, \mathbf{\vec h}_i\right) $ )。逆序预测是否有用?可以通过实验观察。读者认为,逆序预测可以使得模型能够具备更好的 “往回看” 的能力。

  3. vocabulary expansion:我们现在描述一下如何将我们编码器的 vocabulary 扩展到它在训练期间没有见过的单词。假设我们有一个 word vector 模型,如 word2vec。令Vw2v$ \mathcal V_{w2v} $ 为这些 word representationword embedding space。令Vrnn$ \mathcal V_{rnn} $ 为 RNN word embedding space 。我们假设Vw2v$ \mathcal V_{w2v} $ 的 vocabulary 要远远大于Vrnn$ \mathcal V_{rnn} $ 的 vocabulary 。我们的目标是构建一个映射f:Vw2vVrnn$ f: \mathcal V_{w2v}\rightarrow \mathcal V_{rnn} $ ,使得v=Wv$ \mathbf{\vec v}^\prime = \mathbf W\mathbf{\vec v} $ ,其中:vVw2v$ \mathbf {\vec v}\in \mathcal V_{w2v} $ ,vVrnn$ \mathbf{\vec v}^\prime\in \mathcal V_{rnn} $ ,W$ \mathbf W $ 为待学习的参数矩阵。

    我们学习f$ f $ 为一个线性映射来求解W$ \mathbf W $ 。现在Ww2v$ \mathcal W_{w2v} $ 中的任何单词都可以映射到Vrnn$ \mathcal V_{rnn} $ 中从而用于编码句子。

2.2 实验

略。(技术过于古老,不用花时间研究实验细节)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文