分享人: 李浩然 京东科技自然语言算法工程师
李浩然博士毕业于中科院自动化所,在IEEE TKDE、IEEE TASLP、ACM TALLIP、ACL、EMNLP、COLING、AAAI、IJCAI 等人工智能和自然语言处理领域国际知名期刊会议发表论文20余篇。现任京东科技商品营销文案自动生成项目负责人,基于可控文本生成技术显著提高了自动生成的商品营销文案的信息丰富度、流畅度、忠实度和创意度,曝光点击率高出专业写手平均水平40%,创作商品营销文案超1亿篇,累计引单金额超过3亿。
大家好,欢迎大家来到我在京东做研发系列直播,我是李浩然。今天非常荣幸给大家介绍我们在商品营销文案智能创作方面的一些工作。我的分享有五个部分内容,首先是导言,接下来我会从商品要素卖点增强以及知识图谱,最后是长文案这四个方面给大家分享。
Question :京东云做AIGC文本生成的全景图是什么?
李浩然:这是我们在商品营销文案生成方面的工作全景图。在输入方面我们是多模态异构的输入,我们有商品的图片以及商品的标题,以及商品的知识图谱和商品商详页的文本作为输入。在这些输入的基础上,我们会在里面提取卖点和要素。卖点,就是商品的核心优势,要素其实是对卖点的加工凝练,比如说我们对冰箱、空调的话,它的卖点、要素就包括电机静音,对于能效来说,它就分环保、节能等等。
在模型层面,因为是多模态的输入,所以有文本的编码器和图片编码器。在解码器方面,我们会通过受限解码和复制机制,保持保证解码质量。其次,我们还运用预训练语言模型,以及句间流畅度的模型,以及标点纠错模型,最终输出一个我们想要的文案。文案的题材可能是多种多样的,有短文有长文,也有标题。
Question :为什么说数字人是AIGC技术的集大成者? AIGC文本生成主要落地应用在哪些场景?
李浩然:我们知道,直播导购机器人实际上是由多个模块耦合而成的,包括一个数字人的形象,语音的合成,最后是文案的生成,以及人机对话这四个模块。
我们看文案部分,实际上就是用我们自动创作的机器人来生成的。 这是一段真实的在线上用到的虚拟主播自动生成的商品文案,这个文案实际上字数有五、六百字以上,并且它包含了很多的卖点,我们右侧就是给出了这个视频对应的文案。其他的部分包括还需要满足的一些条件,它和商品要符合,并且不能重复地去描述某些商品的卖点,我接下来就会再给大家介绍我们如何做到以上这些点。
实际上我们在京东的应用还有很多。除了直播之外,首先第一个是在京东APP的发现好货频道,这里面会有一些商品的文案,有一些也是我们机器人去生成的。还有导购机器人,当我们和京东客服进行沟通的时候,我们会给客服发过去一个商品链接,那么客服这时候就会主动地推送一条商品文案,想要给用户去介绍商品的卖点,这时候也有可能是会直接解答用户的一些疑问。
!
第三个是社交电商APP京粉,这里面也会有一些更加生动,包括加了一些图片,加了一些表情,加了Emoji的一些商品文案。
第四个就是给大家展示的直播机器人,还会有一个多商品的写作搭配购,给一组商品,这一组商品包含有同样的特征,比如说它的颜色或者风格是一致的,这时候会给这一组商品生成一样的文案。
Question :AIGC文本生成技术的演变史
李浩然:AIGC文本生成技术实际上在上世纪就已经出现了,最早可以追溯到上世纪的70-80年代。那时候会是一些基于规则的,比如说基于模板的文本。会有一些天气预报,比如说现在的天气是什么,过一段时间又是什么,一直到1990年左右出现了一些基于统计的文本生成模型。最典型的噪音信道、噪声信道模型去用来做机器翻译。
那么进入到21世纪,会出现了神经网络的语言模型。一直到最近,我们能够比较清楚的感知到的就是2015年左右,出现了注意力机制以及复制机制,使得基于神经网络语言模型的文本生成模型发生质的变化,极大地推动了这个方向的发展。
一直到最近的,2017年出现了自注意力的机制、自注意力机制的传播模型,以及预训练模语言模型,又一次使文本生成的技术得到了一个质的飞跃。那么我们如何使文本生成技术在实际的商业应用中进行落地,实际上需要在文本生成技术之外额外要做到一个可控。
Question :什么是可控文本生成?可控又是如何做到的?
可控文本生成这个话题,实际上也是在近三年持续火爆的状态。我们可以看到在2019年之前,在NLP领域的两大顶会上,可能发表的文章只有一两篇,那么来到2019年以及之后,这个文章数量来到了两位数了,说明 NLP的研究者已经注意到可控文本生成这个方向了。
那么我们如何去做到这样一个可控呢?可以从三个点来简单介绍。第一个就是从输入,我们可以去增删输入的文本以及改变文本的结构,从而做到对输出的一个影响。
另外是对词表,因为我们知道想生成文案的话,首先要做到遵守这个广告法,所以说我们其实可以去禁用非法、违反广告法的一些文本,那些优质文本我们也可以加在鼓励词表方面。
当然了,其实我们做的更多的还是在这个模型层次。因为模型上我们能做的更多,比如说我们去改变编码器和解码器的初始化,或者说增加一些辅助任务,想要达到我们的预设的一些目标。
Question :AIGC商品营销文案生成面临的技术挑战和解决方案?
首先对于文本生成来说,它的技术挑战有三个方面,首先总结来说,要文本生成所生成的文案,要看起来是像人写的。比如说,它要满足重要性,就是在描述重要的内容,满足非冗余性,描述的内容不能过多的有重复。
第三点就是可读性,读起来比较流畅。来到电商领域,它就有一些进阶的挑战了,总结来说就是可控以及可信。
那么比如说第一点就是多样性,去描述更加丰富的内容,然后忠实性就是生成的文案要和原始的商品它的属性它的信息是要一致的。
然后第三点就是内容的丰富性。它会包含一些除了商品之外的常识信息,这也是非常有利于用户去了解我们这款商品的。
那么针对这些进阶挑战,我们会提出了四点控制。控制的策略是从多维度进行控制,首先第一点就是基于要素以及多模态多样性的控制。
第二点就是基于商品知识图谱忠实性的控制。第三点就是基于通用知识图谱的内容丰富性的控制。第四点就是基于领域知识拟人化的控制。
Question :生成的文案是多样还是单调,由什么决定?
李浩然:那么我们首先看第一个环节,就是基于商品要素的多模态商品文案的生成。如果去做一个商品方案的话,我们尽量地希望它是多样的、丰富的。我们看什么是多样丰富的。
我们举了两个差不多的 T恤,我们看左边和右边是截然不同风格的文案,我们可以看左边的文案,它有很多的卖点性的描述,包括我们加红的这些文本。看右边这个文案,反过来讲,就是比较乏味单调,这样的文案可能放在很多这个T恤上都是满足的。
我们就认为左边这个文案是多样性的文案,而右边这个文案是单调的文案。我们想要生成多样性的文案,而不是生成右边单调的、乏味的文案。我们是从两个角度去对多样性进行建模。第一点就是商品的多模态,因为我们认为通常来说,用户它分感性的和理性的,感性的用户更多关注到商品的外观信息,外观信息可能关联到商品的图片信息。
第二种就是理性的用户,他更关注的是商品的一些属性信息,商品的功能属性,他就关注到的是商品的知识图谱。
第二点就是商品的要素,实际上商品要素就是对我们所谓的商品功能或者商品属性的一个归纳。还是从三点,重要性、非冗余性和流畅性角度出发。从商品要素的维度,我们就可以把它归纳成描述重要的商品要素,避免冗余的商品要素以及去表达流畅的商品要素。
我们在这里再次展开一下要素,其实我们可以看出来,要素是由两部分构成,首先它是有要素以及要素词。要素就是在介绍这个文案在讲什么事儿,比如说对于一款空调来说,它的要素就包括清洁、送风、操纵、能效等等。
对于能效这个要素,它相关的要素词就包括环保、节能、省电,这样实际上是用具体的词去描述能效这个要素。
Question :如何生成具备丰富卖点的商品文案?
首先第一点就是多模态。我们在利用多模态信息的时候,如何将文本信息和图片信息进行融合,我们使用了全局的CNN,就是ResNet,以及局部的CNN就是R-CNN,通过这两个CNN模型去提取图片的局部和全局特征。我们提取到局部特征之后,就会把它用在注意力机制里面。我们在解码的时候,不仅要关注到文本的局部信息,还要关注到这个图片局部有特色的信息。全局特征我们是用来做解码器和编码器的初始化,想要去引入图片方面的一些先验知识。
我们可以看这个例子,对于一款服饰来说,使用图片信息和不使用图片信息,有一个截然不同的生成文案。可以看到,使用了图片信息的多模态,文案模型会输出很多的和商品外观相关的,比如说颜色以及它的袖子的造型等等,这样就会使商品文案更加的丰富多样。
我们可以看到,右边是一个客观的统计,是用ROUGE来衡量的,ROUGE就是在衡量人工生成的文案和自动机器生成的文案的一致性。
我们可以看到,从家电、服饰、箱包三个类目,使用了图片信息之后,它拟人化或者说它描述的文案和人工生成文案的相近的程度是更高的。
那么接下来就是商品要素,首先就是去描述重要的商品要素,我们可以看到,这是两款不同的洗衣机,左边这款它的特色要素就是能效,它是一级能效的,而右边这款洗衣机它的能效可能就不占优势了,因为它是三级能效,但是它的特色是它的子母双筒。
那么我们从重要的角度来说,希望我们的文案模型能够描述到重要的商品要素,而不去描述那些没有特色的要素。这里我们就使用一个基于强化学习的方式去奖励这个模型,去描述重要的商品要素。那么我们可以看到经过改进的模型,从家电、服饰、箱包三个类目,从重要要素的覆盖度维度上都有一个明显的提升。
那么第二点就是去避免冗余的商品要素信息,因为我们知道商品文案它的长度是有一定的限制的,如何在有限的长度内,使用有限的内容去描述更多的重要的商品要素,这就是我们想要去提升的一个点。我们可以看到如何使冗余信息去避免一个传统的做法,或者说一个通用做法就是覆盖度机制,所谓的 coverage机制。传统的覆盖度机制一般是基于词维度的,我们可以看右上角三个公式,就是基于词的物理意义,就是说如果我们在输出里面描述了某一个词,那么在输入里边,接下来就会对同样的词去减少它的描述。
我们可以看左边这个例子,如果已经描述到了噪音,那么后续它会惩罚噪音,但是这时候就有个问题了,它后续虽然不会生成噪音这个词,但是它还是有机会生成杂音这个词的,因为它是对词粒度的惩罚,它无法检测到两个描述同样的事情但不同的词,那么这样就会导致一个后果,它会出现噪音和杂音,那么事实上这个信息它是重复的,针对这个现象,我们就提出了一个基于要素的覆盖度机制,也就是说我们不是在词维度上去做覆盖度机制,而是从要素维度,也就是说我们会把同一个要素的不同词集合起来。
比如对于声音这个要素来说,我们会把噪音和杂音这两个词归纳到这个声音要素上。当我们检测到这个声音相关的要素,噪音这个词已经生成了,那么和它相关的杂音这个词也会被我们基于要素的覆盖度机制给它惩罚,使它不会产生杂音。这样我们的结果就会使我们在要素维度上减少重复性的信息,也就说去重的粒度是更加适合于我们文案生成这个场景。
那么第三个就是如何去表达流畅的要素。我们看到这里的一个例子就是说,首先它描述了商品洗衣机是一个10千克的大容量容器,那么接下来它又描述到了操控系统,它是无线远程的操控,那么接下来最后它又描述到了它的容量它是可以容纳大量的衣物,实际上也就是说它会存在一个要素的跳跃现象,从容量跳到操纵,然后又跳到了容量,这就会产生了一个要素回跳,实际上它在逻辑上是不流畅的,所以说我们就会做一个简单的处理,当我们检测到某一个商品要素已经结束描述了,我们接下来就会禁止同样的要素去生成,比如说在这里的话它先描述了容量,接下来就描述了操控,那么在最后我们就不会使同样的一个要素容量继续描述了,将它相关的要素词做一个禁止,这样在要素维度上它就更加的流畅,逻辑就更加的清晰。
那么接下来给大家分享我们在卖点增强方面做的一些工作。
首先我们可以分析一下商品的卖点会在哪里呈现,实际上因为我们在输入里面是有非常丰富的商品的信息的,包括我们从商品的标题,从商品的商详页,我们都能拿到非常充分的卖点的文本,那么我们这时候就会思考,既然我们输入里有非常丰富的优质的卖点,那么我们无非就是说如何让输入中的卖点能被我们的输出把握到,把它捕捉到就可以了。
从这个角度我们设计了一个先去提取卖点,然后再从卖点维度强化它的复制的思路。
我们设计了4个模块,首先第一个模块就是卖点识别模块,也就是说这是1个序列标注模型,它的作用就是从输入的大量的卖点文本里面,识别出哪些文本属于卖点文本并把它提取出来。
第二个模块就是卖点选择性编码,也就是说在编码器的编码过程中,我们会有一个选择性的编码,选择性编码是一个门控机制,那么这个门控机制是由卖点来控制的,也就是说它会对输入里边的卖点相关的词做强化,让它编码的表达倾向于去包含卖点的信息。
第三个模块就是双重的注意力一致,因为我们传统的文本生成模型,它的注意力全部放在了原始的输入文本里面,因为我们已经提取出卖点了,所以说如果我们能把解码器的注意力放在卖点文本上,那么我们可想而知就会使卖点更加倾向于生成少了一个名词。
同样来说,对于复制机制,也就是说从输入里面拿某些词放到输出里面的一个环节,也会有一个双重的复制。我们不仅可以从原始的文本里面去复制,还会从卖点里面去复制,这样总的来说就会使我们生成的文案的卖点的密度更加的高。
那么我们以上介绍的是一个显式的抽取,显示抽取其实是有一定的问题的。就是说如果我们的第一个环节卖点抽取环节,他没有抽取到足够量的或者优质的卖点,那么后续的三个模块可能效果就不会理想。
那么针对这个问题我们就提出了隐式的抽取,所谓隐式的抽取就是我们依赖于模型,让模型去自我的迭代,去识别出哪些是卖点。那么我们看这个模型,它的物理意义在哪?
首先我们看到左边这个图是我们给出的一个传播方面的全连接图,它虽然看起来是一个二部图,分别代表了上一层和下一层的节点的一个相连,那么由于上一层和下一层它的节点都是对应同一批的输入里面的token,所以说实际上它也是一个全连接图。
实际上在全连接图的计算过程中,我们可以看到第一个公式就是下一层的是上一层隐层表达的一个加权相加,也就是说它的权重是阿尔法。那么我们看到左边这个图是Transformer的一个截图,Transformer实际上是一个可以抽取卖点的一个经典模型。它就是可以把每个里面有的节点,将这些节点认为是一些词或者是一些句子。
那么这些卖点的节点之间的有连边,这些连边的粗细程度代表着节点与节点之间的相关性。
当我们构造完这个图之后,根据图与图里面的这些节点的一个权重,也就是阿尔法权重,可以通过右边的第一个公式进行迭代。这公式迭代就是每个节点的一个专项得分,然后根据节点与节点的重要性权重进行随机游走,最终会得到一个稳定的得分。
那么稳定的得分,也就是节点的重要性得分。如果我们把这个节点作为一个token的话,我们就可以根据最终稳定的得分s来判断每一个词的重要性。
比如说重要性高的可能就是一些卖点,那么我们可以看这两个公式。实际上它们是有非常大的一个相似性的,就是阿尔法,它们都会有节点与节点之间的一个相关性权重。只不过说左边加权相加的过程是对隐层节点或者隐层表达的一个加权叠加;那么右边是对分数的一个加权叠加,实际上也就是说它们的过程中都是由阿尔法来主导的,这时候我们就会想到我们是不是能将Transformer全连接图里面的阿尔法应用到TextRank里面去,通过阿尔法来随机游走并计算重要性得分,然后将专项得分拿过来,反过来去指导拷贝,使那些重要性得分高的词的copy的概率更高。
那么这就是我们的一个这个模型结构图,首先我们是有Encoder,在里面我们会抽取到这样的一个注意力图,然后在注意力图上进行随机游走,这样就会得到输入的所有Token的一个正确性得分,然后我们把中小得分拿来指导我们的复制机制。也就是说当我们从输入里面复制一个词到输出里面去的时候,我们使用重要性得分作为参考,让那些更重要的文本倾向于被我们复制到。
这样我们可以看从卖点召回率和卖点比例上,都会有一个比较明显的提升。
Question :知识图谱技术如何运用在AIGC文本生成中?
那么第四个模块是给大家分享我们基于知识图谱的商品生成的工作。我们可以看到当我们去描述一个商品的时候,比如说去描述洗衣机的时候,它很多属性是非常重要的,比如说它的容量,我们可以看有的商品是七千克的,有的商品是八千克的,有的商品是九千克的,如果有我们的用户想要买大容量的,他肯定是倾向于去买九千克的,这时候他就会非常关注这个商品的具体的容量是多少,但是容量它有很多种,比如说有7、8、9千克,尺寸也有很多,这些数字对于模型来说学习难度是非常高的,它非常容易去输出一个错误属性。
但是我们知道所有的数字7、8、9千克对应的属性值的键都是一样的,都是容量,这时候我们就会思考,这时候如果我们想要去正确的去输出一个具体的容量的话,我们不妨将具体的容量换成一个占位符,比如说把它换成一个容量,加上一个$的这样的一个占位符,这时候我们知道模型在这里已经马上就要输出具体容量,但是具体容量对应的是多少一个名词?,我们可以通过查看商品属性,比如说查看商品的知识图谱,以这样的形式去把它复制过来。
这样有两个好处,第一个就是模型非常容易学到一个pattern,就是这时候它要输出的是容量对应的属性词。
第二个好处是从通过查看表或者是通过查看知识图谱的形式去生成这样的属性值的话,它的出错的概率就非常小了,它比直接去生成具体的属性值的出错的概率一定是小很多的。总的来说我们就会使用这样的一个改进的复制机制,原始的复制机制就是直接从输入里面去复制词的这样一个形式,我们不管它是一个普通的词还是一个属性值,它都会去复制属性。
那么我们提出的改进方法就是我们在复制过程中先去复制,先去查询,先去知道我们要复制的是属性,就容量这个属性,然后再通过属性去查。
商品知识图谱,相当于两步复制的指针操作,这样就会使我们属性值的描述更加的准确,也更加的丰富。
那么我们在线上使用的时候,还会去针对属性的一个正确性做一个非常强烈的一个处理,因为如果一个属性出现生成错了,它的后果其实是非常严重的。说白了其实是对消费者有一个欺诈的行为,所以说这种错误属性值我们一定是坚决杜绝的。
针对这个问题,我们提出了商品属性的only copy机制。我们看原始的复制机制它是有两部分构成的,当解码一个属性值的时候,这是一款美的变频空调,我们知道在这种情况下定频的属性值是错误的属性,我们来探讨一下错误的属性值是否能够被这个模型去生成。
原始的复制机制在计算定频这个词的解码概率的时候,它是由两部分构成的。第一个部分就是从输入里面去复制这个词的概率,第二个部分是从一个解码词典里去生成这个词的概率。首先来如果从输入里面去复制,这个概率肯定是等于0的,因为在输入里面只有变频这个词,没有定频这个词,那么生成概率我们看到,因为这个解码词典实际上是有很多的词,它可能有几万个词,这里面既有定频,也有变频,所以说定频错误的属性值非常容易会通过这样的方式生成出来。
那么针对这个问题我们就提出忠实度复制,我们不允许它通过生成,也就是说不允许它有可能出错,我们只允许它通过复制,也就是说我们改进的复制机制将第一个公式里的拉姆达的值为一,这样来说第一个公式它对于这种属性词只保留了第一部分概率,也就说只保留这个复制概率,这样我们就可以看到错误的属性值定频由于它复制概率等于0,所以说最终的解码概率肯定也等于0。因此这个错误的属性值一定不会出现在我们生成的文案里,而正确的属性只是变频,因为它是处于输入里面的,它的覆盖率一般是大于0的,所以说它有机会被我们模型输出到文案里面去,最终的结论就是避免了错误的属性值的一个生成。
那么我们除了使用商品知识图谱之外,我们还会用到通用知识图谱来生成我们的高质量文案。我们可以看到这样的一个例子,在这个例子里我们可以看到这个商品知识图谱对应的属性和属性值是非常少的,比如说它的口味是鸡肉味,它的产品品牌和品牌产地包装的属性值可能是非常稀少的,给我们能提供的信息也是有限的。
但是我们可以看到,如果是我们拿着商品的一个种类,比如说在这里方便面去映射到通用知识图谱里面,那么通用知识图谱就能给我们提供更多的有用的信息,用来去辅助我们生成信息量更加吸引人的商品文案。
但是我们在使用过程中也会遇到一个问题,比如说有一些通用知识图谱它给我们带来的信息可能会很多,但是也有会有些噪音。
比如说有一些方便面,我们当前商品的方便面可能是荞麦做的,但是有些方便面可能就是小麦做的,那么因为在通用知识图谱里面,它可能存在既有小麦又有荞麦,一些错误的属性,对于我们这款商品来说,它的错误说明就是小麦也有可能输入给我们模型,这样的后果就是我们可能生成出错误的属性值,就是小麦。
那么针对这个问题,我们就提出使用 token的类别与embedding,去让我们的模型知道我们的输入信息来自于产品信息,来自于当前商品对应的商详信息,以及来自于当前商品查询到的通用知识图谱的信息。这样有个什么好处?当我们模型在使用这些信息的时候,会有选择性的去使用。当我们使用这个商品对应的属性或者商品对应的信息的时候,它会觉得这些信息属于当前商品,因此它们出错的概率就非常低。
那么使用这个商品通用知识图谱的时候,由于它里面可能存在噪音,那么它既然知道是来自通用知识图谱,它会选择性的去使用。
我们看一个这个例子,这是一款太阳眼镜,我们通过通用知识图谱能够查询到太阳眼镜的目的,是减轻眼睛的疲劳和强光的刺激。那么我们输入这个信息到模型里面去,会非常好的被我们模型去捕捉到,去从而会把太阳眼镜给我们用户消费者带来的一个好处,描述在本文案里面,使用户对眼镜的购买欲望更加的强烈。
我们也是能够看出来我们使用的通用知识图谱确实能够给我们的模型有一个非常好的提升。
Question :面对难度更高的长文案生成,如何提高语言模型能力,并提高解码速度?
李浩然:那么最后给大家分享一个商品长段的生成,长文案其实对于短文来说是一个这样的概念。通常来说短文案就是100个字以内,而长文案可能达到三四百甚至上千字,而我们长文案的一个非常重要的落地场景就是直播场景,因为当我们去直播一款商品的时候,直播的剧本一般都是几百字,比如说四五百字,所以对于长文案来说,它都有哪些挑战?
首先来说,越长的文案它对语言模型的要求就是越高的,因为短文案可能就是生成几十个字,甚至100个字, 100个字以内,但是长度上来说它就生成几百个字,所以说这时候我们就是需要去提高语言模型的能力。
那么第二个方面就是在解码的时候,它用的时间是更长的,比如说我们去生成一个100个字以内,它可能需要的就是一秒,那么如果我们生成500字甚至是1000字的话,它就可能需要生成5秒至10秒,这样更长的一个时间。更长的时间实际上我们在线上应用的时候,我们的用户和我们的商家用起来,使用感受可能就没有那么好,所以说我们是需要去提高解码的速度,两个方面我们需要去改进。
如果是去提高语言模型,一个非常容易想到的方法就是使用大模型。那么大模型在最近几年里的发展是突飞猛进的。我们可以看一个大模型的摩尔定律,在过去的几年内大模型的参数量是以每年10倍的速度增长的,而我们使用的GPU的增长速度是远远低于我们大模型的参数量增长的。
在学术界,我们对预训练语言模型或者大模型的研究也是有一个发展趋势。首先它是会有一个通用的语言模型,最早出现的一些 预训练语言模型,包括BART用来做NLU任务,还有用来做文本生成任务。 BART模型后续,人们意识到知识对于预训练语言模型是非常重要的,所以说出现了一些基于知识增强的语言模型的预训练。
比如说主要是基于通用知识的,包括 KGPT以及ERNIE,因为我们是要做电商领域场景的,所以说我们针对这个趋势,思考我们是不是可以做一个基于领域知识增强的预训练语言模型。我们提出了 K-PLUG预训练语言模型。那么针对通用知识,首先我们提出了一个 Prince模型,这个模型的动机使知识能够更好的学习,用来做文本生成的下游任务里面去。
我们给出一个简单的例子,首先上面这个例子是 MASS模型,一个通用的可以用来做文本生成任务的预训练语言模型。它在预训练过程中是逐词去预测的。比如说我们在输入里面Tom Cruise was born in,它在预测 New York City的时候,它会把in作为输入去预测new,接下来第二步会把 new作为输入去预测York,也就是说它是逐词的去预测。那么即使模型完成了训练,我们也很难去断定模型是否真正的学到汤姆克鲁斯的出生地是在哪。因为它在预测York的时候给了非常强烈的一个指导信息的,就是new。因为我们知道一旦出现了New York和City后面这三个词是非常容易被语言模型去学习到的,但实际上这个知识它不一定能学到。
针对这种现象我们就提出面向通用知识的PRINCE,我们让它一次性去生成。比如说我们在这个例子里面,我们使模型一次性的去生成New York City。在生成york这个词的时候,我们不把new作为一个输入,在生成city的时候,我们也不会把york作为一个输入,这样我们训练下来就会使模型的知识学习能力更强。
那么第二方面是我们针对领域知识做了一个K-PLUG语言模型。首先我们是定义了4类领域知识,首先第一类是商品的知识图谱;第二类就是商品的要素,这是对商品知识图谱的一个总结;第三类就是商品的类别;第四类是商品的卖点。
那么针对这4类知识,我们定义了5个预训练的目标,首先第一个任务是知识掩码的语言模型任务;第二个任务是知识掩码的文本生成任务。
这两个任务实际上和传统的知识掩码语言模型任务,还有传统的文本掩码文本生成模型的区别就是我们在选择token的时候,会将这个知识作为更优先的去掩码。
那么第三个任务是商品要素边界检测任务,就是一段文本它可能里边有多个要素,我们检测到要素a对要素b的一个跳跃过程,它实际上是使模型学习要素知识。第四个任务是商品的类别分类,就是我们一段文本,我需要使模型意识到它是在描述冰箱还是在描述空调。
第五个任务就是商品的卖点短语或者卖点句子生成,这个主要使文本生成的能力更加强。
那么我们看使用了领域知识预训练的语言模型,它从三个维度上比原始的或者说通用的预算模型有一个提升,第一个是它的拟人化更好,从ROUGE我们可以看到,因为ROUGE就是衡量机器生成的文本和人工文本的一个近似度,我们看ROUGE是比非预训练或者通用训练有一个更大的提升。
那么第二点是它描述的更加丰富,我们可以看到我们的领域训练的语言培训K-PLUG能生成的文本达到了83个字,而且非预训练或者说通用预训练模型它只能达到60个字左右。
第三点它的可信度更高了,因为我们人工审核的时候非常关注可信度,那么我们使用了领域知识训练K-PLUG模型,人工审核通过率会更高,能达到90%,而其它模型只有40%和76%。
那么第二个方面是我们在生成长文的时候如何去提高解码速度,我们如果去串行的生成一个500字文案,就是先成第一个字,再生成第二个字,一直到生成500个字,它肯定会比生成100个字的时长更长的,也可能会是一个线性的增长。比如说生成500字是生成100字的5倍,那么为了提高这个解码速度,我们就提出了一个并行的解码的策略。我们就不是去从0~500一次一次的去生成,我们可以并行的生成多个短文。比如说我们一次性生成5个或者6个甚至更多的100个字一类的短文,然后通过某些拼接的摘要的技术把它组装成一个长文。
那么针对这个流程,虽然它能提速,但也会给我们引入更多的挑战。首先我们要生成多个短文,这多个短文的信息量一定是不能重复的,或者说它们一定是多样化的,那么这个点其实是我们重点要突破的。
那么如果我们能够生成多样性的散文,后续可以用一些抽取式摘要的技术把它组装成一个常长文的,比如说使用MMR技术或者使用整数线性化技术都是能做到的,。所以说我们的重点在第一个难点,就是如何去并行的生成多个多样化不重复的短文。
那么知道其实在提高多样性的方面是有这样的一些工作的。
首先我们可以看,如果因为我们都是使用Beam search这样的方式,在Beam里面会是有多个候选的。但是我们知道 Beam里的多个候选的重复度是非常高的。比如说我们给大家展示的这个例子,它实际上Beam里所有候选的前半部分绝大多数都是完全一致的,可能不重复的只有在后面部分,这样的一些候选实际上我们就没办法用。传统的去提高Beam里候选的多样性的一个策略,就是Top k或者Top p策略。但是这个策略的基础是在排序的过程中引入了一些随机的噪音,那么这些噪音实际上也会对流畅性造成损失。
所以说针对这种现象我们就提出如何不破坏原有的语言模型基础上,我们去做一个多样性的解码。因此我们提出了一个多样化Beam Search的策略。我们看传统的Beam Search在计算候选得分的时候,实际上是对候选里的路径,去独立的计算得分。比如说我们右上角的这个例子,它在计算这款耳机和无线耳机的时候,会发现这两个路径或者这两个候选的得分是最高的,但是这两个候选它是由耳机这个词作为重复的信息,因此它会引入一些重复信息。
那么针对这个现象,我们就是提出在计算候选得分的时候,我们不是将候选进行独立计算,而是将候选作为一个集合去做一个整体的得分的计算。比如说我们在计算这款耳机和无线耳机,虽然说它们独立相加出来的分非常高,但是由于它们都存在耳机,这一个重复的词,所以说我们在这给它加了一个惩罚,比如说这里的惩罚因子是10,那么候选的总得分就是非常低了。
那么这款无线蓝牙耳机这样一个候选,由于它是没有重复性的文本的,所以说综合下来它的计算以集合为主计算得分的时候,它就会被第一个独立得分计算出来高的集合,它就更有优势,这样我们就成功的选中了。没有重复的集合作为我们的候选,最终使我们Beam里候选的多样性有一个提升,但是我们知道其实这个策略是一个非常强的去重策略,一旦输入里面有重复的文本,它就会立马就被我们检测到,最后大概率就会被禁止掉了,这样实际上对我们语言模型的解码能力是一个非常大的考验。
我们也观察到,如果我们使用多元化的Beam测试,从头到尾比如说0从第一个词一直到第一百个词,它一直使用这样的一个解码策略的话,它会使可读性有一个非常大的损失。我们分析为什么会这样,因为在这样的一个策略下,实际上每一个候选它都是作为一个Beam里的单一的一个去计算的,也就是说丧失了Beam Search的一个优势。屏幕测试的优势其实就是去尽量的选用全局最优的一个候选。
那么针对这个现象,我们就提出了一个多Beam的概念,就是我们将多个候选分别放在多个Beam里面去。这样有个好处就是既能满足多样性,又能充分发挥Beam Search的优势,让每一个候选有一个单独的Beam去扩展,使它的可读性有一个非常大的提升。
那么这个策略后续也会有一个问题,比如说多个BIM,因为它会是独立的去解码的,多个Beam之间它也会存在一些冗余性或者重复的文本。
那么针对这个问题我们就提出了第三个策略就是多BIM,它是交互式的一个解码。那么我们比如说在交互的时候,在这里发现第一个Beam里它已经解码出轻量化了。
那么第二个BIM在解码出轻量化之后,由于和第一个BIM是重复的,所以说这时候我们会把重复的轻量化这个词禁止掉,从而使Beam之间它的重复信息也有一个非常大的避免。
那么最后我们看一下使用三个策略它的一个解码的效果。
首先第一个是只使用单一Beam,从它的 distinct II和DC。所以说它是衡量最终生成的多个候选,多样性的一个衡量指标。如果越高的话,它多样性越好。从单一闭目一直到多闭目一直再到交互式的多闭目,实际上它的多样性是有一个非常大的提升的。
下面也是一个例子,红色部分是多个候选之间重复性的信息。我们可以看到,依次使用三个策略之后,重复信息有一个非常大的减少。一直到最后一个交互式的多弥补,基本上它的重复信息就非常少了,这样也就会满足我们最终的要求,去生成多样化非常高的多个候选,从而是满足我们最终生成一个长文案。