首页 > 其他分享 >【读论文】CM-Gen: A Neural Framework for Chinese Metaphor Generation with Explicit Context Modelling

【读论文】CM-Gen: A Neural Framework for Chinese Metaphor Generation with Explicit Context Modelling

时间:2023-10-11 16:26:04浏览次数:60  
标签:Metaphor CM Chinese text 生成 训练 词元 组件 比喻

为了更好的阅读体验,请点击这里

由于发不出论文,所以找点冷门方向做一做。从汉语比喻开始。

读完这篇论文之后我觉得 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 的数据集,这个数据集已被标注好并包含许多不同的比喻模式。

由于目前中文的比喻数据稀缺,作者执行自训练程序,从大规模未标记数据集中学习新发现的隐喻。自训练有三个步骤:

  1. 模型是在用于比喻识别的标记数据集上训练的;
  2. 将模型应用于未标记的语料库,以检测具有相应置信度得分的潜在比喻句;
  3. 在标记的比喻句和新发现的比喻句的组合上训练 NM 生成模型。

CM-Gen提出在识别潜在比喻成分过程中,要由比喻分类器生成的注意力权重监督。

作者认为有上下文才算成功生成了比喻句。这里的上下文是用来解释比较的一个组成部分;其定义相对灵活。有时它可以是一个简单的形容词,有时是一个关系从句,甚至在某些情况下是隐含的。以前生成比喻句的方法大多是基于模板(template-based)的方法,严重限制了生成的比喻句的多样性,并且模板方法和神经方法(neural method)都以相对简单的结构生成比喻句。最重要的是,以前的方法在其代中不提供上下文(或者只提供很少的上下文),这使得生成的结果可读性较差。

模型结构

image-20231010193637326

上图是整个框架的结构图。将句子 \(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 = \text{softmax} \left(W_m h_{\text{EOS}} + b_m \right) \]

(吐槽原文:不明意义的 \(P_M\),\(M\) 是什么?)

Loss 函数采用了二分类常用的 BCE Loss,作者毫无疑问在此处写错了公式,而且不知道为什么审稿人居然看不出来。其中,假定 \(U\) 为整个数据集,且 \(U = \{ (x_i, y_i) \}_{i=1}^N\)。

\[L_1 = - \sum_{i=1}^N (y_i \log P(\hat{y_i}|x_i) + (1 - y_i) \log (1 - P(\hat{y_i}|x_i)) ) \]

任务2:比喻组件识别

作者认为 GPT2 有不连续的问题,而放到生成比喻句的环境中,会导致上下文生成和比喻中的比较内容不一致问题。除此之外,先天趋势经常导致文字错误(literal error,不知道具体应该翻译成什么)。

为解决上述问题,作者的模型把生成程序放到了比喻中的比较内容之上,也就是比喻的组件(本体、喻体和比喻词)上。同时作者也在训练过程中对于得分高的比喻组件进行加权以减少文字错误。

采用线性层来计算每个词元是比喻组件的概率:

\[P_c = \text{Sigmoid} (W_cH + b_c) \]

请注意,该过程并不预测组件的类型(例如,本体),相反,它只计算每个词元的概率,指示生成应该关注每个词元的程度。

由于比喻分类器更倾向于注意比喻的组件,因此作者用这个特性来探索比喻组件。不妨设 \(\Phi\) 为在 GPT2 的 Transformer 结构最后一层中 \(h_\text{EOS}\) 与其他词元的自注意力分数,其中 \(Q\) 是自注意力中的查询矩阵,\(k\) 是 \(\text{EOS}\) 词元的值向量:

\[\Phi = \text{softmax} \left( \frac{Qk^T}{\sqrt{d_k}} \right) \]

用 KL 散度来作为第二个损失函数,用于评估得到的概率分布 \(P_c\) 与 \(h_\text{EOS}\) 与其他词元的距离:

\[L_2 = D_{KL} (P_c \| \Phi) \]

这里有几个问题:

  1. 存在级联误差的情况,即 \(\Phi\) 是比喻识别线性层生成的产物,它与分布 \(P_c\) 做 KL 散度,所以为什么不直接用注意力分数做比喻的组件识别呢?
  2. 为什么使用 KL 散度而非交叉熵来做这个损失函数呢?\(D_{KL} = H(P_c) + CELoss(P_c, \Phi)\),由于 \(P_c\) 不固定,因此这里最小化 KL 散度与最小化交叉熵并不等价,这里多了 \(P_c\) 自己的熵需要最小化。在最小化交叉熵的同时最小化自己的熵我认为并不是什么好选择。
  3. 更新的时候是否有固定训练参数?如果是,固定了哪些参数?如果没有固定参数的话,\(\Phi\) 会随着 GPT2 的以及比喻识别器的参数变化而变化,因此训练时这是两个一直在变化的值在做 KL 散度。

总之这几个问题突出一个难绷。

任务3:比喻生成

执行比喻生成任务三个步骤:

  1. 在比喻组件上调节生成(conditioning the generation);
  2. 强化比喻成分;
  3. 执行自训练过程

在比喻组件上调节生成 Conditioning the generation

首先,作者先求一个比喻组件表示 \(C = (c_0, \cdots, c_i, \cdots, c_n)\),(我觉得大概应该是用于求它是什么组件类型的):

\[c_i = \sum_{k=0}^i \alpha_k \cdot h_k \]

其中,

\[(\alpha_0, \cdots, \alpha_i) = \text{softmax} P_c^{\{0,\cdots,i\}} \]

此后将 \(h_i\) 和 \(c_i\) 拼接在一起,预测下一个词元可以写作:

\[P(w_{i+1}|w_0, \cdots, w_i) = \text{softmax} (W_l \cdot \text{concat}(h_i, c_i) + b_l) \]

\(W_l,b_l\) 都是训练用参数。

看完这几个式子又有了几个新的问题:

  1. 首先 \(h_i\) 向量就是采用了 \([0,i]\) 区间内所有词元的信息才能求出的特征向量,然后我们再做一个前缀的加权和?
    • 暂且假定除了 \(h_\text{EOS}\) 之外的其他词元对应的特征向量受位置在其之前的词元影响不大,这个假定回答这个问题只能说是勉强。
  2. \(P_c\) 本就是刚过了激活函数 \(\text{Sigmoid}\),现在再过 \(\text{softmax}\) 得到 \(\alpha\)?过两次激活函数总感觉不大正常。
  3. 拼接和其他方法比效果如何?例如向量加权等方法。拼接是否能将二者的信息较好的融合?

强化 Emphasizing

设句子 \(S = (w_0, \cdots, w_n)\),最小化如下损失函数:

\[\mathcal{L}(S) = - \sum_{i=0}^n P_c^i \cdot \log P(w_i | w_0, \cdots, w_{i-1}) \]

同样的问题:在反向传播的过程中,由于不冻结参数,\(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\) 组数据是否为比喻的概率,然后损失函数如下:

\[L_3 = - \sum_{x,y \in U \cup V} y \cdot \mathcal{L}(x) \]

训练和推断

最终损失函数为:

\[L = \gamma \cdot L_1 + L_2 + L_3 \]

注意,当学习未标记的句子时,\(\gamma\) 被设置为 \(0\),因为这些数据缺乏比喻识别的监督标签。为了帮助模型收敛,在用 \(L\) 在混合数据上训练整个框架之前,我们首先在任务 1 的监督数据集上预训练模型。此外,在进行推理时,我们的模型只执行任务 3。

实验

数据集

  1. Chinese NM Corpus (CMC)
    • 有监督
    • 标注步骤共 5 步
      1. 从散文、文章和小说中收集了 55000 句中文句子
      2. 雇佣了三名具有 NLP 背景的中国研究生来标记每个句子是否为比喻
      3. 把多数同意作为每一句话的最终标签
      4. 识别所有比喻部件的边界(boundary),包括本体、比喻词和喻体
      5. 将现有的隐喻语料库与作者的语料库合并,以扩大整体多样性。
    • 为了鼓励生成上下文,作者确保上下文明确出现在数据集中的所有隐喻中。
    • 通过 Krippendorff 的 \(\alpha\) 计算比喻标注的内部标注的一致性,为 \(0.84\)
  2. Chinese Literature Corpus (CLC)
    • 无监督
    • 大规模

image-20231010233831545

BaseLine

  • SeqGAN
  • GPT2
  • BART
  • SCOPE
  • MultiTask

实验设置

在联合优化三个特定任务的损失函数之前,CM-GEN 模型在比喻识别任务上和 CMC 预训练了三个轮次。

指标

自动指标

  • PPL
  • Dist-1, 2
  • 在 CMC 上训练一个基于 RoBERTa 的汉语比喻分类器
    • 用于测试生成输出的比喻性
    • 用于计算生成句子中比喻话语的比例
  • Novelty
  • 基于语法的方法从生成的比喻句中识别本体(TENOR)和喻体(VEHICLE)
    • 并计算训练集中不同时出现的 <TENOR,VEHICEL> 对的比例。

人工评估

  • Fluency
  • Consistency
  • Creativity

结果

image-20231011155549497

自训练机制提高了生成流畅性和多样性。从模型中删除自训练很大程度上影响了四个自动指标。比喻成分强调主要有助于方法减轻文字错误,从而提高 Meta 评分。上下文条件也有利于 Meta 评分的整体框架。

人的评价也体现了自训练、强化和在比喻组件上调节生成三种机制的有效性。自训练在流利性和创造性两个方面都能提高生成的质量。调节作用主要有助于一致性得分,因为它使模型能够生成上下文描述。

标签:Metaphor,CM,Chinese,text,生成,训练,词元,组件,比喻
From: https://www.cnblogs.com/bringlu/p/17757438.html

相关文章

  • LWC Parent & Child Cmp & cmp
    1. Parent&Child :Parent–ChildCommunicationinLightningWebComponent(LWC)/Blogs/Perficient也可以通过Dom的形式接收值; 上述链接中的例子比较简单,可以参考下述例子EventsinLightningwebcomponents(LWC)-ApexHoursparenttochild:两种方式:1.<c-t......
  • CMM(Capability Maturity Model,能力成熟度模型)
    CMM(CapabilityMaturityModel,能力成熟度模型)是一种用于评估组织的软件开发过程成熟度的模型。CMM最初由美国国防部所发展,后来被卡内基梅隆大学软件工程研究所(SEI)进一步完善和推广。CMM定义了五个不同的成熟度级别,从初级到优秀级别:初始级别(Level1:Initial):过程是无序的、不可预测......
  • pip 手动安装 jieba包 | [babyllama2-chinese]
    在复现babyllama2-chinese项目时,jieba无论是用pip还是conda进行安装都会报错,遂尝试手动安装,步骤如下:先参考一篇博客以及我自己的博客:conda、pip从本地安装包我直接进入pip官网:https://pypi.org搜索jieba包这里需要注意,如果需要下载历史版本,请点击Releasehisto......
  • MySQL使用cmd窗口命令导入数据库
    如下:setgloballog_bin_trust_function_creators=1;--导入数据库之前做准备SETGLOBALlog_bin_trust_function_creators=TRUE;cmd命令窗口执行如下导入命令命令行登录mysqlmysql-uroot-pxxx;mysql>usedatabasename;mysql>sourced:/xxx.sqlend......
  • vscode交叉编译cmake工程,toolchains设置
    在VisualStudioCode中编译CMake项目时,使用自定义工具链(toolchains)可以很有用,特别是当你需要交叉编译或使用不同的编译器时。以下是在VisualStudioCode中使用自定义工具链的一般步骤,以aarch64的嵌入式为例:创建自定义工具链文件:首先,你需要创建一个包含有关你的自定义工具链......
  • 使用CEF(六)— 解读CEF的cmake工程配置
    距离笔者的《使用CEF》系列的第一篇文章居然已经过去两年了,在这么长一段时间里,笔者也写了很多其它的文章,再回看《使用CEF(一)—起步》编写的内容,文笔稚嫩,内容单薄是显而易见的(主要是教大家按部就班的编译libcef_dll_wrapper库文件)。笔者一直以来的个性就是希望自己学习到的知识,研究......
  • R语言门限误差修正模型(TVECM)参数估计沪深300指数和股指期货指数可视化|附代码数据
    全文链接:http://tecdat.cn/?p=32511原文出处:拓端数据部落公众号时间序列模型的理论已经非常丰富,模型的应用也相当广泛。但现实生活中,越来越多的时间序列模型呈现出了非线性的特点,因此,研究非线性时间序列模型的理论及对其参数进行估计有着极其重要的意义。门限模型作为非线性......
  • 2021-2022 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2021) gym 104670
    原题容易想到最短路DAG求出来,起初我以为要求最小割,但这是错误的,因为可能有多条边联通了一个点的情况,这时候选择最小割不一定是最优的我们猜想一个思路:答案一定是包含\(1\)号节点的连通块全部填\(N\),剩下的填\(S\)。发现在最短路DAG中,\(1\rightarrown\)的所有路径......
  • Dockerfile 中的 CMD 与 ENTRYPOINT
    1、概述CMD和ENTRYPOINT指令都用于定义容器启动时执行的命令,单从功能上来看,这两个命令几乎是重复的,单独使用其中的一个就可以实现绝大多数的用例。尽管如此,它们在某些情况下具有不同的用途和优势。这篇文章旨在澄清它们的用法,以帮助你在实际应用中做出明智的选择,避免混淆。2......
  • Windows下Cmake编译Poco库
    C++Windows下使用Cmake编译Poco库1.编译前准备:先配置OpenSSL环境(opensslversion-a查看)如果openssl是1.0.*版本,Poco版本最高用1.9.4。如果1.1或者更高,用最新版本。2.编译命令(演示使用VS2022编译v140版本Win32的库):cd..mkdircmake_build_x86cdcmake......