聊聊我的AI大黄蜂:Copy is All You Need背后的故事
©作者 | 王琰
单位 | 前腾讯AI Lab高级研究员
研究方向 | 对话与文本生成
最近我们的 ICLR 论文 Copy is All You Need 在国内外引发了一些讨论,甚至因为名字差点火出了圈,作为始作俑者的我和蔡登兰天瑟瑟发抖,深感对不起我鹅。我也默默的庆幸,幸亏这篇 paper 的单位没有挂现单位,否则。。。懂的自然懂。
言归正传,我们本来没准备在社交网络宣传这篇工作,自论文二月份被接受以来,我们都是以一种酒香不怕巷子深的态度静静等待大家发掘它的有趣之处。但既然被动的火了起来,那么,我就也被动的来一波官方解读吧。
在正式介绍干货之前,请允许我再回顾一下我们在做这篇工作的心路历程吧(请原谅一个中年男人的唠叨)。这篇论文是我跟蔡登在 Retrieval-augmented Generation 这个方向第三阶段的工作了。在 2018 年夏天,我们还有 FAIR 以及 MSRA 的两支研究团队,几乎同时提出了 Retrieval-augmented Generation 这个全新的生成范式,利用检索系统与生成模型的结合,实现 1+1>1 的对话效果。
在随后的数年时光里,RAG 这个生成范式以爆炸式的速度发展着,而我们也在我们第一篇论文提出的 Skeleton 框架上,做出了不少改进和完善。我们第二阶段的代表性工作,是发表于 ACL 2021 的论文“Neural Machine Translation with Monolingual Translation Memory“,这篇文章重点在于提出了一个联合训练框架,实现了检索模型与生成模型的联合训练,并且证明了 RAG 框架不仅仅适用于对话或开放域文本生成,在机器翻译这样一个更加通用且具有完善自动评价指标的任务上也有着非常突出的效果。
在这五年中,我也一直会有一个疑问:为什么检索模型永远只能打辅助呢?为什么我们不能直接利用检索下一句的方式进行流畅的文本生成呢?在变形金刚系列电影中,人见人爱的角色大黄蜂,因为战斗中声带受损,选择用收音机不断检索歌曲和新闻片段的方式来发声,我们可不可以让模型也用这样的方式来生成呢?
在我们的智能写作助手 EffIdit 中,我们进行了一次尝试,实现了一个初步的利用检索技术进行句子补全的功能(见 EffIdit 例句推荐功能: https://effidit.qq.com/demo),虽然最后通过许多工程优化达到了勉强可以接受的效果,但这个过程还是暴露出了现有检索技术用于文本生成的巨大问题:只能召回固定粒度的文档&句子,而无法召回其中未被提前索引的片段。
一旦我们提前索引的候选集中,没有合适的下半句或下一句时,我们的检索模型是没有办法凭空创造出流利的下文的,这就是为什么没有任何论文尝试利用检索的方式实现自回归语言模型的原因(也许深度学习之前的时期有,如有遗漏,为我浅薄的知识储备说声抱歉)。
而 Copy is All You Need 的故事,也就是从我们这个“想让检索模型打次 C 位”的中二愿望开始的。
论文标题:
Copy is All You Need
ICLR 2023
https://openreview.net/pdf?id=CROlOA9Nd8C
https://github.com/gmftbyGMFTBY/Copyisallyouneed
这部分偷了点懒,参考了另一篇文章 [1]。关于详细技术细节,请移步我们的论文原文。在这个文档中,我会首先着重介绍我们是如何解决前文所介绍的问题:“检索系统只能召回固定粒度的文档&句子,而无法召回其中未被提前索引的片段”。
通过这样的方式,生成就变成了一个不断的根据句子前缀在 Phrase Table 中进行 Maximum Inner Product Search (MIPS) 的过程。另外,有的时候我们还是会遇到完全没有合适短语可选的情况,因此我们还是把所有的 token embedding 加入到我们的 Phrase Table 中,这些 embeddings 可以被看作是一堆长度为 1 并且没有上下文的 phrase 集合。
a) Prefix encoder: 将前面文本 prefix 编码成固定长度的向量表征。这里采用的是标准的 Transformer-decoder only(类似 GPT)结构,最终采用 prefix 最后一个 token 的隐层表示作为 prefix 的向量表征。
假设某个 phrase 在该文档 D 中的开始位置跟结束位置分别是 s 跟 e,那么对应的向量表征就是位置 s 的开始表征跟位置 e 的结束向量表征直接拼接得到:
c)一个不依赖于源文本的词表。虽然 CoG 可以从其他文档中 copy,但是为了保持原有的泛化能力,在生成过程同时也会依赖一个固定词表,这里采用的是传统语言模型的词表,每个 token 都可以视为一个长度为 1 的文本片段。当源文本语料中没有合适片段时,生成模型就只能选择固定词表里的token,所以这个词表就非常有用。
这其中1) 和3) 与标准语言模型的做法相同,而 2) 是本文的关键:这种获得 phrase 的向量表征方式的优势在于,其一我们只需要对文档进行一次编码就可以获得所有文本片段的向量表征,其二在于只需要存储文档每个位置上的向量表征即可,而不需要存储具体的文本片段的向量表征。总而言之,我们采用了一种可以在合理代价范围内为任意长度 phrase 进行向量表示并且建立 index 的方式,从而解决之前限制我们的关键问题:"检索系统只能召回固定粒度的文档&句子,而无法召回其中未被提前索引的片段"。
在获得源文本语料所有文本片段后,就可以利用自监督的方式训练模型了。CoG 文本生成的每一步都是一个从 Phrase Table(包括固定词表)中进行一次 MIPS 的过程。
假定文档 D 可以被切分为 个 phrase: ,其中 是第 个phrase,假设 是 的可能的源文档, 是 在 中的起始和终止位置,那么 的向量表示可以通过计算得到,上文的表示 是通过 prefix encoder 得到的。
在训练时候我们的目标就是通过优化 phrase encoder 和 prefix encoder 的参数,让正确的 next phrase 跟 的语义相似度足够接近,而错误的 next phrases 与 的语义相似度尽量远。我们采用了对比损失 loss InfoNCE,其中负样本采用的是 in-batch-negative 的方式:
我们在标准的文本生成 benchmark,wikitext-103,上测试并对比了各种模型。我们以长度为 32 个 token 的 prefix 作为输入,让模型生成长度为 128 的句子补全结果,并与 Vanilla Transformer(GPT2), KNN-LM, RETRO 四种生成模型进行了对比。其中在 MAUVE(跟人工评判高度相关的自动评测方法),Rep(重复性),Diversity(多样性)三个指标上的自动评测如下:
参考文献
[1] https://zhuanlan.zhihu.com/p/645138565
更多阅读
#投 稿 通 道#
让你的文字被更多人看到
如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。
总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。
PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析、科研心得或竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。
📝 稿件基本要求:
• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注
• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题
• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算
📬 投稿通道:
• 投稿邮箱:[email protected]
• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者
• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿
△长按添加PaperWeekly小编
🔍
现在,在「知乎」也能找到我们了
进入知乎首页搜索「PaperWeekly」
点击「关注」订阅我们的专栏吧
微信扫码关注该文公众号作者