题目:
Rigid Formats Controlled Text Generation
机构:
Tencent AI Lab
作者:
Piji Li、Haisong Zhang、Xiaojiang Liu、Shuming Shi
论文地址:
https://arxiv.org/abs/2004.08022
收录会议:
ACL 2020
论文代码:
https://github.com/lipiji/SongNet
基于神经网络的文本生成在各种任务中取得了巨大的进展。这些文本生成任务如对话生成、故事生成、摘要生成等可以自由生成文本而不受特定格式的限制。然而,对于歌词(假设乐谱已给定)、宋词、十四行诗等这些独特的文体,有着严格的格式、韵律等要求。对于这类给定固定模板,严格要求按照限制格式进行文本生成任务研究较少。为此,本文提出SongNet模型以解决此类遵循固定格式的文本生成问题。SongNet是一个基于Transformer的自回归语言模型,通过定制化设计一系列符号提高模型在格式、押韵和句子完整性方面的性能。另外,SongNet改进了注意机制,以促使模型能够捕获格式的上下文信息。本文在SongNet基础上提出一个预训练和微调框架,以进一步提高生成质量。最后,在两个收集的语料库(中文和英文)上进行实验,实验结果表明SongNet在自动评测标准上和人工评估方面优于其他模型。
输入:一个模板,即一个预定义的格式要求。比如:
C = { c 0 c 1 c 2 c 3 , c 0 c 1 c 2 c 3 c 4 c 5 ⋅ } C=\left\{c_{0} c_{1} c_{2} c_{3}, c_{0} c_{1} c_{2} c_{3} c_{4} c_{5} \cdot\right\} C={c0c1c2c3,c0c1c2c3c4c5⋅}
输出:将替换成真实的文字,生成符合模板格式的完整句子。比如:
Y = love is not love;
bends with the remover to remove:
SongNet 的模型框架如Figure 2 所示:
为了解决模板、韵律、句子完整性问题,本文定义了几种符号来对这些特殊的信息进行建模。
模板和韵律符号:
其中 c 0 {c_0} c0代表普通文本符号, c 1 {c_1} c1代表标点符号, c 2 {c_2} c2代表该位置是韵脚, < / s > </s>表示子句或句子分隔符, < e o s >
内部位置符号:
p i p_i pi表示字符在同一子句或句子中的局部位置。需要注意的是,这里的位置符号索引按降序排列。
其目的是通过推动这些符号捕捉句子的动态信息,特别是精确地捕捉句子的结束位置,从而提高句子的完整性。这是学习句子如何渐进结束的,那么当遇到逗号的时候,模型能够意识到句子生成动态到了尾声。例如 p 0 p_0 p0通常表示标点符号,因此 p 1 p_1 p1表示句子的结尾词。此外,句子内部位置信息还能捕捉诸如对联一类文本的前后句对仗位置特征。
句子符号:
对句子位置进行建模,其中 s i s_i si表示该字符属于句子 i i i,其目的是通过定义句子索引特征来增强不同位置的句子之间的相互作用。让模型推测出目前在生成的句子位置,捕捉学习到押韵的句对。例如莎士比亚的十四行诗押韵格式为“ABAB CDCD EFEF GG”,有了句子位置特征模型就会比较容易捕捉到1句和3句押韵,2和4押韵。
训练的时候,所有的符号以及文本字符向量后统一输入到基于Transformer的语言模型中。与BERT和GPT2.0不同的是,SongNet稍微修改了传统的注意力机制以适应本文所提出的问题。具体来说,首先通过对所有输入token和符号的embedding进行求和来获得输入的表征,如Figure 2中的红色实线框所示:
H t 0 = E w t + E c t + E p t + E s t + E g t \mathbf{H}_{t}^{0}=\mathbf{E}_{w_{t}}+\mathbf{E}_{c_{t}}+\mathbf{E}_{p_{t}}+\mathbf{E}_{s_{t}}+\mathbf{E}_{g_{t}} Ht0=Ewt+Ect+Ept+Est+Egt
为了让模型在自回归的这个动态过程中能够看到模板的后续信息,进而获得序列的全局动态信息。例如,模型可能想知道是否应该通过生成最后一个单词和一个结束句子的标点符号来结束解码过程。为了表示全局动态信息,本文还引入了另一个变量 F 0 \mathbf{F}^{0} F0,该变量只融合了之前定义的符号信息,没有输入的文本信息从而避免右侧信息泄露,具体如Figure 2中蓝色虚线框所示:
F t 0 = E c t + E p t + E s t \mathbf{F}_{t}^{0}=\mathbf{E}_{c_{t}}+\mathbf{E}_{p_{t}}+\mathbf{E}_{s_{t}} Ft0=Ect+Ept+Est
对输入进行上述处理后,引入两组注意机制进行特征学习。第一个模块是一个带masking的多头自注意力,第二个模块是全局多头注意力。
Masking Multi-Head Self-Attention:
C t 1 = LN ( FFN ( C t 1 ) + C t 1 ) C t 1 = L N ( SLF − A T T ( Q t 0 , K ≤ t 0 , V ≤ t 0 ) + H t 0 ) Q 0 = H 0 W Q K 0 , V 0 = H 0 W K , H 0 W V \begin{aligned} \mathbf{C}_{t}^{1} &=\operatorname{LN}\left(\operatorname{FFN}\left(\mathbf{C}_{t}^{1}\right)+\mathbf{C}_{t}^{1}\right) \\ \mathbf{C}_{t}^{1} &=\mathbf{L}_{\mathbf{N}}\left(\operatorname{SLF}-\mathbf{A} \mathbf{T} \mathbf{T}\left(\mathbf{Q}_{t}^{0}, \mathbf{K}_{\leq t}^{0}, \mathbf{V}_{\leq t}^{0}\right)+\mathbf{H}_{t}^{0}\right) \\ \mathbf{Q}^{0} &=\mathbf{H}^{0} \mathbf{W}^{Q} \\ \mathbf{K}^{0}, \mathbf{V}^{0} &=\mathbf{H}^{0} \mathbf{W}^{K}, \mathbf{H}^{0} \mathbf{W}^{V} \end{aligned} Ct1Ct1Q0K0,V0=LN(FFN(Ct1)+Ct1)=LN(SLF−ATT(Qt0,K≤t0,V≤t0)+Ht0)=H0WQ=H0WK,H0WV
Global Multi-Head Attention:
H t 1 = LN ( FFN ( H t 1 ) + H t 1 ) H t 1 = L N ( G L O B A L − ATT ( Q t 1 , K 1 , V 1 ) + C t 1 ) Q 1 = C 1 W Q K 1 , V 1 = F 0 W K , F 0 W V \begin{aligned} \mathbf{H}_{t}^{1} &=\operatorname{LN}\left(\operatorname{FFN}\left(\mathbf{H}_{t}^{1}\right)+\mathbf{H}_{t}^{1}\right) \\ \mathbf{H}_{t}^{1} &=\mathbf{L} \mathbf{N}\left(\mathbf{G L O B A L}-\operatorname{ATT}\left(\mathbf{Q}_{t}^{1}, \mathbf{K}^{1}, \mathbf{V}^{1}\right)+\mathbf{C}_{t}^{1}\right) \\ \mathbf{Q}^{1} &=\mathbf{C}^{1} \mathbf{W}^{Q} \\ \mathbf{K}^{1}, \mathbf{V}^{1} &=\mathbf{F}^{0} \mathbf{W}^{K}, \mathbf{F}^{0} \mathbf{W}^{V} \end{aligned} Ht1Ht1Q1K1,V1=LN(FFN(Ht1)+Ht1)=LN(GLOBAL−ATT(Qt1,K1,V1)+Ct1)=C1WQ=F0WK,F0WV
训练过程对整个句子采用最大似然估计作为优化方法:
L n l l = − ∑ t = 1 n log P ( y t ∣ y < t ) \mathcal{L}^{\mathrm{nll}}=-\sum_{t=1}^{n} \log P\left(\mathbf{y}_{t} \mid \mathbf{y}_{
虽然可以直接拿SongNet在目标语料库的训练数据集上进行训练,但通常语料库的规模有限,例如,在莎士比亚的十四行诗语料库中只有大约150个样本。因此,本文还设计了一个预训练和微调框架,以进一步提高生成质量。
在生成任务中,会遇到给定部分文本,补全其他文本的需求。例如,在模板中,给定部分句子,要求补全其他句子;在句子中,给定部分词,要求补全其他词。为了使得模型能够应对这类需求,在SongNet的预训练阶段,设计了masking策略:模板中保留部分词,模型学习预测其他的词。具体来说,在原始文本中随机选取20%字符保持不变,而其他字符被遮蔽掉,从而创建一个模板。例子如下:
C ′ = { c 0 , c 0 , c 0 , love , c 1 , ⟨ / s ⟩ bends , c 0 , c 0 , c 0 , c 0 , remove , c 1 , ⟨ / s ⟩ , ⟨ eos ⟩ } \begin{aligned} C^{\prime}=&\left\{c_{0}, c_{0}, c_{0}, \text {love}, c_{1},\langle/ s\rangle\right.\\ & \text {bends}\left., c_{0}, c_{0}, c_{0}, c_{0}, \text {remove}, c_{1},\langle/ s\rangle,\langle\operatorname{eos}\rangle\right\} \end{aligned} C′={c0,c0,c0,love,c1,⟨/s⟩bends,c0,c0,c0,c0,remove,c1,⟨/s⟩,⟨eos⟩}
其中“love”、“bends” 和 “remove”在模板 C ′ C^{\prime} C′中保持不变。预训练结束后,可以直接对目标语料库进行微调,而不需要调整任何模型结构.
在生成阶段可以指定任何格式和押韵符号(该模板记为 C C C)来控制生成。SongNet模型从特殊token
处开始迭代生成,直到遇到结束token
。另外,用了top-k sampling的解码方法来生成多样性好的结果,通过调节超参k可以平衡多样性和生成质量。
实验评测过程采用中英数据集各一套。中文以宋词生成作为预测目标;英文则是生成莎士比亚十四行诗(sonnet)。模型分预训练和微调两个阶段。在预训练阶段,中文语料主要是新闻和维基百科,英文语料是维基百科和BooksCorpus。
除了常用的文本生成评测指标PPL、Distinct 外,本文还专门设计了衡量格式(Format)准确率、韵律(Rhyme)准确率和句子完整性(integrity)的指标。
格式准确率:
主要是看生成结果与模板之间的长度是否相同,标点符号的位置是否一致,分别有对应的 Precision p、Recall r和 F1得分。在实验结果中同时给出了Macro-F1 和 Micro-F1的得分。
韵律准确率:
由于在一首宋词的韵脚只有一个,比如宋词:
驿外断桥边,寂寞开无主(zhu)。已是黄昏独自愁,更著风和雨(yu)。
无意苦争春,一任群芳妒(du)。零落成泥碾作尘,只有香如故(gu)
其中韵脚“zhu”, “yu”, “du” 和 “gu” 。所以对于生成的宋词,先使用开源的pinyin工具包获得词在押韵位置上的拼音,再进行评估。在莎士比亚的十四行诗语料库中,押韵规则是明确的“ABAB CDCD EFEF GG”,共有7组押韵。对于生成的示例,先使用CMU的发音词典获取单词在押韵位置上的音素,然后将原始单词和提取出来的音素的重叠单位进行分组计数,进行评价。同样也使用Macro-F1
和 Micro-F1进行评估。
句子完整性:
在模板的限制下,模型必须使用有限的位置来组织语言,因此句子的完整性可能会是一个严重的问题。例如,句子"love is not love . "
要比"love is not the . "
在语义的完整性要更好。在对句子完整性进行评价时使用了一种简单明了的方法,即在给定生成前缀下计算 之前标点符号的预测概率:
Integrity = 2 − 1 ∣ Y ∣ ∑ i = 1 ∣ Y ∣ log ( P ( y punc i ∣ y 0 i , y 1 i , … , y < punc i ) ) \text {Integrity}=2^{-\frac{1}{|Y|} \sum_{i=1}^{|Y|} \log \left(P\left(y_{\text {punc}}^{i} \mid y_{0}^{i}, y_{1}^{i}, \ldots, y_{<\text {punc}}^{i}\right)\right)} Integrity=2−∣Y∣1∑i=1∣Y∣log(P(ypunci∣y0i,y1i,…,y<punci))
完整性度量值越小,表示句子质量越高。为了实现这一目标,文本分别用大规模中英语料在GPT2模型进行预训练,然后用GPT2模型对句子完整性进行评估。
Table 1和 Table 2分别是各个模型(baseline模型是STS和GPT2)在宋词和十四行诗上生成结果的评测:
可以看出SongNet在PPL、多样性、格式准确率、押韵准确率、句子完整性上都取得了不错的得分。相比宋词,十四行诗的效果差一些,主要原因是十四行诗的训练样本太少(只有100首),导致模型无法捕捉到足够有用的特征,在韵律的学习上尤甚。
至于消融研究和调参上的一些经验具体参考原始论文,于此不进一步说明。
指定模板生成:
Table 5分别介绍了SongCi和十四行诗生成的几个案例。宋词的格式(CiPai)都是冷启动样本,它们不在训练集中,甚至是新定义的。SongNet仍然可以在格式、韵律和完整性方面产生高质量的结果。对于语料库只有100个样本的十四行诗来说,虽然SongNet可以生成14行文本,但质量就不如宋词那般好了。
预先填入词的生成:
实测效果如 Table 6 所示:
本文所提出的SongNet是一个预先训练和微调框架,旨在处理严格格式控制的文本生成。在SongNet中设计了一系列的符号并提高了在格式、韵律和句子完整性方面的建模性能。在中英两个语料库上进行的实验,表明在给定任意冷启动格式的情况下,SongNet在自动化的度量指标和人工评估方面都产生了显著更好的结果。