宋睿华、万小军、黄民烈谈自然语言生成现状:关于创作、多样性和知识融合

10月22日,在2020年中国计算机大会(CNCC)上,中国人民大学长聘副教授宋睿华、北京大学教授万小军与清华大学长聘副教授黄民烈围绕 “自然语言生成” 的主题进行了演讲。
尽管深度神经语言模型让生成一段通顺的自然语言越来越容易,但人类的创作能力却不止于此。在此次演讲中,宋睿华副教授从创作的独特性出发,探讨了人工智能是否可以像人类创作者一样写出新颖的比喻,或编排出有戏剧冲突的台词。
万小军则认为,能够生成多样化的文本是很多文本生成应用的重要需求之一。尽管基于深度学习的自然语言生成取得了令人兴奋的进步,但目前自然语言生成仍然面临生成文本的多样性不足等问题。因此,在这次演讲中,万小军着重探讨了多样化文本生成技术。
黄民烈副教授提出,现有的语言生成模型对知识的表示与利用存在明显不足。即使是强大的GPT-3,也存在明显的知识冲突问题,尤其是常识问题。因此,黄民烈介绍了如何将知识融入语言生成模型的研究尝试,尤其是在解释生成、归因自然语言生成与故事结局生成等方面的应用。
以下是演讲全文,AI科技评论进行了不改变原意的整理。文章已经经过宋睿华、万小军、黄民烈三位老师的修改及确认。
1

宋睿华:人工智能真的在创作吗?

人工智能真的可以创作吗?这可能是许多人心中的问号。用更学术的语言表达,人工智能创作又叫作“自然语言生成”。但,生成等于创作吗?
在这里,我想将这个问题分成两个层次进行探讨:
层次一:如果语言模型生成了一段诗、一篇文章或一条新闻,我们能将其称为“创作”吗?
层次二:一说到自然语言生成,大家很容易想到类似GPT-3的语言模型,即基于深度计算的一些生成模型。此“生成”与彼“生成”的含义相同吗?是否一定是生成模型才能叫作“生成”?
在这次演讲中,我想围绕“人工智能创作”的主题,给大家介绍三方面的内容:(1)如何评价人工智能创作?(2)人工智能可以创作比喻吗?(3)人工智能可以创造剧本吗?
1、如何评价人工智能创作?
我们在NLPCC 2019上发表了一篇论文“Evaluating Image-Inspired Poetry Generation”。
上图是我们为评价由图像生成诗歌的质量所设计的一个界面。我们在屏幕中间放了一张图。在写诗的时候,我们通常以图片作为视觉输入,从图中抓取或扩展一些关键字,然后将这些关键字梳理成一首诗。在图片关键字已经确定的情况下,我们要如何生成不同的诗歌并比较?
在上图中,这4首诗由4种算法生成。我们将这4首诗从1分到5分进行打分。比如打3分的标准是文字的顺畅,那么,如果文字有错或晦涩难懂,则酌情减分;如果有一两句文字比较惊艳,则酌情加分。
如图所示,算法从图片中抽取了“城市”、“美好”以及一些扩展的关键字,然后写成了一首诗。在这个过程中,我们发现:遇到“城市”这个词时,AI最常用的形容词是“美好”。如果一位人类作家写的诗歌里出现类似的句子,大家可能就会觉得这不是创作,而是“复制、粘贴”,
所以,我们在评价诗歌创作时,一般是从生成的角度去评价诗歌是否通畅连贯、是否有想象力,却往往忽略了另一个要素:即这首诗歌有没有创新性?
经过调查,我们发现,人们很早之前便讨论过这个问题。他们把“创新性”分成两个类型:一,与过去的诗集或训练集相比是否有创新性(Novelty);二,与自己所写的诗歌相比是否有创新性(Diversity)。
我们提出从Novelty(新颖性)与Diversity(多样性)两方面来考量诗歌的创新性:
1)Novelty
Novelty是被广泛采用的一种标准,主要内容是:与训练数据作比较。有了训练集后,我们对照N-gram来查看有多少词语时曾在以前的训练集上出现过,又有多少词语是新的搭配。
2)Diversity
Diversity是自己与自己比。比方说,如果给出的关键字是“城市”,你能生成多少不一样的词语。
在实验中,我们发现,这两个指标与Human Rating(人为评级)的结果很不一样。蓝色线为Human Rating的结果,橘色线为Diversity的结果,绿色线为Novelty的结果。
Novelty、Diversity与Human Rating的相关性居然为负值,这是为什么呢?原因可能是:在人类眼里,有些诗写得很好,但不够创新,有可能是背诵,而有些诗很新,又可能不通顺,所以在Human Rating中得分不高。我们希望能够找到一个平衡点,同时保证诗歌的通顺性和创新性。
我在做小冰写诗项目时遇到一个问题:用户可能会反复上传一张图片,只是想看看AI能写出什么不一样的诗歌来。也就是说,生成系统是一个不确定的系统:输入不变,但输出的期望是不同的。这时,我们发现:以往模型在做评判时,往往会选择评价最好(One-Best)的输出,评价最好往往不能代表系统实际应用的效果。
Average-Random:如果有足够多的资源,我们可以让系统随机生成多首诗,给所有诗歌打分之后再算平均分,相当于多次采样,效果比较接近实际应用的效果。
One-Random:如果在不同的系统上随机选择,One-Random与比较理想的Average-Random之间有超过0.9的相关性。
也就是说,大家在做一个不能确定的系统时,不要去比它的best,取一个random的结果和另外一个random结果比更接近实际效果。
2、人工智能可以创作比喻吗?
想到探索人工智能是否可以创作比喻,是之前有一位实习生跟我说:“老师您知道吗?在网上有一种说法,不管是什么话,后面加一个“爱情也是这样的”,都是成立的。”她给我举了个例子:“人有两条腿,爱情也是这样的。”
我的同事A便说:“你的意思是说:爱情总会走的吗?”这时候同事B便说:“为什么不是爱情总会来的呢?”再结合他们的背景,一个有男朋友,一个没有男朋友,我就觉得这个对话很有趣。
当时我就发现:在做比喻的时候,人无非是找到了一个本体,一个喻体,然后同时找到了一个自圆其说的解释。这个解释未必要非常有逻辑,只要有点联系、能自圆其说就可以。就像她们的对话中,可以说是“来”,也可以说是“走”。
后来我们发表了一篇论文《'Love Is as Complex as Math': Metaphor Generation System for Social Chatbot》(CLSW 2019 Outstanding Paper Award)。
在用AI创作比喻时,我们并没有采用生成模型,而是想了一个新的模式。
首先,我们确定本体(“爱情”)和喻体(“中国足球”),然后用一个很普通的Word Embedding(词嵌入)把它们投在二维平面上。大家可以看到,在爱情旁边有非常多相关的词语,如“长久”、“忠贞”、“婚姻”等,而中国足球旁边也有非常多相关的词语,比如“开场”之类的词。但这些词都不适合用作“爱情”与“中国足球”之间的连接词,因为它们跟其中一个词太接近,却跟另外一个词特别远。
最后,我们发现,最管用的是中间这些词,比如“未来”。我们可以说:“爱情像中国足球一样没有未来”。如果能输出这样的比喻,那就非常妙。
然后我们就进行了一些尝试,发现效果还不错。比如说,在下面这张表里,爱情可以跟数学相比,两者都非常复杂;爱情可以跟股票比,都会贬值,等等。
后来我们真的生成了这样一句比喻:爱情就像葡萄酒一样,对程序员来说都是奢侈品。
除此之外,我们还有很多很好的例子。比如说,爱情就像脂肪,是点点滴滴的积累;孤独像是空无一人的车站。当然,也有很多不好的例子,比如恋人像是可靠的报表,或者金钱就像垃圾,使人腐败。
我们发现,在对话中,人们也很喜欢这样的比喻,并通过两段式来询问,比如说:爱情就像脂肪,你知道为什么吗?这会引起人们的兴趣,经过一个解释,人们的Follow-Up Rate会比陈述句涨一倍。
3、人工智能可以创作剧本吗?
我们今年的一个工作是:人工智能可以创作剧本。
故事是非常难生成的。但,我们有没有办法让人去写大的情节,然后让机器去写小的台词呢?
上图展示的是我们从《阿甘正传》中抽取的一段训练数据。情节是:珍妮不喜欢回家,为了陪珍妮,阿甘也决定晚点回家。
右边打对号的句子是我们根据这个情节检索出来的对话:
阿甘:“妈会担心我的。”
珍妮:“再坐一会!”
阿甘:“好,珍妮,我留下来。”
再比如,我输入一个情节:我不喜欢你,请你不要再纠缠我。那么,如果给出第一句“走开”,那么接着会生成什么呢?如下图所示:
生成的结果加了很多戏,大家可以从台词里头看到一些有意思的东西。
现在,我们回到最初的问题:生成是创作吗?针对这个问题,我给出三个观点:
  • 创意性的度量很重要;

  • 新颖的组合(比如比喻句)会给用户带来耳目一新的感觉;

  • 最后,我们希望人工智能不要拘泥于用生成模型,最重要的是给大家带来新意和乐趣。

2

万小军:多样化文本生成

文本的生成任务有很多类型,可以分为文本缩写、文本改写、文本扩写。
缩写里面最典型的是“摘要”,改写里面最典型的是“文本复述”,扩写中最典型的则是数据到文本的生成,例如从一个报表中生成一个文本段落去描述报表中的数据。每一个任务都有很多不同的应用。
下图所示是一些神经网络模型,用于文本生成,也是现在大家做研究用的最多的模型。
总体而言,文本生成离不开这几个模型:序列到序列模型,VAE模型,Transformer模型,以及GAN等。这一系列模型都可以用在任何一个文本生成任务上。我们也可以对这些模型进行改造,做一些调整。这些模型基本上是万金油。
但是,虽然这些模型在一些指标上已经取得了不错的结果,但在分析这些模型最终生成的文本时,我们会发现几个主要的问题:
  • 多样性(Diversity)差:最后生成的文本有很多类似的。
  • 连贯性(Coherence)差:生成多句子文本时没有很好的篇章连贯关系。
  • 保真性(Faithfulness)差:最终生成的文本总会出现一些信息错误,与所输入的数据或素材不相符。比如我们输入的数据中写的是“张三的年龄为18岁”,但生成的结果可能是“李四的年龄为18岁”。
这些问题阻碍了神经文本生成模型的应用。
当然,我们也有很多方法去研究如何提高多样性、连贯性与保真性。比如,现在相当多比例的文档摘要论文都在研究如何提高生成的摘要的保真性。
不同的文本生成任务对多样性的需求是不一样的。比如文本复述、对话生成、故事生成、Data2Text,对多样性的要求就比较高,而机器翻译、自动文摘、ARM2Text对多样性的要求就比较低。
下图显示了一个从数据到文本生成的例子。我们希望:虽然你输入了同样的数据,但可以生成如右边所示的具有不同表达的简讯,这样就可以将两篇简讯都发布到网上,让不同的人看到不同的版本,增加目标受众。
什么是文本复述的多样性?文本复述对多样性的定义表现为:
  • 定义1:输出与输入不相似
例子:梅西获得了六次金球奖 => 金球奖六次颁给了梅西
  • 定义2:同一输入的多个输出不相似
例子:梅西获得了六次金球奖 => 1)金球奖六次颁给了梅西;2)小跳蚤获颁六次足坛最高个人奖项
  • 定义3:不同输入的输出不相似
例子:梅西获得了六次金球奖 => 金球奖六次颁给了梅西
C罗获颁五次金球奖  => C罗获得了五次足坛最高个人奖项
总而言之,就是把一个句子改写成另外一个句子,然后保持语义不变。
针对三种不同的定义,评测指标也会不同。比如定义1可能是用Self-BLEU来评价,定义2是用P-BLEU来评价,定义3是用BLEU来评价。
文本复述的多样性对写广告推文非常有帮助:发一个范文过来,写成1000篇不一样的推广文,然后发到网上,这样受众范围也会提高。
在文本复述中,要如何提升文本的多样性呢?方法主要如下:
Stochastic Decoding:在解码一个词时,不是选择概率最大的那个词,而是选择Top K个,或概率之和加起来不超过P的Top词汇,然后从Top的词中再随机选一个词作为输出。
如果每次都选概率最大的,会导致多样性变差。如果你增加一定的随机性,多样性可能会提升。
Unlikelihood Training:在训练过程中,要求要解码的词不要与某些已出现过的词重复,即让已出现过的词的解码概率尽量降低。
CVAE(条件变分自动编码器):通过采样符合特定分布的不同向量得到不同的输出。
Syntax Exemplar-based:给一个句子加上另外一个特定的句式,并要求最后生成的文本满足特定的句式。通过指定不同的句式能够生成多样化的文本。
我们自己的一个方法是基于C-GAN(条件生成式对抗网络)框架的DivGAN模型。
这个模型包括一个生成器和一个鉴别器。鉴别器是要鉴别生成的文本是不是一个真实的文本;而生成器是根据输入去做一个编码,然后从正态分布中采样z,将z与编码拼起来,最后做解码器的输入。我们希望通过不同的z来获得不同的最终解码结果。
但如果只用这个模型的话,我们会发现z对最后生成的结果影响有限。虽然z有变化,但最后生成的结果比较一致,并没有实现生成文本的多样性目标。
因此,我们引入了Diversity Loss,使得模型生成结果的变化相对采样向量的变化更大。也就是说,z的变化能够引起最终生成结果的变化。
引入Diversity Loss之后,我们的实验结果如下:
我们知道,所有模型最终都会为每一个输入去生成三个如上图所示的结果,这三个结果会算一个Pairwise BLEU,即中间的P-BLEU是最重要的结果。如果P-BLEU比较小,则代表最后生成的三个文本之间的相似性比较低。
比如在Transformer+sampling中,P-BLEU比较低,但BERT Score也比较低。这说明它确实生成了三个不同的结果,但这三个结果与原始文本之间的语义关联性比较差。所以综合来看,这个方法虽然简单,但也不够好。
而我们的DivGAN方法,既能够保证最终生成的文本与原始输入的语义保持一致,又能够让它生成的不同结果之间差异性比较大。下图的人工评价也表明了这一点。
文本多样性可控的程度是怎样的呢?比如将一个句子给模型修改,模型最大能修改到什么程度?有些句子只能修改一点点,而有些句子的改动可能会非常大。每个句子的可修改程度是不一样的。
此外,我们要控制多样性的粒度,以及针对不同的复述方法进行多样性的控制(比如有监督、无监督)。
除了文字的表达多样性以外,还有内容的多样性(例如Data2Text) 。
如下图所示,右边是两个人工写作的结果。我们发现,人在写的时候并不是把所有的数据都写进去,而是在其中挑选不同的数据,最后生成一个不同的结果。相当于选择不同内容,最后再去对不同内容生成不同的文字表达。
最后,总结一下:我认为多样化文本生成是满足人类个性化、差异化信息获取与阅读需求,以及满足人类“喜新厌旧”心理需求的关键技术手段。
3

黄民烈: 基于预训练模型的语言生成

大家都知道,现在预训练模型很火。我想与大家交流的第一个问题是:预训练模型学到了什么、没学到什么?
BERT模型不是用于语言生成,而是用于编码与语言理解。有些论文介绍到,现在的预训练模型能够较好地编码一些词性、实体信息、句子里词语之间的修饰关系。
此外,预训练模型在语言填空上做得也不错。
但是,在处理否定词、频度副词、句子中存在误导性token等语言时,预训练模型的表现就不是很好。比如既说Birds can fly,又说Birds cannot fly。或者加一些误导性的词,比如“Talk?”时,模型的回答是“Birds can talk.”但这个回答明显是不符合事实的。
再看看BERT对数字的处理。BERT对于数字的处理只能基于数字,而非真正地理解语言本身所表达的含义。如下图所示,每句话的语义是差不多的,只是句式不大一样。当要求预训练模型在Mask空上填写“older”或“younger”时,我们可以看到,第一句话的准确率高达96%,但最后一句话的准确率只有12%。这说明,BERT并没有真正理解这个句子所表达的意思。
再看看GPT-3的表现。GPT-3在问答(Q&A)与常识知识方面的表现很不错。
如下图所示,如果你问一些类似的问题,它能给出很好的答案。如下图右边的标绿文字所示,当询问“为什么动物不是拥有三条腿”时,它能回答出来:“因为如果是三条腿的话它们会摔倒。”而蓝色部分的问题,其实比较少人讨论谁比谁重,而关于这类问题,GPT-3的答案准确率能达到80%左右。
GPT-3会做一些常识推理的任务,但还会“胡扯”。如下图所示,当询问GPT-3说长颈鹿有几只眼睛时,它会回答“两只眼睛”。但问脚、蜘蛛、太阳等有几只眼睛时,它还是“一本正经”地回答,答案不对,但还蛮有意思的。然后右边的答案也都是不对的,因为美国直到1776年才成立,在此之前并没有美国这个概念。此外,GPT-3关于未来的预测,也顶多是预测,不能确定对错。所以容易看到,GPT-3其实不知道什么该说不知道。
至于语言生成,下图左边是论文“The Curious Case of Neural Text Degeneration”里面的结果,右边是我们论文里的结果,即用GPT-2生成故事。
故事生成涉及到常识,即给定第一句话,希望去生成后面的内容。你会发现,如果用预训练的GPT-2,就相当于是zero shot,不在数据上微调的话,会生成很多重复的内容,同时逻辑也不是很对。而如果在任务数据上做一些微调,结果依然会重复。我们把这个叫作“重复的陷阱”。
现在大家都在讨论AI的bias(偏见)、fairness(公平)与security(安全)。如下图所示,GPT3所生成的结果中,也会包括种族歧视、性别歧视等内容。
如果要让一个GPT的模型或一个BERT模型生成更好的话,我们要怎么做呢?
有几种可能的途径:
途径一:想办法让模型拥有更多的知识。比如在预训练模型上,我们可以更大概率去Mask实体而不是一般词,再让模型预测出来。
途径二:在做预训练任务时,想办法让实体align(对齐)到知识库上。然后将BERT的表示与知识库实体的表示对齐,让它们互相预测。比如刘知远老师团队的工作基本上就是这个思路:一方面是增加实体的Mask的概率,另一方面则是实现实体和文字的描述对齐,然后用这种对齐信息去做预测。
途径三:设计领域相关的预训练任务。我们今年发表在EMNLP的一个工作:“Sentiment-Aware Language Representation Learning with Linguistic Knowledge”。比如说,“It's not a good movie.”那么我用一些无监督的方法就能大概预测出“good”是一个积极的词。
然后,在做预训练任务时,我对这种信息进行编码。在预测的时候,不仅要让它把“good”这个词恢复,还要让它判断是形容词还是动词,是一个positive的词还是一个negative的词。通过这种方式,我们能够改善它的情感分类性能,让它有更强的情感表达能力。如下图所示,我们在sentence-level与aspect-level的情感分析上都显著地提高了结果,应该是目前的一个SOTA。
我们用的第二个技巧是knowledge-enhanced post training(知识增强后训练),当运行的预训练模型的知识不够时,把知识库里的知识用一些模式(可能是人写)将其变为自然语言的描述。
比如说,Bus is a car(公交车是一种车),然后说:cross street (穿过街道)会 causes accident(引发事故),类似的词变成上述相似的句子之后,重新训练GPT的模型,再看它的表现。上述的例子可以证明知识增强后训练可以显著改进文本生成的性能。我们今年发表在TACL的论文就是讨论如何用知识库的信息重新训练预训练模型,让模型在故事生成上的表现更好。
那么,如果是要生成带常识的信息时,应该怎么做呢?比如给出四句话,希望生成一个故事的结局,但结局的生成其实没有那么容易,因为结局要符合事件发展的因果关系。或者是给一个statement(陈述),陈述的内容是:The school was open for summer,希望生成这个陈述的解释。
无论是生成解释,还是讲述一个故事(即给一个开头,要去续写这个故事),都要与认识世界中的常识图谱对齐。如果要在GPT的基础上做一个更符合知识和常识的生成,那么一定要有更强的控制。
为了施加更强的控制,我们可以把文本 align到一个特定的图谱上,然后在图谱上动态地做多步推理(Multi-Hop Reasoning);推理完成后,再在每一个解码步骤上选择这个词应该来自图谱,还是来自一个正常的词表。
这就是一个结合图神经网络去进行推理的过程。
我们做了几个任务,包括解释生成、归因自然语言生成(abductive NLG)、故事结尾生成等。归因自然语言生成指的就是:给出开头与结尾,希望模型能够生成中间的情节。
在做这些任务中,我们可以看到一些比较有趣的case,比如一个人去电影院买玉米和刀,但我们知道,刀肯定是不会在电影院卖的,所以我们会生成“Knives are not sold at the cinema.” 通过注意力机制,我们可以看到模型是怎么推理的,怎么一步一步地在图上选择节点来做归因生成。
那么,在自然语言生成上,我们面临着什么样的问题呢?首先是重复,这也是现在的GPT模型面临的一个重要问题;其次是信息量少,不够多样性与具体性;此外,数据的生成要忠实于输入的数据;最后,在对话的过程中,我们要怎么样去控制长文本生成的一致性,让文本生成更加有连贯性、保持一致。这都是一些比较基本的问题。
我们希望能够更好地使用 low-frequency knowledge (低频知识)。现在的预训练语言模型对高频知识的掌握都非常好,比如你问奥巴马是哪一届的总统,或哪一届的总统是谁,它都能很快答出来。但这些模型处理低频知识就不是很好。
此外,我们想要对生成施加更明确的控制,即按照自己的方式去生成。比如现在GPT去做故事生成,很难改变它的逻辑。
另外,我们希望能够引入 Planning 机制。事实上,当一个人在写长篇小说或写诗时,其实是分阶段的,先有情节A,再有情节B、情节C等等,是一个分层级规划的过程。
最后,我们希望是Grounding(落地)的,即生成的信息能够对应到一个真实世界的场景上。比如生成的文本信息是说:我今天摔了一跤,摔了一跤可能意味着你流血了、要去医院,等等,都是能够联系到认知的现实世界场景上的。
(0)

相关推荐