导读今天讨论的是面向结构化数据的文本生成技术研究,这是现在AIGC特别火的场景之一。这种技术不同于传统的文本生成,它的输入是一种比较特殊的结构,比如几百条不同的三元组或者很多种数字的信息。在使用传统的ChatGPT时,我们可以通过做一些摘要任务、翻译任务等来随意提出问题,但是对于结构化数据,它需要更高的生成能力,因为它包含了更多的信息。因此,我们今天选择这个主题来给大家讲解。
01
文本生成介绍
首先介绍一下现阶段热门的文本生成。
1. 人工智能的发展阶段
人工智能的发展经历了许多次的突破。早期,李世石下棋战胜了电脑,但后来又输给了AlphaGo,这拉开了人工智能快速发展的序幕。之后,无人车的感知智能以及能看会读的人工智能模型也受到了很多资本的青睐。近几个月来,以ChatGPT、GPT-4以及文心一言为首的对话式人工智能模型受到了巨大的关注,甚至被认为是一种认知智能。它基本上可以对人的问题以及意图达到90%以上的理解能力,并且能根据意图很好地生成你所要的文本。这被认为是当前最核心的一种前沿技术之一,这种方式通过大量无监督的学习再加上和人的对齐,实现了一种通用人工智能。经过不断的发展,人工智能技术水平也在不断提高。
2. 文本生成概念
今天我们要讲的文本生成是现在最流行的研究领域之一。文本生成的目标是让计算机像人类一样学会表达,目前看基本上接近实现。这些突然的技术涌现,使得计算机能够撰写出高质量的自然文本,满足特定的需求。典型的一些任务有文本到文本的生成,例如传统的摘要、翻译以及回答等。除了传统的文本生成,还有一种输入结构化数据的生成,例如天气预报、比赛数据以及传感器数据等。虽然这些数据以结构化数据的形式进行存储,但并不便于人们去理解或者找到其中的特点。因此,希望能通过文本的形式更易于阅读或者理解。另外,最近混合模态的生成已经得到了突破,输入图像或者视频可以对应输出相关的文本。这些是之前文本生成领域主要做的一些研究。
如果不考虑不同的模态,它实际上是按照输入的长短来生成的。起初我们常常用它来做一些比较简单的任务,比如压缩式的文本生成。输入比较长,而输出比较短,比如只有简单的标题或者100多个字符的摘要。再之后,还有一种平行式的文本生成,比如我们来复述一句话或者润色一句话。机器翻译也是典型的平行式文本生成任务,只是我们会控制它用不同的语言来进行生成。其次,还有一种比较有挑战性的扩展式的文本生成。比如,提供一个意图生成篇章级文本,我们可以让ChatGPT和GPT-4写出好故事,甚至,它可以写一些比较好的报告。我们认为,随着输入输出比的不断变化,让它的挑战也变得更多,因为随着文本的输出更长,它所要遵循的逻辑、层次以及其内部本身文本上有一些退化问题,都更具挑战。
3. 文本生成模型
技术层面,最早在2000年前后,生成方式采用的是所谓pipeline流水线的方式。它通过目标任务来找到写作对应的一些词单元,把这些单元和词进行规划、排序,再把每个单元合并成句子,最后再套入模板中,这是很复杂的流水线过程。
在2014年,我们采用了一种端到端的编码器解码器的方式,也就是基于深度学习的方式,典型的任务是机器翻译,比如我们把每个词变成向量,输入到神经网络里面,就可以把向量进行编码。最后传给解码器进行解码,每次解码的时候,它实际上是从很大的几万个词表中选取概率最大的词作为当前的输出。这种方式在机器翻译领域或者当时的文本摘要任务上非常成功。
后来在2018年,人工智能领域又发生了一次变革,这次变革中出现了预训练模型的方法,比较典型的有三个不同的模型:GPT-1、GPT-2、GPT-3。这三个模型在使用时,像GPT-1和GPT-2这样的小模型通常采用微调的范式,即让其提前学习海量的文本和知识,并在小规模数据上进行调优,以便更好地适应下游任务。当预训练模型的规模变得非常大时,很难对模型内的参数进行finefune,这时就通过提示学习的方式,为不同的任务设计不同的表示,以引导模型输出想要的内容。最新的方法被称为instruct tuning(指令微调),它不需要改变预训练模型,也不需要为每个任务学习专门的特征或表示,只需利用所有的自然语言文本即可。
4. 文本生成技术
随着预训练模型的发展,其规模呈现出指数级的增长。目前,比较大的预训练模型有Megatron- Turning和 OPT,它们分别来自于Nvidia和Meta。目前我们不知道ChatGPT相比于GPT-3在模型大小上的区别,也不确定GPT-4是达到了十万亿的参数还是像GPT-3一样保持相对较小的规模。随着新的预训练语言模型的不断提出,它们改变了我们基于传统pipeline学习的文本生成方法,这些新的模型能够解决过去在连贯性等方面所遇到的问题,例如微观规划。它们在词的使用、词的表达以及句子合成方面都更加流畅自然,让人感觉与真人写作的差别不大,甚至有时更好。现在,我们更关注的是如何围绕输入的内容来写作,以及如何写作。这些问题值得我们作为文本生成研究者去思考。
一方面我们主要围绕不同的编码器,如编码文本、结构化数据(如表格)、图像等,但GPT-4的多模态能力给这种任务带来了巨大的冲击。解码会有不同的风格,例如,ChatGPT可以很好地生成一首李白风格的诗,虽然有可能存在一些事实性的问题。另外在写长文本时,我们需要关注逻辑、主题、重复性等,也需要控制长度。这些问题在ChatGPT之前就经常被讨论,但未来在具体实现方式上仍需深入研究。
02面向结构化数据的文本生成
接下来,将讨论面向结构化数据的文本生成。
狭义上,这种生成任务是根据非语言结构信息生成自然语言文本的过程,这意味着只要输入不是自然语言,都可以属于这类范畴。具体地我们可以输入表格,如财务报表,然后把它们生成为简单的报表,使人们更容易理解。这与AIGC非常相似,它可以赋能企业自动写作的场景,减轻企业用户在撰写报告方面的成本。整个任务的定义输入是结构化数据,可以看作是知识图谱中的三元组,包括不同的节点,例如数字和实体等。输出则为自然语言文本,这可以被用来生成结构化数据的文本。
这种技术的应用也有着重要意义。知识图谱的价值在于它更易于计算机理解,但不太便于人类理解,因此需要将结构化数据转化为人类易于理解的文本。例如,当播报天气预报时,不能简单地说出“温度-32度-哈尔滨”,而应该将其转化为易于理解的文本形式。另外,在撰写赛事报道时,原始的输入数据以三元组的形式存储在Excel表格或其它数据库中,之前需要编辑去写作,而现在腾讯、新浪等一些新闻网站已经可以通过自动化的方式将其转化为易于理解的文本。另外,我们做了很多种柱状图或者是饼图,其背后的原理都是一种三元组,可以把这种三元组都转化成文本的形式,便于大家去阅读和理解。
具体的场景,例如输入体育比赛这种相对复杂一点的结构化表格,输出一篇报道。随着ChatGPT或者GPT-4的出现,自动化生产文本的能力得到了很大的提升,未来很多文本都会用这种技术来做。我们可以把它看成简单的实体存储的描述,用这种方式来播报它的具体内容,以便于人们理解。还可以把不同区域的经济数值转换成财报,这对很多银行或者金融保险企业来说很重要,因为他们需要实时了解各地方的情况。还可以通过一些好的生成方法让它自动挖掘出一些风险点,或者是谁的业绩比较好等信息。
上图中列举了一些之前国内以及国外比较典型的生成系统,其中包括国内的新华社推出的快笔小新、阿里巴巴等。还有国外的一些种初创公司,获得了很多的关注,比如美国明星企业Narrative Science、Automated Insights等,但是目前这种企业在ChatGPT和GPT-4的冲击下具体情况还未可知。
这里也罗列一些近20年来自然语言处理领域中的典型任务。最早有数据支撑的任务是在2009年,涉及天气预报数据集。2016年,出现了描述人物的维基百科任务,可以看作是简单图谱的分支。随后在2017年,开始研究餐馆的描述,例如给美团每个餐馆打上广告。此外,还有一些更偏向推理的任务,如棒球比赛等。在2020年之后,基于推理、事实一致性和数值计算成为更受关注的方向。事实一致性最早出现在结构化数据文本生成中,目前也被认为是ChatGPT没有解决的最核心的问题。而针对如何解决事实不一致性问题,领域相关工作者可以进一步深入研究。
最后再说一下该任务的意义。它可以很好地提升我们工作的效率,帮助用户理解离散的数据并进行正确的决策。面向结构化数据,未来我们可以把不同的图像如饼图、线图等转化为文字的形式,有广泛的应用空间。实际上,GPT-4采用的策略不一定是三元组的存储,而是采用一种视觉的方式。
结构化数据文本生成,与传统的文本生成在评价指标上有一些不同。传统的文本生成有经典的评价指标,如BLEU和ROUGE。在结构化数据上,更加关注抽取的三元组内容(content Selection),以及所写的内容和原本输入的结构化表格是否对应(Relation Generation),内容的顺序是否一致(Content Ordering)。它构建了一些自己的打分方法,同时还会用一些经典的人工评价来指导或说明生成系统的好坏。
接下来介绍主要的技术架构:
最早期是使用pipeline的方式,研究了传统的内容规划,通过决定哪些内容是三元组来进行选择,然后将这些三元组放到有序的条件下,最后将它们进行文字模板的嵌套生成最终的结果。这种方法的好处是易于控制,因为你了解其中每一步背后的含义,并且可以进行改进。但缺点是需要人为地从中写入一些特征,并且存在错误传播的现象。
之后采用了基于深度学习的方法,通过编码器-解码器来生成文本。其中编码器是面向于结构化数据特殊设计的一种层次化的编码器。通过解码器加上注意力文本和拷贝文本,我们就能生成想要的合适的输出。这种方法的好处是可以通过数据驱动的方式实施,只要收集足够多的数据,就可以得到比较好的生成文本。但是它的问题是可解释性比较强,难以针对某个错误进行控制。
很多人认为随着ChatGPT的出现,整个NLP或NLG领域就不存在了。事实上,我们仍看到对于一些非常复杂的结构化表格,在建模能力方面它并没有我们想象的那样强大。首先,我们把整个表格以三组的形式或者以json的形式输入到ChatGPT,这里它犯了一些错误,后面会讲到如何解决。
首先,在讲分数时选择或者生成了错误的数据,犯了事实不一致的问题。例如,它提到国王和布鲁克林的比分是99比90,但实际上应该是107比99。
第二,它对大小的认知程度不够。例如,它写到球队中最高分的球员得了24分,但实际上我们在表格中看到有人得了更高的25分。尽管ChatGPT经过了很多轮的更新,但这种选择性错误和不符合逻辑的表达表明它在数字的理解方面仍然很薄弱。
03目前主要挑战
接下来介绍目前的主要挑战,也是我们所研究的主要内容。
我们希望能够对给定样式的表格,能够比较好地显示它的结果。然而,结果是当前比较困难的,例如与其它数据集相比,这个赛事表格有600多个不同的单元和三元组。它使用的长度也很长,因此无法将所有信息都输进去。我们需要解决如何选择合理的结构化信息或单元来进行描写,以及如何更好地表示数字的大小,使其能够合理地输出。例如很多情况不一定是完全要遵照表格数据,有时需要呈现两个队的比分以及分差,需要通过计算器计算的结果,这是任务本身不具备的能力。此外,还有一些风格的控制,例如每个人写的新闻报道都有自己的风格,我们是否能够通过参考之前报道的风格来写整个内容。这些都是我们关于内容上不同方面的研究。
1.内容选择
对于ChatGPT来说,其输入通常是文本,是典型的序列化输入,只有上下文。但对于结构化的表格来说,每一列和每一行之间都存在典型的相关性。例如,一列可以代表当前球队谁得分最高,一行可以显示有多少个得分,篮板和助攻等特殊信息,是否拿到了两双或三双等等。同时,我们需要考虑一些球队的历史信息,比如球队表现的差异等。因此,我们需要解决如何更好地表示这些信息。
对此,研究人员进行了一种层次化的建模,首先使用行的编码器来确定各项数值之间的比较,同时使用列的编码器来整合不同维度的信息,以及用不同的三元组来建模人物整体的表示,判断是否应该被选择出来。
基于之前提到的RG、CS、CO评估指标,效果很明显,且在各个指标上都达到了最优效果。这种层次化的方式实际上也是比较符合结构化数据的,但是刚才跟ChatGPT做对比的时候,实际上是把它当作一种json模式在用。
2.数字表示
如何让模型更好地学习数字表示,我们发现ChatGPT在选择数字大小时会出现错误,因此需要将数字大小的信息嵌入到写作过程中,这是非常核心的内容。由于ChatGPT是典型地根据概率去建模生成内容,即本质上是0/1问题,两者存在不一致性,这导致ChatGPT在数值问题上建模能力稍有欠缺。
我们尝试将数值之间的大小关系转化为模型中的表示,以便比较大小关系。我们获取同类型的content表示,并将比较信息嵌入到数字表示过程中。这样,在理解表格和结构化信息时就可以更加准确,这相当于在预训练过程中学习了数字大小比较能力。其次,在建模每个三元组时,我们会设计多维度的reward,以提升模型选择内容的能力。
最后新的方法在结果上也获得了很好的性能。其中一个值得探索的问题是,我们是否加入了数字大小的能力。我们在不同的比赛或数据上做了二维空间映射的对比实验,其中红色表示之前的建模方法,蓝色表示加入数字大小后的方法。结果显示,加入数字大小后,模型的不同维度表示之间呈现出典型的线性关系,这样就能更好地拉宽不同数字之间的属性或表示的性质,从而更好地选择要生成的内容。
3.数值推理
另外,我们也希望模型能在数值推理时能够合理地推出原始表中没有出现的信息,并根据这些信息给出总结性或分析性的结论。以赛事表格为例,表格中除了有像107代表一队的总分,103代表另一队的总分的信息之外,还有很多数字是与原始表格里不匹配的,比如有两个球员一起合作得到了9分,还有两队有4分的差别,差距对应的是险胜。这些信息实际上从原始的表格是得不到的,需要对数字内容实现推理来计算。
在生成过程中可以采用一种填槽的方式。我们采用了双解码器的策略。除了文本解码器外,还可以建模表格中的实体、类型和分数,使用三元组的方式将其结构化。在解码文本时,除了解码文本本身外,我们还会使用关键的槽位。这些槽位类似于触发器或gate。当槽位被启动时,就会引入公式的计算。我们尝试用这种方式让它解码出不同的数字。例如,针对当前的三分,它可以解码出差距是三分的107-104。但在真实场景中,它无法直接计算答案,因为基本的语言模型不具备计算能力。因此可以将其放在计算器中计算出结果,然后将结果放回原文中使用。这种方式可以很好地将数值推理的能力嵌入到文本中。
为了更好地让它理解表格的结构和数据,结合我们的任务,我们提出了一种叫做tablemask的策略。我们可以随意从表格中抠掉一些,然后使用它的行列尝试恢复它。例如,如果某个球员的得分被扣掉了,我们可以用总分减去其它所有区域的分数来获得该球员的分数。这样就可以基于样例来训练,提前保证预训练公式计算器的解码能力。之后,把解码能力嵌入到文本解码器内,两者相互配合就可以得到比较好的结果。
从实验数据来看,我们除了做文本生成任务,也去看能否产生比较有意思的结果。我们就做了一些对比,例如“尼克斯战胜了灰熊”,给它“#”,让模型生成下一个词。因为当时很多用的都是transformer,没有预训练。我们看到,通过调整数字构造器的方法,大于70% 的数字都是可以正确生成的,而这些数字都是通过计算得到的,并不是在原始的表格里存在的。
同时我们找了一些其它好的例子,发现确实是可以生成原始内容中没有的信息。比如生成两队在上半场的比分,在实际数据中只有每一节的分数,没有上半场的总分数,就需要分别计算两个球队上半场分数之和,相加之后再把两个数字导回去,获得合理的生成结果。
4.风格控制
我们还希望能够指定写作的风格。前文介绍的更加倾向于能够产生有价值的信息,现在是考虑是否能遵照不同人的风格生成更加可定制、个性化的内容。我们提出了一种篇章级的风格迁移任务。以前的风格迁移是源于图像视觉领域,比如要求模型画一个达芬奇风格的画。后来在文本中,我们会希望模型生成积极的表达,或者生成更加正式的一段表达。
我们提到的篇章级风格控制是指,给定一个表格和需要新闻报道的样式素材,将这些材料整合为一篇文章。由于这些数据本身并不匹配,因此要写出符合这种文体的文章是一项具有挑战性的任务,只能通过一种无监督的方式进行。为了解决这个任务,我们设计了不同种学习的损失函数,保证内容可信度和语言风格,并生成类似于back-translation的内容,以指导我们将文章写回原来的文本。
在建模方面,我们将表格和参考文本用层次化的方式建模,再进行attention交互的矩阵计算,最后我们用它来指导文章生成。
文章在风格表达方面达到了比较好的效果。直接把原始文本上的数字抠掉去填充,这种风格匹配是百分之百的,一些内容可行性上的准确率、召回率以及BLEU值都还是很好的。实际上,在生成内容方面,模型的效果还不错,比如输入表格和左侧文本,能够按照风格生成理想中的内容。由于模型建模能力有限,还是会犯一些小错误,不过大部分情况下,它都能够学习并正确生成所需的文本。
04总结
最后做一个简单的总结,首先随着ChatGPT的出现,结构化数据的文本生成的应用会越来越多,未来很难找到一些典型的问题。其次,ChatGPT可以帮助我们做文本生成的评价,因为目前文本生成评价的进展依旧不容乐观。另外,我们还需要对ChatGPT做一些特殊的优化,比如如何设计给ChatGPT的结构化数据的模板形式。同时我们还可以设计一些特殊的prompt。这方面还有研究空间。此外,现在是以三元组方式去建模,但是在做summarization的时候,它是以一种跨模态的图片形式,我们也需要思考表格是否能采用这种多模态的形式处理。
05Q&A
Q1: table2txt的工作中,行编码器或者列编码器会将table中的数据解析成三元组的形式,喂给到模型中进行建模吗?
A1:是的,这确实是个很好的问题。它确实是以三元组形式输入到我们的模型中。因为当时它不一定都是序列化的,像现在这种transformer的编码方式。比如我们把人名和他的对应的得分加上他的分数,他们三个组合成三元组的形式,通过MLP的简单形式进行编码。它的效果还可以,让我们觉得这种方式还不错。
Q2:大规模的结构化数据的建模(大宽表,freebas)有什么比较好的思路吗?
A2:我们还试验了其他例子,刚才给大家展示的是ChatGPT,它生成会存在的一些问题。那我们内部也测了一下,GPT-4能读一些结构化的信息,就比如你把它存成json这种有一定层次的表达也可以读取。而且它的输入效果要比ChatGPT好,基本上找不出来明显的错误。
Q3:多元时序结构化的数据表的建模,请问有好的建模的思路吗?
A3:我觉得可以参考我们在做序列化建模时候加入类似position embedding的时间戳的做法,这是一种最直接的方式。
Q4:GPT对于知识图谱的研究最大的挑战和启示是什么?未来知识图谱的研究会发生根本性的转变吗?
A4:我觉得确实也是现在很值得思考的问题。我觉得也是我们要开次峰会的原因,因为大家看到把知识存到参数化的效果里面是很好的,那很多时候我们基本上也不需要去搜索知识图谱或者是检索一些外部知识,它就能给出来很好的答案。像采用New Bing的形式,我通过实时检索,返回一些文本信息,它来作为补充,那这对于时效性和准确性的提升也是很明显的。那在整个过程中,图谱能发挥的作用确实是值得我们去思考。我个人感觉可以想办法,他们有的文章提出可以让模型去恢复图谱,去预测图谱中的节点。可以说能把知识的这种方式嵌入到我的模型中,就类似先Mask原本的文本再去恢复它,这样你能学到文本的上下文。那你把图谱中的节点删除抠掉之后,你让模型去恢复图谱,你就能学到些不同知识间的相关性。确实是很难回答的问题。
全部0条评论
快来发表一下你的评论吧 !