原文链接
本文发表于自然语言处理领域顶级会议 NAACL 2018
摘要
本文认为文本情感转换任务可以定义为:只将句子的情感改变,而不改变与情感无关的部分,比如“这件衣服的尺码很合适”改为“这件衣服的尺码太小啦”,仅仅将“很合适”改为“太小啦”,因为这两个词是影响到句子的“情感”的,其它部分则是无关紧要的存在。本文的训练集是一些被标注了所属情感(positive或negative)的句子,而不是仅有情感不同的句子对(这样就太简单啦),因此我们必须以无监督的方式将情感与句子中和情感无关的部分给分离出来。前人在这个问题上的解决方案主要是采用强化学习去产生尽量高质量的输出。本文通过对语料的观察,发现一个句子的情感仅仅收到该句子中的一小部分的影响,比如上文的“很合适”和“太小啦”,所以本文提出一种新的解决思路,即将句子的每一个小部分计算与该句子情感的相关度,然后将相似度达到一定阈值的那一小部分给“挖掉”,就得到了句子中与情感无关的部分,然后再用与我们的目标情感相关度最大的一个小部分去填充刚才挖掉的部分,这样一来就完成了我们的情感转换任务。实验证明,本文的效果还不错。
模型
假设我们有一个已经标注好了的语料库
,其中
是句子,
是情感(positive或negative),我们定义
即在D中情感为v的句子的集合。
本文的模型由四个部分组成。
1.Delete
本文定义一个词u对情感v的相关度为:
其中
代表
在
中出现的次数,
为用来平滑的参数。当
超过阈值
时,就认为
是与情感相关的部分。
假设
为句子
中所有与情感相关部分的集合,设
为句子
删除了
产生的新句子,比如“这件衣服尺码很合适”,删去了“很合适”,得到“这件衣服尺码”。
2.Retrieve
为了确认我们要将什么词插入到
中,我们可以在包含目标情感的句子中去找与我们的原句子相似的句子,然后去将该句子中的与目标情感相关的部分插入到
中,我们通过如下方式来找到相似句子:
其中
可以为定义两个句子之间距离的公式,我们有两种选择:
1.TF-IDF
2.对embedding进行欧氏距离计算
3.Generate
设我们想要得到的目标输出句子为
我们有4种策略来生成
一、RETRIEVEONLY
即直接将retrieve步骤找到的相似句子作为输出
,这样的好处是一定能生成一个语法上非常通顺的且包含目标情感的句子(因为找出的句子一定是训练集里存在的句子,本身是人写出来的,当然通顺),坏处是生成的句子可能和原句子的内容大相庭径。
二、TEMPLATEBASED
将找到的相似句子中与情感相关的部分
直接替换掉原句子中与情感相关的部分
,这种策略需要
和
的上下文语境相似,这种做法在大多数情况下可行,但有时也会导致输出的句子语法上极不通顺。
三、DELETEONLY
首先将原句子中删除掉与情感相关部分得到的序列
embedding之后送入一个RNN,然后将最后一个隐藏层的输出与目标情感
的embedding做concat(原文是
,但是
应该是positive或negative才对呀,这怎么embedding呢? 我认为应该是
的embedding),然后再用一个RNN decoder来生成输出
。这样操作既能保证流利的语法,也能达到情感变化的效果。
四、DELETEANDRETRIEVE
与DELETEONLY相似,但是不是使用
的embedding,而是
的embedding
4.Training
现在来看看如何训练DELETEONLY和DELETEANDRETRIEVE
因为本文的训练集是一些被标注了所属情感(positive或negative)的句子,而不是仅有情感不同的句子对,因此我们训练DELETEONLY和DELETEANDRETRIEVE模型时,仅凭训练集是得不到
或
的,所以我们只能使用训练集来进行无监督学习,故DELETEONLY的目标函数为使下式最大化:
(注:先通过分词构造
,遍历
中每一个词,并将其删去得到
,然后最大化上式。)
DELETEANDRETRIEVE的目标函数为使下式最大化:
由于只使用
和
的话,它们两个都来自于同一个句子,这样会造成严重的过拟合,使在测试集上的效果特别差,所以我们采用了一个策略,即对每个
以0.1的概率,将其改为与它同属于一个情感集合的且编辑距离为1的词汇
。