paint-brush
理解统计语言模型和分层语言生成by@teleplay
827
827

理解统计语言模型和分层语言生成

Chinchilla LLM 和 GPT-3 等语言模型用于基于统计概率生成文本。Dramatron 是一种用于共同撰写叙述的交互式工具,利用提示工程和分层生成来实现连贯的故事叙述。
featured image - 理解统计语言模型和分层语言生成
Teleplay Technology  HackerNoon profile picture
0-item

作者:

(1)PIOTR MIROWSKI 和 KORY W. MATHEWSON,DeepMind,英国,两位作者对本研究贡献相同;

(2) JAYLEN PITTMAN,美国斯坦福大学,在 DeepMind 期间完成的工作;

(3)理查德·埃文斯(RICHARD EVANS),DeepMind,英国

链接表

摘要和简介

讲故事、故事的形状和日志行

使用大型语言模型进行创意文本生成

评估大型语言模型生成的文本

参与者访谈

参与者调查

讨论和未来工作

结论、致谢和参考文献

A. 自动故事生成和可控故事生成的相关工作

B. PLAYS BY BOTS 创作团队的补充讨论

C. 定量观察的细节

D. 补充图表

E. DRAMATRON 的完整提示前缀

F. DRAMATRON 生成的原始输出

G. 共同编写的脚本

3 使用大型语言模型进行创意文本生成

3.1 语言模型

统计语言模型(语言模型,或 LM)在给定先前标记的上下文的情况下对文本标记的概率进行建模——标记可以是单词、字符或字符二元组。使用机器学习,LM 在大量文本语料库上进行训练以近似条件概率分布。LM 可以计算一段文本的可能性并生成新文本作为文本提示的延续。文本生成是概率性的,涉及从条件概率中随机抽样。不同的随机种子会产生不同的随机样本。图 3 说明了输入文本提示并使用 LM 生成不同文本样本的示例。


图 3. 语言模型提示设置的说明,用户或 Dramatron 生成的提示与前缀连接并用标签修饰。为不同的随机种子生成多个标题输出,每个标题输出都以标签 <end> 结尾。


在本研究中,我们采用了 Chinchilla 大型语言模型 (LLM) [48],该模型是一个具有 700 亿个参数的神经网络,并在 MassiveText 数据集的 1.4T 个标记上进行了训练。正如 Rae 等人 [84] 所述,该语料库包含 6.04 亿个 MassiveWeb 文档、400 万本图书、3.61 亿个来自 C4 的问题和回复、11 亿篇新闻文章、1.42 亿个 GitHub 代码条目和 600 万篇维基百科文章。请注意,可以使用其他 LLM,例如 GPT-3。[1]

3.2 分层语言生成以规避有限上下文


在这个项目中,我们希望有一个系统能够生成具有长期语义连贯性的整个文本,而不必需要人工参与。我们鼓励作者在层次结构的每个级别编辑和修改脚本。但是,我们不需要人工参与来实现长期语义连贯性。分层方法将从单个日志行生成具有合理长期连贯性的整个脚本,而无需人工干预。我们实现长期语义连贯性的方法是分层生成故事。


我们的叙事生成分为 3 个抽象层次。最高层是第 2 节中定义的日志行:描述中心戏剧冲突的单个句子。中间层包含角色描述、情节大纲(一系列高级场景描述以及相应的位置)和位置描述。最底层是剧本文本的实际角色对话。这样,每一层的内容都与其他层的内容保持一致。请注意,这里的“连贯”是指“形成一个统一的整体”,而不是假设 LLM 生成的文本具有任何常识和逻辑或情感一致性。


如图 1 所示,故事是自上而下生成的 [93, 108, 113]。在人类提供日志行后,Dramatron 会生成一个角色列表,然后是情节,然后是情节中提到的每个地点的描述。人物、情节和地点描述都符合日志行中的规范,此外还有因果依赖关系,这通过提示链 [118] 实现,并在图 1 的图表中进行了解释。最后,对于情节大纲中的每个场景,Dramatron 都会生成满足先前生成的场景规范的对话。生成的对话被附加在一起以生成最终输出。这种分层生成旨在实现长期语义连贯性。使用类似但反向的递归任务分解方法来生成情节摘要 [117]。加入中间层,将情节总结为一系列抽象场景描述,使整个情节能够适应语言模型的上下文窗口。这克服了先前对长期语义连贯性的限制。我们的方法可以使最终场景中的元素为开场场景中引入的元素提供戏剧性的结局[3],并使生成的故事遵循叙事弧(见第 2 节)。

3.3 及时工程的重要性

Dramatron 使用几个硬编码的提示(即输入前缀)来指导大型语言模型。提示工程是用户控制或影响 LLM 的常用方法 [12]。每个提示都有几个理想输出的示例。这些都包含在前缀中,而对少数示例的适应有时被称为小样本学习。如图 3 所示,提示与用户提供的输入和/或前几代 LLM 的输出连接在一起。这种方法称为提示链 [118],是一种算法提示 [24]。在层次结构的较低级别(参见图 1),提示与层次结构较高级别的输出链接在一起。


在这项工作中,我们主要使用了两组提示:一组基于欧里庇得斯的古希腊悲剧《美狄亚》,另一组基于科幻电影。对于 Dramatron,每组提示由以下部分组成:1) 标题提示、2) 角色描述提示、3) 情节提示、4) 地点描述提示、5) 对话提示。下面简要介绍了每个提示,以了解它们是如何设计的;其他详细信息请参阅附录 E。


标题提示用于从日志行生成标题。图 3 显示了一个简化的标题提示、用户提供的日志行和随机抽样的标题。它显示了一个带有指令的前缀(已知戏剧和电影剧本的替代、原始和描述性标题示例。)和一个示例(示例 1。古希腊悲剧 [...]。标题:以我兄弟的名义)。前缀以以下内容结尾:示例 2。用户输入的日志行(例如,Phyllis 奶奶和 Jim 爷爷 [...])与该前缀以及标签 Title: 连接在一起,这鼓励 LLM 生成与日志行匹配的标题。从几个例子中,LLM 已经“学会”生成相关标题并终止标签。角色描述提示用于从日志行生成角色名称和描述。情节大纲提示用于将日志行和角色列表转换为情节。本提示鼓励少样本语言模型将单句日志行转换为一系列场景描述。每个场景都经过高度压缩,仅描述地点的简称、在叙事弧中标识场景位置的叙事元素(见第 2 节)以及角色所做和所说的内容的摘要,通常称为叙事节拍 [69]。需要注意的是,该提示对 Dramatron 表示场景的方式施加了很强的表征约束;每个场景都由位置、叙事元素标识符和节拍组成。位置描述提示用于从地名和日志行生成详细的风景描述。最后,对话提示用于将节拍(即场景摘要)、场景位置描述、场景中涉及的每个角色的描述和日志行(为了故事的一致性)转换为对话。此提示使用为当前场景和之前的场景生成的场景信息。

3.4 使用 Dramatron 进行互动写作

如上所述,只需几个(即 1-4 个)提示和用户输入日志行,我们就能利用经过训练的 LLM 生成完整的脚本和电影剧本。附录 F 显示了原始生成输出的示例。话虽如此,Dramatron 是为交互式共同写作而设计的,可作为人类作家的增强工具。Dramatron 的共同创作过程如下:作家从他们编写的日志行开始。他们将日志行输入 Dramatron,并逐步生成标题、角色、情节大纲、位置描述和每个场景的对话。在每个步骤中,作家可以根据需要多次执行以下一项或多项操作:


• 生成新的建议(即使用相同提示再次运行LLM)。


• 从上一代末尾继续生成,类似于典型的“扁平”LLM 生成。


• 手动编辑LLM 生成的部分或全部输出。


此外,作者还可以通过在 Dramatron 层次结构中前进和后退来执行这些操作。例如,他们可以:1) 生成标题,2) 生成新标题,3) 编辑标题,4) 生成角色列表,5) 通过删除一个角色并更改另一个角色的描述来编辑角色,6) 生成情节大纲,7) 通过删除部分叙事弧来编辑情节,8) 生成已编辑情节的延续,9) 返回并重写日志行等。这种共同写作方法允许人类和 Dramatron 共同为剧本的创作做出贡献。完成这些操作后,人类作者可以进一步编辑和格式化以完成剧本。附录 G 展示了人工编辑的剧本示例。

3.5 实现细节

Dramatron 的代码是用 Python 实现的,面向用户的界面是在带有文本小部件的 Google Colab[4] 中实现的,可以进行交互式编辑。我们在脚本生成中使用了几个特殊标记:表示完整序列结束的生成标记,以及用于标记生成行结束的标记。对于输入到 LLM 的给定提示(参见下一节 3.3),最多采样 511 个文本标记。我们使用 Nucleus 采样 [49] 来鼓励多样化的输出,从前 0.9 概率质量中采样标记,并将 softmax 温度设为 1.0。最后,为了减少对话生成中的循环,我们实现了一个简单的检测器,将生成的文本切成块(由 2 个空行分隔),并计算每个块在一次生成中出现的次数。超过固定阈值(例如 3 次)时,LLM 通过使用随机数生成器中的不同种子对标记进行采样来生成新的输出。




[1] 网址:https://openai.com/api/


[2] 例如:https://theguardian.com/commentisfree/2020/sep/08/robot-wrote-this-article-gpt-3


[3]例如参见契诃夫之枪[27]。


[4] https://colab.research.google.com/