【读论文】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 评分的整体框架。
人的评价也体现了自训练、强化和在比喻组件上调节生成三种机制的有效性。自训练在流利性和创造性两个方面都能提高生成的质量。调节作用主要有助于一致性得分,因为它使模型能够生成上下文描述。
【读论文】CM-Gen: A Neural Framework for Chinese Metaphor Generation with Explicit Context Modelling的更多相关文章
- Deep Learning 28:读论文“Multi Column Deep Neural Network for Traffic Sign Classification”-------MCDNN 简单理解
读这篇论文“ Multi Column Deep Neural Network for Traffic Sign Classification”是为了更加理解,论文“Multi-column Deep ...
- (读论文)推荐系统之ctr预估-NFM模型解析
本系列的第六篇,一起读论文~ 本人才疏学浅,不足之处欢迎大家指出和交流. 今天要分享的是另一个Deep模型NFM(串行结构).NFM也是用FM+DNN来对问题建模的,相比于之前提到的Wide& ...
- 论文阅读(Zhuoyao Zhong——【aixiv2016】DeepText A Unified Framework for Text Proposal Generation and Text Detection in Natural Images)
Zhuoyao Zhong--[aixiv2016]DeepText A Unified Framework for Text Proposal Generation and Text Detecti ...
- 读论文系列:Deep transfer learning person re-identification
读论文系列:Deep transfer learning person re-identification arxiv 2016 by Mengyue Geng, Yaowei Wang, Tao X ...
- 论文笔记——A Deep Neural Network Compression Pipeline: Pruning, Quantization, Huffman Encoding
论文<A Deep Neural Network Compression Pipeline: Pruning, Quantization, Huffman Encoding> Prunin ...
- C# 读App.config配置文件[1]:.Net Framework框架
C# 读App.config配置文件[1]:.Net Framework框架 C# 读App.config配置文件[2]: .Net Core框架 参考:https://www.cnblogs.com ...
- 注意力论文解读(1) | Non-local Neural Network | CVPR2018 | 已复现
文章转自微信公众号:[机器学习炼丹术] 参考目录: 目录 0 概述 1 主要内容 1.1 Non local的优势 1.2 pytorch复现 1.3 代码解读 1.4 论文解读 2 总结 论文名称: ...
- [人脸活体检测] 论文:Learn Convolutional Neural Network for Face Anti-Spoofing
[人脸活体检测] 论文:Learn Convolutional Neural Network for Face Anti-Spoofing 论文简介 这是最早期CNN用于活体检测的文章,在此之前都是手 ...
- Deep Learning 23:dropout理解_之读论文“Improving neural networks by preventing co-adaptation of feature detectors”
理论知识:Deep learning:四十一(Dropout简单理解).深度学习(二十二)Dropout浅层理解与实现.“Improving neural networks by preventing ...
- Deep Learning 16:用自编码器对数据进行降维_读论文“Reducing the Dimensionality of Data with Neural Networks”的笔记
前言 论文“Reducing the Dimensionality of Data with Neural Networks”是深度学习鼻祖hinton于2006年发表于<SCIENCE > ...
随机推荐
- WebSocket集群分布式改造:实现多人在线聊天室
前言 书接上文,我们开始对我们的小小聊天室进行集群化改造. 上文地址: [WebSocket入门]手把手搭建WebSocket多人在线聊天室(SpringBoot+WebSocket) 本文内容摘要: ...
- AeroAdmin、TeamViewer和Splashtop Business Access的区别
Hi everyone! 今天又是喜闻乐见的吃瓜时间,王婆卖瓜,不得不夸. 炎炎夏日,就给大家送个大西瓜吧.望梅止渴也是极好的. ------官宣分割线------ Splashtop是针对个人和企 ...
- SpringBoot3集成WebSocket
标签:WebSocket,Session,Postman. 一.简介 WebSocket通过一个TCP连接在客户端和服务器之间建立一个全双工.双向的通信通道,使得客户端和服务器之间的数据交换变得更加简 ...
- JDK源码阅读-------自学笔记(四)带标签的break和continues
"标签"是指后面跟一个冒号的标识符,例如:"label:".对Java来说唯一用到标签的地方是在循环语句之前.而在循环之前设置标签的唯一理由是:我们希望在其中嵌 ...
- 【源码】蚁群算法TSP问题可视化
ACO.Visualization项目 本项目演示蚁群算法求解旅行商问题的可视化过程,包括路径上的信息素浓度.蚁群的运动过程等.项目相关的代码:https://github.com/anycad/AC ...
- Django测试与持续集成:从入门到精通
title: Django测试与持续集成:从入门到精通 date: 2024/5/18 16:38:41 updated: 2024/5/18 16:38:41 categories: 后端开发 ta ...
- Unicode 14 标准发布
本文为翻译,原文地址Unicode 博客: 宣布 Unicode 标准, 版本 14.0 Unicode 标准版本 14.0 现已可用,包括核心规范.附件和数据文件.此版本增加了 838 个字符,总共 ...
- C#关键字 sealed
定义在自定义类上,该类就不能被继承. 定义在基类的方法上,子类就不能用override 重写该方法.
- win10找回Ubuntu启动项(非EasyBCD)
最近想对装在电脑上的Ubuntu进行更新,但是之前在BIOS里改了引导系统的文件,导致找不到Ubuntu启动项,EasyBCD程序也不起作用(整块硬盘Windows分区都是GPT,改BIOS也没什么用 ...
- VSCode配置JetBrains Mono字体
1. 下载JetBrains Mono字体 官网下载地址:https://www.jetbrains.com/lp/mono/ 2. 在VSCode配置字体 { "editor.fontFa ...