ACL 2020 | ScriptWriter: 基于给定情节的电影台词生成
浏览量: 690
时间: 2020-07-24 06:25
关键词: AI顶会,ACL,文本生成,自然语言处理,作者带你读论文
论文标题:ScriptWriter: Narrative-Guided Script Generation
论文作者:Yutao Zhu,Ruihua Song,Zhicheng Dou ,Jian-Yun Nie ,Jin Zhou
机构:蒙特拉尔大学,微软小冰,中国人民大学,北京电影学院
论文来源:ACL 2020
论文链接:https://www.aminer.cn/pub/5ec49a639fced0a24b4de8d8/
一、引言
情节通常可以被理解为叙述一个故事的方式,其在自然语言处理特别是文本生成中发挥了很大的作用。比如在故事生成中,故事线就是一种情节,其能够帮助模型生成更连贯且一致的故事。在对话生成中,整个对话的目标也可以看作是一种情节,其可以帮助模型避免生成不一致或无关的回复。事实上,文本生成是自然语言处理领域的难题之一,随着深度学习技术的不断发展,特别是预训练语言模型的出现,文本生成的质量得到了很大提高。但是,较长文本的生成仍然存在着很多问题,比如前后逻辑不一致等等。针对这一问题,我们提出了一个疑问:如果人为提供一些参考信息(例如情节),能否进一步提高文本生成的质量?例如,在故事生成这一问题中,现有模型要从头考虑如何生成一整个故事,难度比较大,那如果人为提供一个故事线,是否可以提升模型的性能呢?
本文即是对这一想法的一种探索。受限于数据,我们目前无法获得带有故事线的故事或者带有全局计划的对话。但是我们发现,“图解电影”这一网站上提供了一些可用的数据。在这个网站上,网友们通过一些电影截图与自己撰写的小段情节描述为大家介绍一整部电影。其所撰写的小段情节描述可以对应到相应的电影台词上,从而形成<情节-小段台词>的数据。这一数据刚好可以支持我们探索给定情节对台词生成的影响。于是,我们收集并标注了约100部电影的台词与图解电影上对应的情节描述,构建了一个新的“图解电影”数据集。我们提出了ScriptWriter模型,其能够根据给定的情节和已有的台词上文生成后续台词。在这一模型中,我们设计了一个情节追踪模块,这一模块可以使模型根据已有的上文内容判断情节的表达情况,并在后续生成中更加关注未表达的情节。实验结果表明,情节的确可以帮助模型提高台词的生成质量,且相比于其他模型,ScriptWriter能够更有效地利用情节信息。
图1为图解电影数据集中的一个样例,可以看到整段台词与给定情节是对应的,且台词本身是连贯的。类似于对话生成,台词生成的任务也可以采用生成式或检索式两种方法来解决。我们采用的是检索式的方法,因为已有研究表明检索式方法能够产生更加相关且语法正确的句子,此外,检索式方法的标准也更加明确。当然,我们的数据集也支持生成式任务,我们将其作为未来的进一步探索。
图1: 图解电影数据集中的一个样例
二、问题定义与数据集介绍
给定数据集D,其中的每个样本表示为(y,c,p,r),c={s1,...,sn}表示有n个台词上文,p为给定的情节描述,r是下一句台词的候选项(类似于对话系统,我们将其称为回复),y为标签,1表示该回复为正确回复,0则相反。通常正确的回复是与上下文相关且符合对应情节的描述的。我们的目标是在数据集D上学习一个模型g(c,p,r),其能够判断回复r是否可以作为当前上文的一个回复。
表1: 图解电影数据集的统计
为了构建数据集,我们使用了IMDB前100的电影作为初始列表,从图解电影网站上收集了相应的情节描述,然后我们让标注人员看每部电影,并将这些情节描述对应的电影片段的起止时间记录下来。之后,我们再将这些起止时间对应的台词取出,与情节一起构建了数据集。我们共获得了16109个样本,每个样本包含一段台词与其对应的情节描述。表1展示了这一数据集的统计信息,平均每个情节描述包含25个词,每个样本包含4.7句台词。
由于所做的是检索式任务,我们将每个样本拆开,让模型在每一轮都要进行选择。例如对于有6句台词的一个样本,我们将其拆为5个小样本,这五个样本的上文分别为前1、2、3、4、5句台词,而回复则对应为第2、3、4、5、6句台词,这些小样本对应的情节描述都是一样的。在训练集上,正负样本的比例是1:1,在验证和测试集上,其比例为1:9。这一设定与其他检索式对话的数据集是一致的。
三、ScriptWriter模型
整体上,ScriptWriter采用了“表示-匹配-聚合”框架。首先,ScriptWriter用多层注意力机制将情节、上文、候选回复表示为向量。然后,我们提出了情节更新机制,使情节的表示包含更多未表达部分的情节信息。随后,我们抽取了三类匹配特征:(1)上文-回复匹配,其能够反映回复是否与上文连贯;(2)情节-回复匹配,其能够反映回复是否与情节相符;(3)上文-情节匹配,其能够隐式反映哪些情节已经被上文表达。最后,这些匹配特征经过CNN的进一步抽取和聚集,再经过MLP得到最终的匹配得分。下面我们将详细介绍每个模块的实现:
3.1 表示
ScriptWriter使用注意力机制来构建文本的表示,这一机制与Transformer模型中类似。具体来说,给定情节p(w1p,...wnpp),一句台词si=(w1si,...,wnsisi)
以及一个候选回复r=(w1r,...,wnrr),ScriptWriter首先将这些句子其映射为其词嵌入表示P0=(e1p,...,enpp),Si0=(e1si,...,ensisi)以及R0=(e1r,...,enrr)。然后,这些表示P0、{SI0}i=1n和R0经过多层自注意力机制得到新的表示,其中第l层自注意力机制建立在第(l-1)层获得的表示之上,即:
经过自注意力机制,句子中相似语义的词的表示可以得到进一步增强。
除了自注意力机制,受之前相关工作的启发,ScriptWriter还采用了另一组交叉注意力机制以强化两个句子之间的联系。具体计算如下:
以上为情节与上文台词Si之间交叉注意力机制得到的表示,同理,情节与候选回复以及上文台词与候选回复之间也可以用相似的计算得到一组交叉注意力机制的表示。
3.2 情节表示更新机制
随着台词的不断生成,情节中的内容也逐渐得到表达,因此,我们设计了一个情节表示更新的机制,使情节表示更聚焦于已有台词还未表达的部分。
图2: 情节表示更新机制
如图2所示,ScriptWriter首先计算台词上文和情节的匹配情况,这里以第i句台词Si为例:
其中j和k分别表示Si中的第j个词,以及情p中的第k个词。为了总结情节中有多少信息以及被表达, ScriptWriter对这一匹配矩阵进行了加和操作,得到:
其中γ是一个参数用于控制已表达信息在情节表示中的衰减程度。最终,ScriptWriter更新情节表示:
图3: 情节-台词上文匹配
3.3 匹配
匹配部分,ScriptWriter考虑三种匹配,即:情节-台词上文匹配、情节-候选台词匹配以及台词上文-候选台词匹配。如图3所示,这里我们以情节-台词上文匹配为例。首先用点积得到二者的匹配矩阵:
然后将不同层的矩阵堆叠起来:
最终将不同表示得到的矩阵再次融合:
通过这种方式,我们获得了三个匹配矩阵,分别对应于三种不同的匹配。这三种匹配的作用是不同的,其中台词上文-候选台词匹配用于选择符合上文的台词;情节-台词上文匹配用于帮助模型记录情节中的哪些信息已经被表达;而情节-候选台词匹配则帮助模型选择更符合情节描述的回复。由于情节表示更新机制的作用,模型能够选择回复使其更贴近尚未描述的那部分情节。
3.4 聚合
聚合阶段ScriptWriter使用CNN和Max-pooling来对匹配特征进行抽取、提炼与聚合。其中由于台词上文是多个句子,所以台词上文-候选台词匹配矩阵和情节-台词上文匹配矩阵是3D的。ScriptWriter采用3D-CNN来进行特征提取。而情节-候选台词匹配矩阵是2D的,则用2D-CNN来进行特征提取。最终所有的特征由MLP进行组合并输出匹配得分:
ScriptWriter采用交叉熵来训练整个模型:
四、实验
4.1 实验设置
我们采用了两种不同的设置来进行实验:
(1)句子级别实验。和检索式对话类似,句子级别的实验是单独判断每一轮选择的回复与真实回复之间的差距。使用k召回率(Rn@k)和MRR作为评价指标。
(2)段落级别实验。为了更好的评价生成台词的整体质量,我们提出了段落级别的评估。在这一评估场景中,所有模型需要生成所有台词,其中第一句台词是给定的,每一轮生成的台词会被加入台词上文中作为输入来选择下一轮的台词。我们设计了两个指标,Pstrict和Pweak。其中Pstrict判断有多少正确回复出现在了原始的位置上,而Pweak则不考虑位置,仅考虑有多少正确回复出现在了生成的台词中。
事实上,没有任何现有模型可以直接用于我们的任务。而我们的任务与检索式对话系统有相似指出,因此实验对比模型采用的是检索式对话系统的相关模型,为了更公平的进行对比,我们将情节加入到这些模型当中。具体的建模方式与对应模型对上文和候选回复之间的建模方式相同。我们也尝试了直接将情节拼在台词上文中,发现效果并不理想。
4.2 实验结果
实验结果如表2所示,可以看到ScriptWriter比现有模型好很多,侧面反映了我们对情节的使用是更加有效的。其中DAM、DUA和我们的模型都使用了注意力机制对句子建模,其也都好于不使用注意力机制的模型。其次,我们发现从Pstrict到 Pweak,我们的模型性能下降较少,这说明我们的模型不仅可以选出正确的回复,还可以更好地将回复放在正确的位置。
表2: 实验结果
表格的后四行是消融实验的结果,其中第一个变种模型没有使用情节表示更新机制,可以看到其性能下降了,这说明我们提出的情节表示更新机制是有效的。后三行分别是取消了一种匹配进行的实验。根据结果,我们发现情节-候选回复匹配影响最大,说明情节对回复选择起到了至关重要的作用。另外两种匹配也都发挥了作用,值得注意的是,情节-台词上文匹配对选择正确的回复位置非常重要。
4.3 探究不同类型情节对模型的影响
图3: 不同类型情节的结果
我们发现,由于数据集中的情节来自于网友撰写,可能存在直接摘抄台词内容的情况。为了对此进行探究,我们统计了情节与台词的词共现率,并据此将数据分为6组,其中0表示情节与台词没有任何词共现,这也是最难的一种情况,可以看到所有的模型效果都很差。而随着词共现率的上升,模型的性能也得到了提高。此外,我们发现词共现率在[0.2, 0.4)的样本最多,说明我们的任务并不简单。
五、小结
尽管文本生成(故事、对话等)已经取得了长足的进步,但目前没有工作探索情节对文本生成的辅助作用。在这篇工作中,受限于数据集,我们探索了用情节来指导电影台词生成的任务。我们的模型能够根据情节被表达的情况动态地选择合适的回复且实验证明情节确实能够为台词生成提供帮助。为了支持研究,我们收集了一个全新的数据集(图解电影)。作为第一个工作,我们还有许多不足。例如,我们没有考虑台词顺序与情节表达的对应关系,此外,其他对于对话状态追踪的工作也可以一定程度地迁移到我们的任务上来。
相关阅读
ACL2020 | 北大提出低资源场景下的对话生成任务定制模型
[关于转载]:本文为“AMiner”官网文章。转载本文请联系原作者获取授权,转载仅限全文转载并保留文章标题及内容,不得删改、添加内容绕开原创保护,且文章开头必须注明:转自“AMiner”官网。谢谢您的合作。