先抽语料原型再编辑,Yelp困惑度从39降到27

Generating Sentences by Editing Prototypes

Kelvin Guu, Tatsunori B. Hashimoto, Yonatan Oren, Percy Liang

cs.CL, cs.AI, cs.LG, cs.NE, stat.ML

2017-09-26

Stanford用「先抽语料原型再神经编辑」做无条件语言模型,Yelp困惑度26.87对比LSTM的39.03,并且其编辑向量还能做句级类比。

这篇在解决什么

2017 年的神经语言模型从空白从左到右吐词,容易塌成「I don't know」这类万能句。把温度拧高能换来多样性,语法往往一起垮。人写长句很少一遍成型,通常是先有草稿再改。

Stanford 的 Kelvin Guu、Tatsunori Hashimoto、Yonatan Oren、Percy Liang 把这个过程写成无条件生成模型:先从训练集均匀抽一句原型,再由 neural editor 按随机 edit vector 改成新句。语料里的句子本来就语法完整、长短不齐、没有「短而空」的偏置;编辑器只要对着原型做局部修改,比从零生成容易得多。

他们在 Yelp 上数过:测试集 70% 的句子能在训练集里找到词集合 Jaccard 距离小于 0.5 的邻居,几乎没有一字不差的重复。大部分测试句都可以看成对某句训练句的小改。

方法

句子 x 的似然是对所有原型 x' 与编辑向量 z 的边缘化,算不清。训练用两层下界。

原型求和只留词面相近的邻居:Jaccard 距离小于 0.5 的训练句,用 LSH 和 minhash 预计算。250 对人评里,这类邻居 35.2% 被判成严格复述,84% 至少大致等价,改成否定或换题的只有 7.2%。词面近在评论语料里大多语义也近。

z 的期望用 ELBO:再训一个 inverse neural editor q(z|x',x),专门猜「什么样的 z 会把 x' 改成 x」。编辑器是 3 层双向 LSTM 编码器加 3 层带 attention 的 LSTM 解码器,每步把 z 拼进解码输入。q 把插入词与删除词的 GloVe 向量分别求和再拼接,方向加 von Mises-Fisher 噪声,长度加均匀噪声。先验是长度 Unif(0,10)、方向在单位球上均匀。κ 直接控制 KL 项大小,κ=0 时 KL 可压到接近 0。

测试时对找不到邻居的稀有句,用权重 0.1 与普通 NLM 线性平滑,相当于偶尔抽一个能改成任意句的空原型。

结果

模型Yelp 困惑度BillionWord 困惑度
KN556.5578.36
NLM(LSTM)39.0355.15
NLM+KN537.3147.47
NeuralEditor(κ=0)26.8748.76

Yelp 上它低于 NLM 约 12 点,也低于 NLM 与 5-gram 的最佳集成。BillionWord 邻近句更少,它仍低于单独 NLM,但没超过 NLM+KN5。只检索不编辑的 Memorization 集成几乎帮不上忙。

400 条人评里,编辑器在温度 1、不做退火时,语法和「像不像会出现在语料里」已经能追上调过温度的 NLM,unigram 熵还更高。温度降下去,语法略升、多样性不怎么掉。原因很直接:多样性来自抽到的原型,解码器就算贪心也不会塌成同一句。

对 He 等人的句法变换,模型给恒等映射最高概率(每词负对数似然 0.33),to 从句换位 1.62,主动被动 3.27,随机打乱 4.42,改成无关句 6.07。

语义上,反复随机编辑走出的句子链 1% 与原型无关;句 VAE 要么原样重复,要么一步跳到无关句。把同一 edit vector 搬到新句上做词级类比,top-10 命中率接近 GloVe 做单词类比的水平,SVAE 的 top-k 接近 0。

为什么重要

这是检索增强生成在无条件语言模型上的一次早期完整表述:训练时对输出空间做近邻边缘化,推理时「先找草稿再改」。后来的 RAG、retrieval-augmented LM、基于编辑的 paraphrase 和文本风格迁移,都能在这里看到骨架。

对现在做可控生成的人,edit vector 比整句潜向量好用:局部变化比全局句子流形更容易学。论文自己也说,编辑的局部变化比句子的全局变化更好建模。

放到今天,LSTM 骨架和 Jaccard 邻居当然旧了。想法没有过期:生成器不必从空白采样,可以从语料里已有的好句子出发。

局限与存疑

没有单独的局限节。困惑度用的是邻居下界再加平滑,不是精确似然,跨模型比较要打折。邻居阈值 0.5 是人为的,语义评价主要在 Yelp,换到开放域会弱一截。BillionWord 上它没赢集成基线,说明原型策略吃「测试句离训练集近」这块红利。SVAE 基线是 2016 年的句 VAE,后面对抗崩溃的技巧没包含进来。人评没有给出可直接引用的均分数字,只描述了相对关系。

术语

原文与代码

社区讨论

相关论文

全部论文解读