作者:
(1) Brandon T. Willard,普通计算;
(2)R´emi Louf,《普通计算》。
在本文中,我们将展示如何根据有限状态机的状态转换来建设性地重新表述神经文本生成问题。该框架允许在语言模型的词汇表上构建索引,从而导致一种使用正则表达式和上下文无关语法指导文本生成的有效方法。该方法与模型无关,允许人们强制执行特定领域的知识和约束,并通过保证生成文本的结构来构建可靠的接口。它几乎不会增加标记序列生成过程的开销,并且性能明显优于现有解决方案。开源 Python 库 Outlines [Louf and Willard] 中提供了一个实现。
我们关注的是从大型语言模型 (LLM) [Vaswani et al., 2017, Radford et al., 2019] 生成符合正则表达式或上下文无关语法 (CFG) 的标记序列的问题。这种引导式 LLM 生成用于使 LLM 模型输出在严格的格式要求下可用,而仅通过微调很难或成本高昂地捕获这些格式要求 [Beurer-Kellner et al., 2023, Scholak et al., 2021, Poesia et al., 2022a, Rabinovich et al., 2017, Weng, 2021, Dong et al., 2023, Poesia et al., 2022b, Geng et al., 2023, Wang et al., 2023]。这些功能最近已在提示库和界面中得到推广 [Microsoft, 2023, Beurer-Kellner et al., 2023, Rickard, 2023a,b],但它们的适用性可能受到其扩展成本的限制。
大多数引导式生成的实现都会使用于确定 LLM 词汇表中标记概率的分数值产生偏差。一种常见且充分的方法是反复评估整个词汇表,以确定哪些标记是有效的(根据约束和之前采样的标记),并将无效标记的概率设置为零。这种方法需要为每个生成的标记设定固定的 O(N) 成本,其中 N 是 LLM 词汇表的大小。
我们提出了一种方法,该方法使用正则表达式的有限状态机 (FSM) 公式来任意启动和停止引导生成,并允许构建索引,通过该索引可以在每一步高效地获取非零概率标记集。结果是一种平均成本为 O(1) 的算法。
对于正则表达式的情况,我们的方法与 Kuchnik 等人 [2023] 的方法最为相似,他们使用转换器公式来获取基于语言模型词汇表定义的 FSM,这些 FSM 包含与此处描述的索引相同的信息和扩展优势。我们的方法不需要完整的转换器抽象,并且可以更轻松地扩展现有的高效正则表达式库,而无需修改底层自动机及其实现。
更重要的是,我们的索引方法还可以扩展到 CFG 和 LALR(1) 解析器,以便根据流行的数据格式和编程语言(例如 JSON、Python、SQL 等)进行高效的引导生成。通过增强传统的 LALR(1) 解析器组件和操作来实现解析的过渡,这再次使其成为一种可用于扩展现有解析器实现的方法。