这篇论文提出了SIF sentence embedding方法, 作者提供的代码在Github.

引入

作为一种无监督计算句子之间相似度的方法, sif sentence embedding使用预训练好的词向量, 使用加权平均的方法, 对句子中所有词对应的词向量进行计算, 得到整个句子的embedding向量. 再使用句子向量进行相似度的计算.

在这篇论文之前, 也有与这篇文章思路非常相近的思路, 即都是使用词向量, 通过平均的方法得到句子向量, 只是在加权时权重计算方法上有区别. 具体来说有:

  • 对句子中所有单词直接求平均, 每个单词的权重相同, 得到sentence embedding
  • 使用每个词的TF-IDF值为权重, 加权平均, 得到sentence embedding

这篇论文使用smooth inverse frequency, sif作为每个单词的权重, 代替TF-IDF值, 获得了更好的效果. 除了使用新的词权重计算方法, 还在加权平均后, 减掉了principal component, 最终得到句子的embedding.

另外论文中还提到了这种方法的鲁棒性:

  • 使用不同语料(多种领域)训练得到的不同的word embedding, 均取得了很好的效果, 说明了对各种语料的友好.
  • 使用不同语料得到的词频, 作为计算词权重的因素, 对最终的结果影响很小.
  • 对于方法中的超参数, 在很大范围内, 获得的结果都是区域一直的, 即超参数的选择没有太大的影响.

理论

1. 生成模型

首先从潜变量生成模型(latent variable generative model)说起. 这个模型假设: 语料的生成是一个动态过程(dynamic process), 即第\(t\)个单词是在第\(t\)步生成的.

每个单词\(w\)对应着一个\(\mathbb{R}^d\)维的向量. 而这个动态过程是由discourse vector\(c_t\in{\mathbb{R}^d}\)的随机游走驱动的. discourse vector代表着这个句子what is being talked about, 作为潜变量, 代表着句子一个状态, 由于是动态的, 这个状态是随时间变化的, 因此记为\(c_t\).

单词\(w\)的向量\(v_w\)与当前时间的discourse vector\(c_t\)的内积, 表示着这个单词与整个句子之间的关系. 并且我们假设\(t\)时刻观测到单词\(w\)的概率为这个内积的对数线性(log linear)关系:

\[Pr(\text{w emitted at time t}| c_t)\propto{\exp(\langle c_t,v_w \rangle)}
\]

由于\(c_t\)是较小幅度的随机游走得到的, \(c_t\)与\(c_{t+1}\)之间只会差一个较小的随机差向量, 因此相邻的单词是由近似的discourse vector生成得到的. 另外计算表明这种模型的随机游走允许偶尔\(c_t\)有较大的jump, 这对共生概率的影响是很小的.

通过这种办法生成的单词向量, 与word2vec(CBOW)Glove生成的向量是相似的.

2. 随机游走模型的改进

借助上面的模型, 我们希望如下获得一个句子的我sentence embedding: 对discourse vector最大似然估计. 为了简化, 注意到\(c_t\)在整个句子生成单词的过程中, 变化很小, 因此我们将所有步的discourse vector假设为一个固定的向量\(c_s\). 可证明: 对\(c_s\)的最大似然估计就是对所有单词embedding向量的平均.

这篇论文对这种模型进行了改进, 加入了两项平滑项, 出于如下的考虑:

  • 有些单词在规定的上下文范围之外出现, 也可能对discourse vector产生影响
  • 有限单词的出现(如常见的停止词)与discourse vector没有关系

出于这两点考虑, 引入了两种平滑项, 首先是对数线性模型中的一个累加项(additive term)\(\alpha p(w)\),其中\(p(w)\)是单词\(w\)在整个语料中出现的概率(词频角度), \(\alpha\)是一个超参数. 这样, 即使和\(c_s\)的内积很小, 这个单词也有概率出现.

然后, 引入一个纠正项, common discourse vector\(c_0\in{\mathbb{R}^d}\), 其意义是句子的最频繁的意义, 可以认为是句子中最重要的成分, 常常可以与语法联系起来. 文章中认为对于某个单词, 其沿着\(c_0\)方向的成分较大(即向量投影更长), 这个纠正项就会提升这个单词出现的概率.

校正后, 对于给定的discourse vector\(c_s\), 单词\(w\)在句子\(s\)中出现的概率为:

\[Pr(\text{w emitted in sentence s}| c_s)\propto{\alpha p(w) + (1-\alpha)\frac{\exp(\langle \tilde{c}_s, v_w \rangle)}{Z_{\tilde{c}_s}}}
\]

其中, \(\tilde{c}_s=\beta c_0+(1-\beta)c_s,\ c_0\perp c_s\), \(\alpha\)和\(\beta\)都是超参数, \(Z_{\tilde{c}_s}=\sum\limits_{w\in{V}}\exp(\langle \tilde{c}_s, v_w \rangle)\)是归一化常数. 从公式中可以看出, 一个与\(c_s\)没有关系的单词\(w\), 也可以在句子中出现, 原因有:

  • 来自\(\alpha p(w)\)项的数值
  • common discourse vector \(c_0\)的相关性

3. 计算句子向量

句子向量就是上述模型中的\(c_s\), 使用最大似然法估计\(c_s\)向量. 首先假设所有单词的向量\(v_s\)是大致均匀分布在整个向量空间上的, 因此这里的归一化项\(Z_c\)对于不同的句子值都是大致相同的, 即对于任意的\(\tilde{c}_s\), \(Z\)值是相同的. 在此前提下, 得到似然函数:

\[p[s|c_s]=\prod\limits_{w\in{s}}p(w|c_s)=\prod\limits_{w\in{s}}[\alpha p(w) + (1-\alpha)\frac{\exp(\langle \tilde{c}_s, v_w \rangle)}{Z}]
\]

取对数, 单个单词记为

\[f_w(\tilde{c}_s)=\log[\alpha p(w) + (1-\alpha)\frac{\exp(\langle \tilde{c}_s, v_w \rangle)}{Z}]
\]

最大化上式, 具体的推到在论文中有详述的说明, 最终目标为:

\[\arg\max\limits_{c_s}\sum\limits_{w\in{s}}f_w(\tilde{c}_s)
\]

可以得到:

\[\tilde{c}_s\propto \sum\limits_{w\in{s}}\frac{a}{p(w)+a}v_w,\ a=\frac{1-\alpha}{\alpha Z}
\]

因此可以得到:

  • 最优解为句子中所有单词向量的加权平均
  • 对于词频更高的单词\(w\), 权值更小, 因此这种方法也等同于下采样频繁单词

最后, 为了得到最终的句子向量\(c_s\), 我们需要估计\(c_0\). 通过计算向量\(\tilde{c}_s\)的first principal component(PCA中的主成分), 将其作为\(c_0\). 最终的句子向量即为\(\tilde{c}_s\)减去主成份向量\(c_0\).

4. 算法总结

整个算法步骤总结如下图:

论文阅读 A SIMPLE BUT TOUGH-TO-BEAT BASELINE FOR SEN- TENCE EMBEDDINGS的更多相关文章

  1. 论文阅读笔记 Improved Word Representation Learning with Sememes

    论文阅读笔记 Improved Word Representation Learning with Sememes 一句话概括本文工作 使用词汇资源--知网--来提升词嵌入的表征能力,并提出了三种基于 ...

  2. [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)

    [论文阅读] LCC-NLM(局部颜色校正, 非线性mask) 文章: Local color correction using non-linear masking 1. 算法原理 如下图所示为, ...

  3. 论文阅读(Xiang Bai——【PAMI2017】An End-to-End Trainable Neural Network for Image-based Sequence Recognition and Its Application to Scene Text Recognition)

    白翔的CRNN论文阅读 1.  论文题目 Xiang Bai--[PAMI2017]An End-to-End Trainable Neural Network for Image-based Seq ...

  4. BITED数学建模七日谈之三:怎样进行论文阅读

    前两天,我和大家谈了如何阅读教材和备战数模比赛应该积累的内容,本文进入到数学建模七日谈第三天:怎样进行论文阅读. 大家也许看过大量的数学模型的书籍,学过很多相关的课程,但是若没有真刀真枪地看过论文,进 ...

  5. 论文阅读笔记 - YARN : Architecture of Next Generation Apache Hadoop MapReduceFramework

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  6. 论文阅读笔记 - Mesos: A Platform for Fine-Grained ResourceSharing in the Data Center

    作者:刘旭晖 Raymond 转载请注明出处 Email:colorant at 163.com BLOG:http://blog.csdn.net/colorant/ 更多论文阅读笔记 http:/ ...

  7. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  8. 论文阅读笔记 Word Embeddings A Survey

    论文阅读笔记 Word Embeddings A Survey 收获 Word Embedding 的定义 dense, distributed, fixed-length word vectors, ...

  9. 论文阅读笔记六:FCN:Fully Convolutional Networks for Semantic Segmentation(CVPR2015)

    今天来看一看一个比较经典的语义分割网络,那就是FCN,全称如题,原英文论文网址:https://people.eecs.berkeley.edu/~jonlong/long_shelhamer_fcn ...

随机推荐

  1. PHP、JS一些用法

    PHP去除小数点后面的0,保留非零 floatval($num) PHP转数组var d = eval(数组d); PHP字符串转数组 $row['0'] = explode(";" ...

  2. JS 对象基本用法

    声明对象的两种语法 let obj = { 'name': 'frank', 'age': 18 } let obj = new Object({'name': 'frank'}) 如何删除对象的属性 ...

  3. python - Lambda函数 匿名函数

    Lambda 匿名函数 python 使用 lambda 来创建匿名函数. lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda ...

  4. vue 中PDF实现在线浏览,禁止下载,打印

    需求:在线浏览pdf文件,并且禁止掉用户下载打印的效果. 分析:普通的iframe.embed标签都只能实现在线浏览pdf的功能,无法禁止掉工具栏的下载打印功能.只能尝试使用插件,pdfobject. ...

  5. AndroidStudio修改程序的包名,可以修改com.example.xxx之类的详解

    转载请说明出处.原创作品. 首先说明一下,当时公司需要修改androidStudio 项目的包名 于是上网查了一下,只看到了修改后面的包名,而不可以修改 前缀的com.example.xxx.所以很无 ...

  6. 流光shader 和 流光+扭曲shader

    我认为这种shader能通过简单的方式呈现出不错的效果. 1.流光shader: Shader "Unlit/StreamShader" { //流光shader Properti ...

  7. 熟练剖分(tree) 树形DP

    熟练剖分(tree) 树形DP 题目描述 题目传送门 分析 我们设\(f[i][j]\)为以\(i\)为根节点的子树中最坏时间复杂度小于等于\(j\)的概率 设\(g[i][j]\)为当前扫到的以\( ...

  8. RabbitMQ 3.8.7 在 centos7 上安装

    1.安装 erlang 因为 RabbitMQ 是 erlang 语言开发,所以需要依赖 erlang 环境,所以在安装 RabbitMQ 前需要先安装 erlang wget https://pac ...

  9. 如何配置node环境变量

    1,安装node.js   最后安装的目录在 检测node安装成功   node -v 如果报错   没有默认装在c盘  pro 需要配置环境变量 Npm   node  package  manag ...

  10. 使用Azure DevOps Pipeline实现.Net Core程序的CD

    上一次我们讲了使用Azure DevOps Pipeline实现.Net Core程序的CI.这次我们来演示下如何使用Azure DevOps实现.Net Core程序的CD. 实现本次目标我们除了A ...