专栏名称: 图灵人工智能
人工智能及其他科技学术前沿、机器学习、图像识别、语音识别、自动驾驶、自然语言处理、脑机接口、云计算、大数据、物联网、机器人、天文物理、生物科学、数学、区块链、比特币、计算机等学术前沿知识、报告、讲座等介绍。
目录
相关文章推荐
51好读  ›  专栏  ›  图灵人工智能

AIGC的浪潮下,文本生成发展得怎么样了?

图灵人工智能  · 公众号  ·  · 2023-01-24 00:00

正文

点击上方“ 图灵人工智能 ”,选择“星标”公众号

您想知道的人工智能干货,第一时间送达

转自机器之心
编辑:小舟
1 月 12 日,在机器之心 AI 科技年会 AIGC 技术应用论坛上,澜舟科技创始人兼 CEO、中国计算机学会 CCF 副理事长、创新工场首席科学家周明发表了主题演讲《文本生成研究进展》。


以下为演讲的详细内容,机器之心进行了不改变原意的编辑、整理。

我今天主要介绍一下文本生成,尤其是可控文本生成目前的几个重要研究进展,包括文本生成基本方法与应用、文本生成中的可控方法研究、文本生成中如何融入知识和常识,长文本生成方法以及文本生成中的解码方法。在此之后,我会介绍一下澜舟科技在文本生成方面的最新项目。


首先我来介绍一下文本生成的任务和主流的框架。文本生成的任务定义是输入结构化的数据、图片或者文本来生成一段新的文本。例如输入结构化的数据、输入一张图片,或者输入若干关键词来生成文本。目前的主流生成模型都是基于 Transformer 架构的编码器 - 解码器框架,如下图所示。


Transformer 是谷歌在 2017 年提出的一个架构体系,可以利用多头注意力模型来扩展不同的信息抽取能力,并且利用多层的神经网络架构来实现更加精准的编码和解码过程。

可控文本生成是指我们希望生成文本不是随意生成的,而是能够把一些要素添加进去,比如情感的要素,关键词的要素,主题的要素和事实的要素,如下图所示。


面向文本生成的预训练模型,有像 GPT 这样的自回归解码器模型,例如最新的 ChatGPT,它主要的模型架构是 GPT-3.5 的 InstructGPT。当然也有一些其他类型的模型,例如 BART 是自编码解码器模型,还有 T5 是多任务编码器 - 解码器模型。


文本生成面临的问题很多,我这里总结了 4 点:

  • 常识错误;
  • 内容逻辑错误;
  • 内容发散;
  • 语句重复。


解决当下文本生成问题的关键技术有如下几点:第一是如何来改进文本生成的可控性;第二是如何改进事实的正确性;第三是如何改进文本生成的前后一致性和连贯性。第四是如何克服重复生成,如何增加多样性等等。下面我就逐一快速介绍一下。


首先我介绍一下文本生成中的可控方法。可控方法目前有几种:

  • 第一种是调整解码策略,使得生成的结果尽可能地包含目标的内容,也就是我们所指定的主题关键词;
  • 第二种是调整训练的目标函数,构建面向特定任务的可控训练目标函数;
  • 第三种是调整模型输入,通过输入控制元素来影响生成的结果。


下面我对这几种方法逐一展开介绍。

第一个是基于加权解码的可控文本生成。当我们想生成一句 positive 的话,就会希望下一个生成的词接近 positive,所以这就需要添加一个控制器。原始模型是基于前面的词预测下一个词的 GPT 模型。加一个控制器就意味着如果下面的词是 positive 的,我们就更加倾向于选择它,因此加了一个这样的控制器来控制解码的过程。其中,控制器中的参数 λ 是固定的。


我们有时需要根据上下文信息,增加或减少某些词的输出概率,做一个动态的调整,所以我们可以加入一个动态的解码权重。


可控文本生成也可以用 prompt 的方式。我们已经有一个预训练模型,可以用一些提示词的方式来生成可控结果,比如我们要生成正面情感的一句话,可以输入「这首歌充满感情」这句话,输出的结果可能就倾向于正面。但是这种方法需要人工地针对不同场景找到相应的提示词。这是很花工夫的一种方法。


另一种方法,我们针对可控要素生成一个连续向量(prefix)来代替具体的 prompt,与传统的经典预训练模型(例如 GPT)组合在一起来体现某些可控要素。


有一种特别简单的方法是我每生成一种情感或者要素,就构建一个网络,每次都从头开始训练网络。还有一种改进的方法是基础的网络不变,只是每次针对具体的生成目标来调整 prompt。这方面已经出现了一些具体的进展,比如基于对比学习的可控文本生成方法:要生成一个 positive 的要素,在做 positive 要素的模型时,就试图让生成结果尽可能逼近 positive,远离 negative。这就是将对比学习的机制引入到模型训练中。


还要特别关注一个叫可持续学习的方法。通常在训练一个文本生成模型时,每添加一个要素,都可能重新训练或者调整网络。我们考虑在增加一个新要素时,能否复用(reuse)已有的网络。这里有一种研究方法是在层间加入一个自适应的组合模块,来进行轻量化的微调,提高训练效率。


当我们加入一些自适应的组合模块,只需调整需要调整的模块。并且在加入新任务时,最大限度地 reuse 已有的一些模块,来提高训练效率。这种具体的学习方法是当面对一个有新要素的文本生成任务,我们通过计算的方法来选择网络之间已有的自适应模块,选择跟训练目标最接近的模块,这样就从每一层到最后一层形成一个选择路径。如果没有一个特别合适的已有自适应模块,那么就添加一个新的自适应模块。然后再利用大规模的微调(fine-tune) 数据调整整个网络,就可以得到一个针对新要素的文本生成网络。


下面我解释一下文本生成中如何融入常识和知识。在真实世界中,无论是不同的场景,不同的领域,都有自己的一些特定知识体系,包括常识知识和事实知识。我们希望在文本生成中融合这些常识和知识。一种通用的方法是根据文本生成的输入和关键词或要素,来触发相应的知识库条目,并融入到生成模块中,以产生一个更好地体现知识和常识的输出。


另一种方法是隐含地融合常识和知识,就是我们把常识 - 结构化的三元组转换成常识的自然语言描述形式,并把这些自然语言的描述形式加入到训练数据中继续训练,GPT 就是这种文本生成模型。


我们也可以显式地融合常识和知识,具体流程如下:首先根据上文来预测未来的关键词,从常识和知识库中检索相应的常识和知识条目,把检索结果加入到原有的上文中,并依此得到一个新的输出结果。


还有一种方法是根据输入得到一个结果,动态地生成一些参考知识条目,把这些知识条目再融入原输入来得到一个输出。这个任务就变成根据一个输入的句子,如何来触发(trigger)或者生成相应的知识条目。假设我们有大规模的对话 Q&A 和一个知识库,首先我们根据 Q&A 寻找出匹配的知识条目,得到训练文本,根据训练文本,输入一个句子,就可以触发或者生成一些新的知识条目,我们选择概率最大者加入到生成过程中。


下面我再介绍一下长文本生成的方法。由于建模能力的问题,非常长的文本就没办法生成很好的结果了。一种简单的方法就是两阶段生成方法。

首先我们做一个 planning 的阶段,生成一些关键词来代表 storyline。把输入和 storyline 都加入到文本生成模块中,作为输入来产生一个更长的句子。这样的过程可以迭代分层,每次产生更多的 storyline,直到产生足够的 storyline,然后再去得到一个文本生成的结果。


还有一种方法是基于隐变量的长文本生成方法。这种方法的思路是:一篇自然的文本可以分割为多个连续的语义片段,每个片段围绕一个主话题展开;提出片段级词袋重构目标,使离散隐变量建模每个语义片段中的话题信息;利用话题感知的隐变量序列指导文本生成,使生成的内容与输入更相关且语义片段之间具有语义关联。


我们也可以基于动态规划来做长文本生成。现在的两阶段长文本生成,规划和生成二者是分离的,存在错误累积问题。基于动态规划的方法就是将规划和生成联合在一个模型中,并给定一个文本生成的输入来动态产生一个隐变量(SN),再生成组成下一个句子的单词序列,同时生成代表下一个句子的隐变量,然后持续生成。


上图右是具体的流程示意图,给定输入,编码器的输出结果作为解码器的输入,解码器先输出代表一个句子的隐变量 SN_1,然后隐变量生成 Bag-of-words,用于词序列信息的学习,然后基于生成的前文和 SN_1 再生成下一个句子的隐变量,持续地进行输出。

这样就相当于先生成了一个句子的架构,再根据句子架构生成具体的词序列。这样就对整体句子结构有很好的控制能力。

也可以利用记忆网络的长文本生成方式来做,每一层都加入一个记忆网络。在输出的时候,记忆网络跟当前 encoder 的结果一起决定输出的结果。我这里就不一一介绍记忆网络的训练公式了。







请到「今天看啥」查看全文