核心在于提高生成模型的生成质量。方式是:对抗训练的方法。(train RANKGEN using large-scale contrastive learning with in-batch negative sampling)
负例构建方式是:(1)从与prefix相同的document中,随机选择序列;(2)从大规模语言模型中生成负例(在给定prefix为condition的情况下)
现有的大规模语料,由贪婪解码或波束搜索产生的高概率(低困惑)序列往往是枯燥和重复的。
现有的一些解决方法有:top-k(Fan等人,2018)、nucleus(Holtzman等人,2020)和典型抽样(Meister等人,2022)等截断抽样方法缓解了这些问题,但它们也可能产生具有不一致、幻觉、事实错误或常识问题的文本(Massarelli等人,2020;Dou等人,2022;Krishna等人,2021)。
训练了一个1.2B 参数的encoder,将人手写的prefix和模型生成的连续空间的prefix映射到一个共享的vector space中,然后,RankGEN的目标是,将prefix与真实ground truth直接的距离减小,与生成的对抗性的prefix的距离拉大。
这和原始的PLM的encoder模型的训练过程是不同的,我们的目标是考虑两个序列,而不仅仅是单个标记的预测,它鼓励RANKGEN考虑前缀和续篇之间的长距离关系,而不仅仅是依赖局部的预测。
在第一个策略中,INBOOK,我们选择在同一文件中出现的随机序列作为前缀(生成的prefix的长度需要控制到和ground truth contiunations相同的长度)
在第二种策略中,即GENERATIVE,我们以一个给定的前缀作为条件,通过大型的预训练的LM产生连续输出。( we generate continuations by conditioning a large pretrained LM on a given prefix)
在对抗语料生成后,训练数据可以表示为三元组的形式《p,c,g》,分别代表prefix,ground-truth continuation of that prefix,a continuation generated by an LM,为了作为区分,在prefix部分添加了一个特殊的token(pre),在连续和生成的部分,添加了特殊的token(suf )
考虑了文件中所有长度在256个word的prefix(为了使得prefix覆盖到文件的begin和end位置),为每个prefix,选择了contunations ci,长度在10-128个words,为了产生negatives,首先使用50%的(p,c)pairs微调T5模型,之后,使用剩余的数据,产生对抗数据。
在inference阶段,是通过计算prefix和候选continual之间的dot product作为兼容分值的。这个分值是可以被用来辅助生成任务的,主要通过两种策略,
一是,过生成和重排名,通过PLM生成过量的备选,然后,通过计算dot product,对candidate做rerank.
二是,在beam search的过程中,不在使用标准波束搜索中解码策略,(在standard beam search中,是通过LM的predict probability计算的分值),二是采用RankGen模型计算的score,作为beam search的排名依据。
整个模型的过程如下,3个步骤:
step1: 给定一个prefix,生成N个samples.
step2:对N个samples做排名
step3:选择top-B的samples,和prefix做concatenate操作。
我觉得,比较有意思的部分,是分析RankGen这个模型,从哪些方面提高了模型的效果。