七、变种

7.1 Item2Vec

  1. 在传统的推荐算法中,协同过滤 CF 算法是利用 item2item 关系来计算商品中的相似性:通过user-item 矩阵来计算 item1item2 的相似性。

    受到 word2vec 算法的启发,可以将用户在一个 session 内浏览的商品集合作为一个句子,每个商品作为一个 word

    出现在同一个集合内的 商品对 视作正类,

  2. 设商品集合为 七、变种 - 图1 ,所有商品的全集为 七、变种 - 图2

    定义目标函数为:

    七、变种 - 图3

    类似 word2vec,采用负采样和降采样,使用 SGD 学习模型则得到每个商品的embedding

    一旦得到了商品的 embedding,两两计算 cosine 即可得到 item 之间的相似度。下图为 Item2VecSVD 分别得到的词向量经过 t-SNE 可视化的结果哦。

    七、变种 - 图4

7.2 sentence2vec

  1. 获得sentence 的表达的最简单的方式是:基于句子中词的embedding 来取简单平均或者加权平均,权重为单词的 tf-idf 值。

    研究表明这种简单的方式足以提供一个良好的sentence embedding

7.2.1 Skip-Thought

  1. 论文《Skip-Thought Vectors》 根据 word2vec 的思想提出了一种通用的、分布式的 sentence embedding 方法:通过当前 sentence 来预测前一个 sentence 和下一个 sentence 。最终语义和语法属性一致的 sentence 被映射到相似的向量表示。

  2. 设句子 七、变种 - 图5七、变种 - 图6 为句子长度。 七、变种 - 图7 为句子 七、变种 - 图8 的第 七、变种 - 图9 个单词,其embedding七、变种 - 图10 。给定一组句子 七、变种 - 图11 ,模型分为编码 encoder、解码 dcoder 部分。

    七、变种 - 图12

    • encoder:对 七、变种 - 图13 进行编码,得到其上下文向量:

      七、变种 - 图14

      这里采用 GRU,也可以采用其它编码方案(LSTM,双向 GRU 等)。

    • decoder:根据输入序列的上下文向量分别解码两次,然后分别和 七、变种 - 图15七、变种 - 图16 比较。

      两个 decoder 拥有不同的参数,除了 七、变种 - 图17 共享之外。

      • 第一个 decoder

        七、变种 - 图18

      • 第二个 decoder

        七、变种 - 图19

      • 整体损失函数为:

        七、变种 - 图20

        其中 七、变种 - 图21 为句子 七、变种 - 图22七、变种 - 图23 个位置单词 七、变种 - 图24 的输出概率。

    • 模型将训练集的所有句子组合加入训练,在测试时将句子所有单词的 embedding 输入到 encoder 即可得到句子的 embedding

  3. 如果测试时某些单词未在训练时见过(未登录词),则可以通过一些广义词向量来解决。如:假设 七、变种 - 图25 为更大规模的、通过 word2vec 训练得到的词向量, 七、变种 - 图26 为本模型训练得到的词向量。我们学习线性映射 七、变种 - 图27 ,然后对于模型的未登录词 七、变种 - 图28,得到模型的词向量 :七、变种 - 图29

    改进思路:用更深的 encoderdecoder 网络;用更大的窗口,而不仅仅是预测前后两句;用其它的 encoder ,如引入 attention

7.2.2 Quick Thought

  1. 论文《An efficient framework for learning sentence representations》 提出了一种新的sentence vector 方式Quick thought Vector,相比较《Skip-Thought Vectors》 而言它的训练速度更快。

  2. Quick thought Vector 通过分类器来区分句子的前后句和其它句子,模型结构如下图所示。这将生成问题视为从所有可能的句子中选择一个句子,因此可以看作是对生成问题的判别近似。

    七、变种 - 图30

    • 判别模型仅仅会捕捉 sentence embedding 之间的相对关系(是否相近),因此可忽略每个句子与embedding 无关的信息。
    • 生成模型会捕捉sentence embedding 的绝对位置,因此生成模型约束更强,同时可能捕获了与embeding 无关的很多信息。
  3. 设句子 七、变种 - 图31七、变种 - 图32 为句子长度。 七、变种 - 图33 为句子 七、变种 - 图34 的第 七、变种 - 图35 个单词,其embedding七、变种 - 图36

    令句子 七、变种 - 图37 附近窗口大小 七、变种 - 图38 的句子集合为 七、变种 - 图39、句子 七、变种 - 图40 的候选样本句子集合为 七、变种 - 图41 ,其中满足 七、变种 - 图42 。即: 七、变种 - 图43 不仅包含了句子 七、变种 - 图44 附近的句子,也包含了很多其它句子。

    使用编码器 七、变种 - 图45七、变种 - 图46 编码、编码器 七、变种 - 图47 对候选句子 七、变种 - 图48 编码,模型预测候选句子 七、变种 - 图49 的概率:

    七、变种 - 图50

    模型训练的目标函数为:尽可能的识别所有的近邻句子:

    七、变种 - 图51

    其中:

    • 七、变种 - 图52 为一个打分函数(或者分类器),在论文中 七、变种 - 图53 简单定义为 七、变种 - 图54 。如此简单的分类器是为了迫使编码器学习到更加丰富的sentence representation
    • 编码器 七、变种 - 图55七、变种 - 图56 使用不同的参数,这是借鉴了word2vec 的结构:中心词通过 七、变种 - 图57 编码(输入向量)、目标词经过 七、变种 - 图58 映射(输出向量),二者点积得到得分。
    • 在测试时给定句子 七、变种 - 图59,其表示是两个编码器输出的拼接:七、变种 - 图60

7.2.3 InferSent

  1. 论文《Supervised learning of universal sentence representations from natural language inference data》 通过监督学习来获取句子的reprensentation,该模型被称作 InferSent 。相比 Skip Thought Vector,该模型的训练速度要快得多并且效果更好。

    • 论文采用 Stanford Natural Language Inference Datasets(简称 SNLI),包含了57万个人类产生的句子对。每个句子对已被人工标记,标签为:蕴含emtailment、矛盾 contradiction 、中立 neutral 。模型。论文假设 SNLI 的作用类似 ImageNet ,它学到的句子表达能捕获通用的sentence feature

    • 模型有两种训练方式:输入的两个句子采用 encoder 分别独立编码,然后获得独立的 sentence embedding ;采用类似 attention 的机制来同时对两个句子进行编码,分别获得各自句子的 sentence embedding

      考虑到论文的目标是获取句子的通用表示,因此采用方式一的结构,并且两个 encoder 参数共享。

  2. 给定一对句子 七、变种 - 图61,假设其编码结果分别为 七、变种 - 图62 。有三种方式来提取这两个句子的关系:向量拼接 七、变种 - 图63,元素级相乘 七、变种 - 图64 ,元素级距离:七、变种 - 图65

    提取结果作为一个 softmax 输出单元的输入,最终得到3个类别的输出概率。

    七、变种 - 图66

  3. 作者研究了7种不同的编码架构:LSTMGRUBiGRU(采用前向、后向最后一个隐单元的拼接)、BiLSTM-mean(所有隐向量的均值)、BiLSTM-max(所有隐向量的最大池化)、BiLSTM + self-attention 、分层卷积模型。最终 BiLSTM-max 编码器在 SNLI 和迁移任务上表现效果最好。

    有些编码器如BiLSTM+self-attentionNLI 上比 BiLSTM-mean 表现更好,但是在迁移任务中反而表现更差。这是因为 attention 机制捕捉到了更多的关于具体数据集的信息,导致学到的sentence representation 是有偏的(而不是通用的)。

    七、变种 - 图67

  4. 作者在多种任务上比较了 InferSent 模型和其它模型的结果,下表中下划线表示迁移学习中最佳的模型,† 表示本论文提出的模型。

    虽然 Skip Thought Vector 模型的表现效果也比较好,但是该模型是在非常大的有序句子集上训练。如 SkitpThought-LN 训练了 6400万句子,训练时间一个月。而InferSent 模型只需要训练 57 万句子,训练时间不到一天(单个 GPU )。

    七、变种 - 图68

7.2.4 多任务联合 sentence-vec

  1. 论文《LEARNING GENERAL PURPOSE DISTRIBUTED SENTENCE REPRESENTATIONS VIA LARGE SCALE MULTITASK LEARNING》 提出了一个简单、有效的通用句子representation 多任务学习框架,它在多个弱相关任务中共享同一个 sentence encoder

    其背后的思想是:具体任务训练得到的句子表达编码了具体任务的信息,因此是有偏的。如果在多个弱相关任务中训练,则这种偏差会相互减弱,因此能得到更通用的句子表达。

  2. 设句子 七、变种 - 图69七、变种 - 图70 为句子长度。 七、变种 - 图71 为句子 七、变种 - 图72 的第 七、变种 - 图73 个单词,其embedding七、变种 - 图74 。设句子 七、变种 - 图75 对应的输出为 七、变种 - 图76

    • encoder 为一个双向 GRU,没有采用 attention 机制。因为一旦采用 attention 机制,随着 attention 权重的不同(该权重与具体任务有关)句子 七、变种 - 图77 的表达就不同,因此无法给出通用表达。

      句子 七、变种 - 图78 的表达为 七、变种 - 图79 ,其中 七、变种 - 图80七、变种 - 图81 分别表示两个方向的最后一个隐向量。

    • decoder 为一个单向 GRU,其中 七、变种 - 图82 作为decoder 每个时间步的输入。

      七、变种 - 图83

    • 论文采用一对多模型:同一个双向 GRU 将不同任务的输入句子编码成摘要向量 七、变种 - 图84 ,然后不同任务采用不同 GRU 来解码。

    七、变种 - 图85

  3. 根据论文《A model of inductive bias learning》 的结论:

    • 共同学习多个相关任务会产生良好的泛化,这种泛化效果与每个任务的训练样本规模相关。
    • 在足够多的训练任务中学习到的偏差有助于来自相同场景下的新任务的学习。

    因此论文中选择的多任务满足的条件是:任务的多样性足够多、每个任务的训练数据集足够大。

  4. 多个任务训练有两种任务切换方式:

    • 在每个任务之间周期性的均匀切换。

    • 在每个任务之间周期性的按比例切换,其中比例因子就是任务的训练集的大小。

      此时训练集越大的任务其参数更新的次数越多。

    论文中选择后一种方式切换:

    • 输入:

      • 七、变种 - 图86 个任务
      • 所有任务共享的encoder 七、变种 - 图87
      • 每个任务各自的 decoder七、变种 - 图88
      • 任务参数 七、变种 - 图89,其中 七、变种 - 图90 为第 七、变种 - 图91 个任务的参数
      • 每个任务的切换概率 七、变种 - 图92 ,其中 七、变种 - 图93
      • 每个任务的训练集 七、变种 - 图94
      • 总的损失函数 七、变种 - 图95
    • 任务切换算法步骤:

      • 以概率分布 七、变种 - 图96 采样一个任务 七、变种 - 图97
      • 从训练集 七、变种 - 图98 中采样一个样本 七、变种 - 图99
      • 通过编码器编码:七、变种 - 图100
      • 获取预测值:七、变种 - 图101
      • 更新参数:七、变种 - 图102
  5. 下表中是一组模型对十种任务的句子进行评估,评估方式为:将模型输出的句子 representation 经过简单的线性模型来输出结果。其中:

    • STN, Fr, De, NLI, L, 2L, STP & Par 表示联合了 skip-thought nextFrench translation, German translation, natural language inference, large model (隐单元的维度更高), 2-layer large model (隐单元维度更高,同时encoder 有多层),skip-thought previousparsing 等任务。
    • 最后一列给出了我们的模型相比 Infersent 在所有任务上的平均提升。

    实验结果表明:

    • 相比较于其它迁移学习模型,我们的模型在大多数任务上取得最佳效果。
    • 增加更多的任务可以提高模型的迁移学习能力(表格中 +L 的行)。
    • 增加编码器的隐单元数量和层数也可以提高模型的迁移学习能力 (表格中 +2L 的行)。

    七、变种 - 图103

  6. 下表中比较了我们的迁移学习方法和几种使用注意力机制的、复杂的监督学习方法。

    通过将 sentence representation 作为简单的 MLP 模型的输入,我们的方法就能产生一个足够竞争力的结果。而且我们的模型使用原始训练集的一个很小比例就可以取得很好的效果。

    七、变种 - 图104

7.2.5 Universal Sentence Encoder

  1. 论文 《Universal Sentence Encoder》 提出了两种encoder 模型的变体,它们可以在准确性和计算资源之间平衡。

    • Transformer 编码器:模型复杂度更高,准确率更高,但是资源消耗更大。

    • DAN:deep averaging network 编码器:模型复杂度更低,资源消耗更低,但是准确率稍低。

      DAN 编码器首先将wordbi-gramembedding 取均值,然后送入一个 DNN 网络中来计算 sentence embedding

  2. Transformer 编码器和 DAN 编码器采用多任务训练的方式。其中包含了:

    • 类似 Skip Thougt vector 的无监督学习任务,但是将该模型的 LSTM 编码器替换为 Transformer 编码器/DAN 编码器。

      其训练语料来自 wiki 百科语料、网络新闻语料、论坛的讨论语料、网页上的问答语料。

    • 包含了解析好的对话数据的对话input-response 任务。

    • 有监督的文本分类任务。

      其训练语料来自 Stanford Natural Language Inference:SNLI

  3. 已训练好的 Transformer 编码器和 DAN 编码器可以在Tensorflow hub 上访问。

    一个简单的使用方式为:

    1. import tensorflow_hub as hub
    2. embed = hub.Module("https://tfhub.dev/google/universal-sentence-encoder/1")
    3. embedding = embed(["The quick brown fox jumps over the lazy dog."])

    模型输入一个英文字符串,输出该字符串的固定维度的 embedding

    输出 embedding 可以直接使用,如计算句子的语义相似度;也可以在大型任务中进行微调。

    七、变种 - 图105

  4. 迁移学习的效果判断是在一组任务上进行。其中包括:

    • MR:电影评论片段的情感分析(5个情感等级)
    • CR:客户评论的情感挖掘
    • SUBI:电影评论和情节摘要中的情感分析
    • MPQA:来自新闻的短句的观点极性分析
    • TREC:来自TREC 的细粒度问题分类
    • SST:二元短语情感分类
    • STS Benchmark:文本语义相似度(结果与人工判定的相似文本对进行比较)
    • Word Embedding Association Test:WEAT :词向量偏差测试,用于评估模型的偏差。

    对于分类任务,将 DANTransformer 的句子编码送入与任务相关的简单神经网络中(如:卷积神经网络CNN 或者另外一个 DAN )。对于语义相似度任务,将 DANTransformer 的句子编码直接计算arccos 角度:

    七、变种 - 图106

    模型的表现如下表所示。其中:

    • USE_T 为采用 Transformer 编码器的通用句子编码模型,USE_D 为采用 DAN 编码器的通用句子编码模型。

    • w2v w.e. 表示采用了word2ve 预训练模型,lrn w.e 表示随机初始化词向量。

      这两种方式是结合了sentence embeddingword embedding ,将这两个 embedding 拼接在一起。其区别在于:

      • w2v e.e.word embedding 来自于预训练的 word2vec skip-gram 模型并在训练中微调。
      • lrn w.eword embedding 是随机初始化的,并在训练中调整。

    七、变种 - 图107

  5. 迁移效果可以在少量训练样本上获得更好的效果。

    SST 任务上(全量训练样本 67.3k),采用Transformer 编码器的通用句子编码模型仅仅使用 1k 个训练样本就能够得到很好的效果。

    七、变种 - 图108

  6. 采用Transformer 编码器的通用句子编码模型的计算复杂度为句子长度 七、变种 - 图109七、变种 - 图110 复杂度,内存消耗也是 七、变种 - 图111 复杂度。

    采用 DAN 编码器的通用句子编码模型的复杂度分别为 七、变种 - 图112七、变种 - 图113 。但是当句子长度很短时,由于 DAN 编码器需要考虑 unigrambigramDAN 的内存消耗可能会超过 Transformer 的内存消耗。

    下图中 b 表示 batch size

    七、变种 - 图114

7.3 doc2vec

  1. 论文 《Distributed Representations of Sentences and Documents》 提出了无监督的Paragraph Vector 算法,用于从可变长度的文本(如:句子sentence、段落paragraph、文档doc )中学习固定维度的representation 。它不仅可以编码句子,还可以编码一个段落、整篇文档。

  2. Paragraph Vector 算法将每个段落映射到一个唯一的向量,由矩阵 七、变种 - 图115 中的一行表示。

    有两种段落向量模型:PV-DMPV-BOW ,如下图所示。其中 七、变种 - 图116 为训练集段落数量,七、变种 - 图117 为词汇表的大小,七、变种 - 图118Paragaph Vector 维度,七、变种 - 图119 为词向量维度,七、变种 - 图120 为窗口大小。

    • Distributed Memory Model of Paragraph Vectors:PV-DM 模型:类似 word2vec CBOW 思想,联合利用段落向量和词向量来预测窗口单词的下一个单词。其中联合可以采用两个向量的平均或者拼接。

      • 每个样本取自段落的一个滑动窗口,通过段落向量和窗口内单词预测窗口的下一个单词。
      • 段落向量在该段落生成的所有样本中共享,但是不在段落之间共享。
      • 在该模型中段落 id 被认为是另类的单词,它起到记忆的作用,用于记住当前上下文的主旨。
      • 该模型同时也可以生成词向量,词向量在段落之间共享。
    • Distributed Bag of Words version of Paragraph Vector: PV-DBOW 模型:通过段落向量来预测窗口内的单词。

      • 每个样本取自段落的一个滑动窗口,通过段落向量来预测窗口内的单词。
      • 段落向量在该段落生成的所有样本中共享,但是不在段落之间共享。
      • 该模型无法生成词向量,不需要存储词向量矩阵 七、变种 - 图121,因此模型更小。
    • 对于测试样本,由于不同的段落分配到了不同的段落 id,因此测试样本的段落向量是未知的。

      此时需要固定网络的其它参数,仅仅训练矩阵 七、变种 - 图122 ,其中 七、变种 - 图123 为测试集的大小。

      然后将段落向量作为段落的一个representation 来作为后续模型的输入。

    • 实验结果表明:仅仅使用 PV-DM 得到的段落向量的效果就比较好,但是联合使用 PV-DMPV-DBOW 的段落向量效果更佳。

    七、变种 - 图124

  3. 论文在 sentence representationparagraph representation 的效果都较好。

    • Stanford Sentiment Treebank Dataset 情感分析数据集包含 11855 个样本,每个样本就是一个句子。其中训练集 8544 个样本、验证集 1101 个样本、测试集 2210 个样本。

      • 第二列给出了二元情感分析的错误率,最后一列给出了细粒度多元情感分析的错误率。
      • 一个有意思的现象是:简单的对句子的词向量取平均并不能得到一个较低的分类错误率。

      七、变种 - 图125

    • IMDB 情感分析数据集包含 100k 个样本,每个样本包含多条句子。其中训练集 25k 个样本、测试集 25k 个样本、以及 50k 个未标记样本。

      论文使用 75k 个样本(25k 个标记样本和 50k 个标记样本)来训练词向量和段落向量,然后测试剩下的 25k 个标记样本。

      七、变种 - 图126

  4. 论文给出一些结论来指导实践:

    • PV-DM 模型通常要比 PV-DBOW 模型更好。单独使用 PV-DM 的效果已经足够好,但是联合二者的效果更好。
    • PV-DM 段落向量和 PV-DBOW 段落向量拼接的效果通常优于二者相加。
    • 最佳窗口大小通常需要通过交叉验证来选取。论文建议窗口大小在 5 到 12 之间选取。
    • 虽然测试阶段段落向量的计算代价较大,但是可以并行执行来降低代价。