ETH Zurich研究人员推出LMQL:一种用于语言模型交互的编程语言
ETH Zurich研究人员推出LMQL:一种语言模型交互编程语言
大语言模型在包括问答和代码生成在内的各种任务上的性能令人印象深刻。语言模型可以根据输入自动生成一个统计上合理的序列结论。用户可以通过口头指令或示例来训练这些模型,让它们执行各种后续活动。更复杂的提示技术可以涉及语言模型、用户和计算器等第三方应用之间的协作。在实现复杂的任务和模型特定程序以实现最先进性能或修改语言模型以适应特定任务时,可能仍然需要临时交互。
鉴于此,瑞士的研究人员引入了先进的语言模型编程(LMP)概念。通过将语言模型提示的范围扩展到简单文本提示之外,LMP提供了两种方法的自然混合体。此外,LMP允许限制语言模型生成的结果。这使得语言模型具有高度的抽象性,使其能够轻松适应各种活动。研究人员实现了LMQL(用于语言模型查询语言),以实现LMP。LMQL使用LMP提示中的约束和控制流来生成一种有效的推理技术,从而减少对底层语言模型的昂贵调用次数。他们展示了LMQL如何捕捉各种最先进的提示机制,特别是那些难以使用现有高级API实现的交互流程。该研究表明,LMQL在大大减少计算时间或财务投入(在使用付费API的情况下)的同时,维持或提高了各种下游活动的准确性。
它是如何工作的?
由于其声明性的特点,LMQL仅指定任务的期望结果,将逻辑的控制流程的具体细节留给另一种语言。它借鉴了SQL的思想,但在Python的基础上进行了改进。用户可以向模型提供文本和可编程问题。
该报告确定了语言语法的五个主要组成部分。解码器的工作是找出文本生成算法背后的秘密。它是将数据转换为更有用的、更多样化措辞的代码片段。
与语言模型进行交互的基本工具是使用Python语法编写的查询块。查询块顶层的每个字符串代表一个单独的查询。查询的目标模型在Model/from子句中被标识。这指定了生成文本的语言基础,而Where子句则允许人们设置控制结果的参数。它指定了语言模型必须生成以维持所需属性的内容。
LMQL用户可以对语言模型生成的结果施加复杂的逻辑约束。这些约束会自动生成令牌级预测掩码,以便在文本生成开始时严格执行。因此,各种约束可以被仔细执行,并且模型只会生成符合条件的内容。由于改进的输出格式保证,多部分提示和集成变得更加容易。
主要贡献
- 本研究的作者们确定并解决了当前LM提示方法中的几个问题,引入了创新的语言模型编程范式。
- LMQL是一种高级查询语言,提供了脚本提示和输出限制两个功能。
- 对急切、部分求值语义的最终和跟随抽象进行了形式化描述。有了这个描述,只需一些基本指导方针,就可以自动生成用于LM解码的特定模型令牌掩码。
- 对LMQL的深入分析展示了如何将各种基本和复杂的提示方法表达为短小、易于理解的LMQL程序,这些程序运行速度更快、准确性更高,得益于LMQL降低推理成本和执行时间的能力,降低了成本和执行时间高达80%。
研究人员进行的案例研究表明:
- LMQL的高表达性意味着许多现代、最先进的技术可以使用比其Python版本更少的代码来实现。
- 使用LMQL可以大大提高模型查询的数量,从而提高效率和运行时间。由于LMQL具有令牌级别验证的能力,可以动态地强制执行约束,而无需借助分块解码和回溯。
- LMQL对模型的准确性没有影响。在一些情况下,所施加的限制导致略微更高的精度。
此外,研究人员已经证明,当应用于付费的API保护模型的情况下,LMQL将提供显著的金钱节省,这是由于可计费令牌的减少。最后,他们指出,这些案例研究与LMQL的全面用户研究是分开进行的,后者评估了语言的影响和可用性,并与现实世界的提示工程师一起进行。需要记住的是,缺乏这样的研究将威胁到关于实用性的声明的可信度。
总之,专家们将语言模型编程作为与(巨大的)语言模型交互的新方法进行了介绍。他们引入了LMQL,这是一种具有简单语法的高级查询语言。LMQL的评估语义得到了有效的开发,从而实现了快速查询处理。他们通过案例研究证明了他们的观点,展示了如何将复杂的提示方法转换为简单、清晰且快速的LMQL代码,从而可以将计算费用降低高达80%。