11

​搜出来的文本:从文本生成到搜索采样

 3 years ago
source link: https://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw%3D%3D&%3Bmid=2247519619&%3Bidx=1&%3Bsn=c61232e482629a2cb9d03f3ba3fa587e
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

EnAnQz.gif!mobile

©PaperWeekly 原创 · 作者|苏剑林

单位|追一科技

研究方向|NLP、神经网络

最近,笔者入了一个新坑: 基于离散优化的思想做一些文本生成任务 。简单来说,就是把我们要生成文本的目标量化地写下来,构建一个分布,然后搜索这个分布的最大值点或者从这个分布中进行采样,这个过程通常 不需要标签数据 的训练。

由于语言是离散的,因此梯度下降之类的连续函数优化方法不可用,并且由于这个分布通常没有容易采样的形式,直接采样也不可行,因此需要一些特别设计的采样算法,比如拒绝采样(Rejection Sampling)、MCMC(Markov Chain Monte Carlo)、MH 采样(Metropolis-Hastings Sampling)、吉布斯采样(Gibbs Sampling),等等。

有些读者可能会觉得有些眼熟,似乎回到了让人头大的学习 LDA(Latent Dirichlet Allocation)的那些年?没错,上述采样算法其实也是理解 LDA 模型的必备基础。本文我们就来回顾这些形形色色的采样算法,它们将会出现在后面要介绍的丰富的文本生成应用中。

jiuMzu2.png!mobile

明确目标

很多时候,我们需要根据一些特定的信息来生成目标文本,用数学的话说就是条件语言模型,不过我们无法得到足够多的语料对去直接监督训练一个条件语言模型,而是只能训练一个无条件的语言模型,但我们又可以人为地设计一个指标来定量描述和之间的联系。

那么在这种情况下,如何根据无条件的语言模型和之间的联系来做有条件的文本生成,便成为了我们的研究对象。我们可以称之为“受限文本生成(Constrained Text Generation)”

举例来说, 用关键词造句 ,那么就是关键词的集合,我们可以定义示性函数:

ARjQNrY.png!mobile

继而定义:

保证了生成句子的流畅性,保证了生成句子包含所要求的关键词,那么问题就可以变成最大化操作或采样操作。当然,这里的还不是概率分布,要完成归一化后才是真正的概率分布:

EZfeueq.png!mobile

但分母通常是难以显式计算出来的。那也就是说,我们对待采样分布也只了解到它正比于某个函数,而不知道精确的分布表达式。

类似的例子并不少,比如说 文本摘要 。什么是文本摘要呢?其实就是用更少的文字尽可能表达出跟原文一样的意思,这时候我们可以定义:

这里的是某个文本相似度函数,而是长度的示性函数,即的长度在某个范围(可能依赖于)内,它就为 1,否则为 0。此时我们同样得到了一个未归一化的概率分布,需要最大化它或者从它里边采样。

很明显,这个目标就意味着我们要得到一段跟原文语义尽可能相似的、长度满足一定约束的文字,这不就是摘要的存在意义吗?所以,这套思路的核心出发点就在于: 我们要把自己要生成的目标定量地捋清楚,然后再去执行下一步操作。

IbQFVj6.png!mobile

困难分析

所以,抛开前面的背景不说,现在我们面临的问题就是有一个分布,我们只知道,即:

a6nyiqU.png!mobile

中的分母我们无法显式计算出来。在本系列文章中,代表文本,即一个离散元素的序列,但后面的推论同样也适用于是连续型向量的场景。现在我们要搜索最大位置或进行采样,后面我们将会看到,搜索最大值其实也可以看成是采样的特例,因此我们主要关心采样方式。

前面说了,之所以需要设计一些特别的算法来完成采样,是因为直接从中采样是困难的,而我们需要理解采样的困难所在,才能真正理解后面所设计的采样算法的关键之处。困难在哪?

如果的候选值空间不大,哪怕有 100 万个候选值,我们都可以把每个都算出来,然后按照普通的类别采样来进行。然而,一般的候选值空间远远不止 100 万,假如有 10 个分量,每个分量有 1 万个选择(对应于候选字数目),那么总的排列就有种了,不可能事先算好每一种排列的概率然后依概率采样。

那怎么办呢?所谓“不积硅步,无以至千里”,那就只能一步步来了,也就是说,我没法直接实现选 1,那我做 10 次“选 1”可以吗?这就对应着所谓的“自回归生成”:

这样我们就可以先从采样一个,然后从中采样一个,依此递归了。但是,自回归生成只是对应于无条件的语言模型或者是有监督训练的 Seq2Seq 模型,而如果希望像前面举的例子那样,往无条件语言模型的生成过程中加点约束,那么对应出来的模型就不再是自回归的了,也就无法按照这样的递归采样了。

所以,我们就不得不需要后面介绍的各种采样算法了,它也是“一步步来”的思想,但所使用的分布形式更加广泛一些。

ZJfe2i7.png!mobile

重要采样

在《从采样看优化:可导优化与不可导优化的统一视角》 [1] 、《如何划分一个跟测试集更接近的验证集?》 [2] 等文章里,我们介绍过“重要性采样”的概念,即如果我们想估计期望,但是又不是易于采样的分布,那么我们可以找一个跟相近的、易于采样的分布,然后根据下述变换:

转化为从采样来算的期望了,也就是用对每个样本进行加权,所以它被称为“重要性采样(Importance Sampling)”。如果只知道,那么重要性采样也是可以进行的,这是因为:

fQVNfy7.png!mobile

所以:

6fyQv2b.png!mobile

这样一来,我们发现上式只依赖于的相对值,不依赖于它的绝对值,所以把换成跟它成正比的也是可以的,最终简化成:

2mamaiv.png!mobile

JFbIRjv.png!mobile

拒绝采样

上一节的重要性采样实现了将复杂分布期望转化为简单分布期望,但这还不是我们的真正目的,我们要实现的是把样本从分布中采样出来,而不是估算它的某个期望。思想依然跟重要性采样一样,引入易于采样的分布,然后从中随机地筛掉某些样本,使得剩下的样本服从分布。

具体来说,假设有函数,我们按照如下流程进行采样(即“拒绝采样”):

从采样一个样本,从中采样一个随机数,若则接受该样本,否则拒绝并重新按照此流程采样。

那么,此时采样出来的真正的概率分布是什么呢?其实也不难,由于样本被保留下来的概率是,因此它的相对概率就是,我们只需要将它重新归一化:

ve6Zre7.png!mobile

就得到拒绝采样对应的真正的概率分布了,从这个形式也可以看出,将接受率乘以一个 0 到 1 之间的数,理论上拒绝采样对应的分布是不变的。

这个过程启示我们,拒绝采样可以让我们实现从正比于的分布中采样,那么根据,我们可以让作为接受概率,来进行从出发的拒绝采样,结果就相当于从采样了。

当然,还没那么简单,根据概率的归一化性质,除非恒等于,否则不可能一直都在内。但这不要紧,只要有上界,那么我们就可以选择一个足够大的常数 M,使得,此时以为接受概率即可,刚才我们说了,乘以一个常数不会影响拒绝采样对应的分布。换句话说,也就是这个过程同样不依赖于完全精确的,可以将换成跟它成正比的。

关于接受率,尽管理论上只要求它就行了,但实际上还是以为好,这是因为过小的接受率会导致拒绝太多(几乎来一个拒绝一个),采样效率太低,生成一个合理的样本的成本过大了。

类似地,尽管理论上对的要求只是易于采样并且有上界,但实际上与仍然是越相近越好,否则依然可能造成接受率过低而导致采样成本大到难以接受。所以,尽管拒绝采样看上去提供了一种几乎能从任意分布中进行采样的方案,但实际应用时近似分布的设计依然是一个不小的难题。

ZJVFFrb.png!mobile

本文小结

从本文开始,我们开了个新坑,试图从离散优化的角度来完成某些文本生成任务(受限文本生成)。它通过确定一个定量的评估目标,然后通过最大化这个目标或者从中采样就可以得到我们想要的输出,而不需要标签数据监督训练新模型。

在这个过程中,所要用到的工具是一些主要是采样算法,本文先介绍了其中很基本的重要性采样和拒绝采样,后面将会继续完善该系列文章,敬请大家期待。

bUrMBbQ.png!mobile

参考文献

bUrMBbQ.png!mobile

[1] https://kexue.fm/archives/7521

[2] https://kexue.fm/archives/7805

更多阅读

qAVJjum.png!mobile

2Ijeyua.png!mobile

mABfMn3.png!mobile

2mUBJnB.gif!mobile

# 投 稿 通 道 #

让你的论文被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢? 答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是 最新论文解读 ,也可以是 学习心得技术干货 。我们的目的只有一个,让知识真正流动起来。

:memo:  来稿标准:

• 稿件确系个人 原创作品 ,来稿需注明作者个人信息(姓名+学校/工作单位+学历/职位+研究方向) 

• 如果文章并非首发,请在投稿时提醒并附上所有已发布链接 

• PaperWeekly 默认每篇文章都是首发,均会添加“原创”标志

:mailbox_with_mail:  投稿邮箱:

• 投稿邮箱: [email protected] 

• 所有文章配图,请单独在附件中发送 

• 请留下即时联系方式(微信或手机),以便我们在编辑发布时和作者沟通

:mag:

现在,在 「知乎」 也能找到我们了

进入知乎首页搜索 「PaperWeekly」

点击 「关注」 订阅我们的专栏吧

关于PaperWeekly

PaperWeekly 是一个推荐、解读、讨论、报道人工智能前沿论文成果的学术平台。如果你研究或从事 AI 领域,欢迎在公众号后台点击 「交流群」 ,小助手将把你带入 PaperWeekly 的交流群里。

R7nmyuB.gif!mobile

nUvi2i.jpg!mobile


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK