【读论文】CM-Gen: A Neural Framework for Chinese Metaphor Generation with Explicit Context Modelling
为了更好的阅读体验,请点击这里
由于发不出论文,所以找点冷门方向做一做。从汉语比喻开始。
读完这篇论文之后我觉得 COLING 这方向我上我也行(ε=ε=ε=┏(゜ロ゜;)┛
题目:CM-Gen: A Neural Framework for Chinese Metaphor Generation with Explicit Context Modelling
发表于 2022,10 月,COLING
Chinese Nominal Metaphor —— 汉语比喻,以下简写做 NM。
本文提出了一个基于 GPT2 的结构解决三个问题,NM 的识别,NM 中部件的识别(就是本体、喻体、比喻词(e.g. 像、若、似)、上下文(比喻中蕴含的意思))以及 NM 的生成。并提了一个 6.3k 的数据集,这个数据集已被标注好并包含许多不同的比喻模式。
由于目前中文的比喻数据稀缺,作者执行自训练程序,从大规模未标记数据集中学习新发现的隐喻。自训练有三个步骤:
- 模型是在用于比喻识别的标记数据集上训练的;
- 将模型应用于未标记的语料库,以检测具有相应置信度得分的潜在比喻句;
- 在标记的比喻句和新发现的比喻句的组合上训练 NM 生成模型。
CM-Gen提出在识别潜在比喻成分过程中,要由比喻分类器生成的注意力权重监督。
作者认为有上下文才算成功生成了比喻句。这里的上下文是用来解释比较的一个组成部分;其定义相对灵活。有时它可以是一个简单的形容词,有时是一个关系从句,甚至在某些情况下是隐含的。以前生成比喻句的方法大多是基于模板(template-based)的方法,严重限制了生成的比喻句的多样性,并且模板方法和神经方法(neural method)都以相对简单的结构生成比喻句。最重要的是,以前的方法在其代中不提供上下文(或者只提供很少的上下文),这使得生成的结果可读性较差。
模型结构
上图是整个框架的结构图。将句子 \(S = (w_0, \cdots, w_n, w_{\text{EOS}})\) 传入 GPT2 模型中,得到特征向量 \(H = (h_0, \cdots, h_n, h_{\text{EOS}})\),其中 EOS 是特殊符号表示一个序列(sequence)的结束。
任务1:比喻识别
比喻识别利用 \(h_{\text{EOS}}\) 向量作为整个句子的特征向量,经过一个线性层和一个 SoftMax 函数,得到其概率:
(吐槽原文:不明意义的 \(P_M\),\(M\) 是什么?)
Loss 函数采用了二分类常用的 BCE Loss,作者毫无疑问在此处写错了公式,而且不知道为什么审稿人居然看不出来。其中,假定 \(U\) 为整个数据集,且 \(U = \{ (x_i, y_i) \}_{i=1}^N\)。
任务2:比喻组件识别
作者认为 GPT2 有不连续的问题,而放到生成比喻句的环境中,会导致上下文生成和比喻中的比较内容不一致问题。除此之外,先天趋势经常导致文字错误(literal error,不知道具体应该翻译成什么)。
为解决上述问题,作者的模型把生成程序放到了比喻中的比较内容之上,也就是比喻的组件(本体、喻体和比喻词)上。同时作者也在训练过程中对于得分高的比喻组件进行加权以减少文字错误。
采用线性层来计算每个词元是比喻组件的概率:
请注意,该过程并不预测组件的类型(例如,本体),相反,它只计算每个词元的概率,指示生成应该关注每个词元的程度。
由于比喻分类器更倾向于注意比喻的组件,因此作者用这个特性来探索比喻组件。不妨设 \(\Phi\) 为在 GPT2 的 Transformer 结构最后一层中 \(h_\text{EOS}\) 与其他词元的自注意力分数,其中 \(Q\) 是自注意力中的查询矩阵,\(k\) 是 \(\text{EOS}\) 词元的值向量:
用 KL 散度来作为第二个损失函数,用于评估得到的概率分布 \(P_c\) 与 \(h_\text{EOS}\) 与其他词元的距离:
这里有几个问题:
- 存在级联误差的情况,即 \(\Phi\) 是比喻识别线性层生成的产物,它与分布 \(P_c\) 做 KL 散度,所以为什么不直接用注意力分数做比喻的组件识别呢?
- 为什么使用 KL 散度而非交叉熵来做这个损失函数呢?\(D_{KL} = H(P_c) + CELoss(P_c, \Phi)\),由于 \(P_c\) 不固定,因此这里最小化 KL 散度与最小化交叉熵并不等价,这里多了 \(P_c\) 自己的熵需要最小化。在最小化交叉熵的同时最小化自己的熵我认为并不是什么好选择。
- 更新的时候是否有固定训练参数?如果是,固定了哪些参数?如果没有固定参数的话,\(\Phi\) 会随着 GPT2 的以及比喻识别器的参数变化而变化,因此训练时这是两个一直在变化的值在做 KL 散度。
总之这几个问题突出一个难绷。
任务3:比喻生成
执行比喻生成任务三个步骤:
- 在比喻组件上调节生成(conditioning the generation);
- 强化比喻成分;
- 执行自训练过程
在比喻组件上调节生成 Conditioning the generation
首先,作者先求一个比喻组件表示 \(C = (c_0, \cdots, c_i, \cdots, c_n)\),(我觉得大概应该是用于求它是什么组件类型的):
其中,
此后将 \(h_i\) 和 \(c_i\) 拼接在一起,预测下一个词元可以写作:
\(W_l,b_l\) 都是训练用参数。
看完这几个式子又有了几个新的问题:
- 首先 \(h_i\) 向量就是采用了 \([0,i]\) 区间内所有词元的信息才能求出的特征向量,然后我们再做一个前缀的加权和?
- 暂且假定除了 \(h_\text{EOS}\) 之外的其他词元对应的特征向量受位置在其之前的词元影响不大,这个假定回答这个问题只能说是勉强。
- \(P_c\) 本就是刚过了激活函数 \(\text{Sigmoid}\),现在再过 \(\text{softmax}\) 得到 \(\alpha\)?过两次激活函数总感觉不大正常。
- 拼接和其他方法比效果如何?例如向量加权等方法。拼接是否能将二者的信息较好的融合?
强化 Emphasizing
设句子 \(S = (w_0, \cdots, w_n)\),最小化如下损失函数:
同样的问题:在反向传播的过程中,由于不冻结参数,\(P_c\) 也会被更新,欲最小化上面的函数,\(P_c^i\) 会趋向于变大。
自训练 Self-training
作者采用从大规模语料库中发现新的汉语比喻的自我训练来训练比喻生成模块,从而提高生成的流畅性和多样性。
具体而言,作者用两个相同大小(论文中没提及,但是对于数据集大小都用了 \(N\))的有标签数据集 \(U = \{ (x_i, y_i) \}_{i=1}^N\) 和无标签数据集 \(V = \{ (x_i, y_i=P_M^i) \}_{i=1}^N\),其中 \(P_M^i\) 为模型判断第 \(i\) 组数据是否为比喻的概率,然后损失函数如下:
训练和推断
最终损失函数为:
注意,当学习未标记的句子时,\(\gamma\) 被设置为 \(0\),因为这些数据缺乏比喻识别的监督标签。为了帮助模型收敛,在用 \(L\) 在混合数据上训练整个框架之前,我们首先在任务 1 的监督数据集上预训练模型。此外,在进行推理时,我们的模型只执行任务 3。
实验
数据集
- Chinese NM Corpus (CMC)
- 有监督
- 标注步骤共 5 步
- 从散文、文章和小说中收集了 55000 句中文句子
- 雇佣了三名具有 NLP 背景的中国研究生来标记每个句子是否为比喻
- 把多数同意作为每一句话的最终标签
- 识别所有比喻部件的边界(boundary),包括本体、比喻词和喻体
- 将现有的隐喻语料库与作者的语料库合并,以扩大整体多样性。
- 为了鼓励生成上下文,作者确保上下文明确出现在数据集中的所有隐喻中。
- 通过 Krippendorff 的 \(\alpha\) 计算比喻标注的内部标注的一致性,为 \(0.84\)
- Chinese Literature Corpus (CLC)
- 无监督
- 大规模
BaseLine
- SeqGAN
- GPT2
- BART
- SCOPE
- MultiTask
实验设置
在联合优化三个特定任务的损失函数之前,CM-GEN 模型在比喻识别任务上和 CMC 预训练了三个轮次。
指标
自动指标
- PPL
- Dist-1, 2
- 在 CMC 上训练一个基于 RoBERTa 的汉语比喻分类器
- 用于测试生成输出的比喻性
- 用于计算生成句子中比喻话语的比例
- Novelty
- 基于语法的方法从生成的比喻句中识别本体(TENOR)和喻体(VEHICLE)
- 并计算训练集中不同时出现的 <TENOR,VEHICEL> 对的比例。
人工评估
- Fluency
- Consistency
- Creativity
结果
自训练机制提高了生成流畅性和多样性。从模型中删除自训练很大程度上影响了四个自动指标。比喻成分强调主要有助于方法减轻文字错误,从而提高 Meta 评分。上下文条件也有利于 Meta 评分的整体框架。
人的评价也体现了自训练、强化和在比喻组件上调节生成三种机制的有效性。自训练在流利性和创造性两个方面都能提高生成的质量。调节作用主要有助于一致性得分,因为它使模型能够生成上下文描述。