新智元报道
编辑:LRS
OpenAI发布的聊天机器人ChatGPT着实是火出圈了,上知天文、下知地理,不仅理性、也有感性,写一篇800字的作文都不用打草稿的。
但ChatGPT的「故事续写」遵循逐词生成的线性逻辑,跟人类的写作方式相去甚远,注定了ChatGPT只能是一个写作助手,无法成为真正的AI作家。
最近田渊栋博士团队在EMNLP'22上发布了一个基于大规模语言模型的故事生成器Re3(Recursive Reprompting and Revision)框架,通过设计prompt让模型生成一致性强的故事,完全不需要微调大模型。
论文链接:https://arxiv.org/pdf/2210.06774.pdf
代码链接:https://github.com/yangkevin2/emnlp22-re3-story-generation
Re3框架没有采用语言模型的逐词生成的线性逻辑,而是改用层次化生成方式:先在Plan阶段生成故事角色,角色的各种属性和大纲,然后在Draft阶段给定故事大纲和角色,反复生成具体的段落,这些具体段落由Rewrite阶段筛选,挑出与前一段落高度相关的生成段落,而丢弃关系不大的(需要训练一个小模型),最后在Edit阶段修正一些明显的事实错误。
作者表示,相比语言模型毫无道理的逐词生成,迭代修改的思路更符合人类作家写作的一般方式。
从最后的效果来看,与当前其它的文本生成算法比较,Re3写出来的故事长很多,最长的故事有7500个词,人来看的话需要看半小时左右。不夸张的说,比其它的方案要长10倍以上。
最关键的是,Re3生成的文本相当自洽,至少不会出现主要角色突然换人,或者文风突变这种情况,前后的线索也能对上一些,也没有其它方案经常出现的陷入无限文字循环的情况。
Re3生成的小说,全篇近3000词,连贯性不错
与直接从同一基本模型生成的类似长度的故事相比,人类评估人员判断Re3的故事中有更多的故事具有连贯的总体情节(增加14%),并且与给定的初始前提相关(增加20%)。
尽管如此,Re3目前相比人类作家仍然差得很多,主要问题在于人物没有动机,情节安排毫无规律,细节杂乱无章,更不用谈行文的步调、节奏或是主旨,读起来会比较累。
作家一般讲究「草蛇灰线,伏笔千里」,人物的重要细节和举动,场景中带有情绪色彩的描绘,都有可能成为下一步故事发展的决定性因素,更不用说人物间错综复杂的关系和出乎意料的情节展开。这些高阶写作能力,AI现在还远远无法做到。
文章的第一作者Kevin Yang是加州大学伯克利分校的四年级博士生,主要研究兴趣为结构化设置下的可控自然语言文本生成,如利用可控生成的结构化方法来改善长篇文本的一致性。
第二作者田渊栋博士是Meta人工智能研究院研究员、高级经理,其研究方向为深度增强学习及其在游戏中的应用,以及深度学习模型的理论分析。先后于2005年及2008年获得上海交通大学本硕学位,2013年获得美国卡耐基梅隆大学机器人研究所博士学位。
生成长篇且连贯的故事是人工智能领域的一个难题,模型需要全面掌握语言、世界和常识知识才能完成。
之前工作中自动生成故事的长度少则几句话,多则也只有一两个段落,虽然这样长度的短故事可以作为文本生成的一个很好的测试平台,但它们仍然比一般的短篇小说要短得多。
Re3框架的设计初衷旨在通过生成更长的「短」故事来弥补目前的故事自动生成模型的缺陷。
与短篇小说相比,长篇剧情的连贯性和相关性是更重要的问题,Re3框架的研究人员也是首个做自动生成如此长的连贯情节故事模型的人,而进一步增加长度主要受限于评估而不是技术问题。
该系统必须在数千字的范围内保持一个连贯的总体情节。比如用户会给定一个初始前提(premise),模型需要在数千字的文本中保持与前提的相关性。
其他的难点还包括在很长的范围内保持叙事风格一致以及避免事实的矛盾。
研究人员观察到,人类作家并不是直接一次性写完一个长篇,而是有一个迭代过程,首先会(a)建立一个详细的计划;(b)根据计划对每个段落打草稿;(c)修改或者对整个文章进行重写;(d)继续编辑优化细节。
受此启发,Re3框架也采用类似的方法来生成长故事。
计划(Plan)模块
利用GPT3-Instruct-175B(针对人类指令微调后的GPT-3)的结构化prompting,将初始化的前提(premise)转化为更详细的故事设置来模拟高水平的人类计划,包括背景、人物+描述和故事大纲。
这些计划组件本身是由prompting生成的,并且会被反复使用以在Draft模块中生成故事段落的prommpts,即recursive reprompting
草稿(Draft)模块
为了生成连贯的故事,Draft模块将会选择plan中和之前生成的故事最相关的部分,然后将它们重新组合成一个单独的prompt,供GPT3-175B生成下一个段落。
与现有的思维链方法相比,这个故事Draft模块可以被认为是更进一步:动态地选择先前语言模型输出中与当前步骤相关的部分,并在需要时运行一些额外的处理(例如摘要)。
重写(Rewrite)模块
重写模块通过相关性评分、连贯性评分和简单的启发式过滤器的混合对连续性进行重新排序对人类重写进行模仿。
训练rerankers是Re3框架中「唯一」使用已存在的故事数据的地方,其他所有的生成模块都是通过prompting的方式zero-shot设置下完成的。
编辑(Edit)模块
最后编辑模块解决了检测(detecting)和纠正(correcting)长距离事实不一致的问题。
为了使该任务更具可操作性,研究人员把重点放在人物属性(如年龄、职业、与其他人物的关系)的事实不一致上。
在高层次上,检测系统以「属性字典」的形式为每个角色维护一个紧凑的知识库。
对于每个新的故事段落,只对照这些属性值字典来检查事实冲突,然后为新的段落更新字典,当检测到新的字符时创建新的字典。
具体来说,编辑模块的检测系统是一个受OpenIE启发的概念验证系统,将过程分解为简单的GPT3查询,纠正系统使用GPT3的编辑API,后续还有较大的提升空间。
研究人员主要从趣味性(Interesting, 是否吸引读者)、连贯性、相关性(忠实于初始前提)、类人(Humanlike,和人类作家相比)对生成的文字进行评估。
每个标注人员可以看到一个前提和两个相应的故事(由RE3和另一个随机baseline生成),并对两个生成的故事在四个指标上进行二元打分。
从结果来看,RE3能够按照预期的前提写一个较长的故事,同时保持一个连贯的总体情节,这也验证了受人类写作过程启发的设计选择以及递归reprompting的生成方法。
与两个基线对比,RE3在连贯性和相关性方面都有明显的大幅提高,标注人员还将RE3的故事标记为具有明显较少的写作问题。
参考资料:
https://arxiv.org/abs/2210.06774
https://github.com/yangkevin2/emnlp22-re3-story-generation
https://twitter.com/KevinYa33964384/status/1582149319032852480
https://zhuanlan.zhihu.com/p/578638528