像GPT-4和Claude这样的大型语言模型(LLM)可以通过良好的提示工程学习新任务。然而,长提示可能会增加这些模型的使用成本,并且也会减慢它们的速度。
微软开发的一种新技术LLMLingua,通过消除不相关的部分来压缩提示。值得注意的是,LLMLingua可以在不影响模型响应质量的前提下,将提示压缩高达20倍。如果使用得当,LLMLingua可以降低使用高级LLM的成本,并使其可以广泛适用于更多用户和应用程序。
提示工程的成本
提示工程是利用LLM实现实际应用的基石。例如连锁思维、上下文学习以及结合相关文档或历史会话等技术对于提升模型在特定任务上的性能至关重要。然而,这些方法通常需要更长的提示,有时可能达到数千个令牌。这对使用高级模型特别是像GPT-4这样的昂贵LLM的成本有很大的影响。
有不同的方法可以优化模型并降低成本,有一类研究利用自然语言中的固有冗余来压缩提示,一些方法通过提示调整学习特殊的令牌来减少在推理时所需的令牌数量。
然而,这些方法通常是任务特定的,可能需要对整个模型进行微调,限制了它们的使用,并使它们与基于API的模型(如ChatGPT)不兼容。
其他技术使用LLM来总结对话,创建压缩的记忆和知识表示。但这些方法通常涉及调用多个成本高昂的LLM。
一种显著的方法是选择性上下文,它使用一个较小的语言模型来评估文本片段的信息量,丢弃较少信息的内容来压缩提示。微软的最新技术在这个方法上进行了构建并加以增强。
LLMLingua
LLMLingua是一种创新的技术,可以从粗粒度到细粒度压缩提示。这种方法由几个组成部分构成。
第一个组成部分是“预算控制器”,它动态地为原始提示的不同元素分配不同的压缩比率,如指令、示例和问题。这里的基本原理是,指令和问题通常对生成的结果有更直接的影响,因为它们包含了LLM产生答案所需的基本知识。相反,当一个提示包含多个示例时,信息可能是重复的。因此,预算控制器为指令和问题分配更大的预算—意味着更小的压缩比率,而为示例分配更小的预算。
LLMLingua使用像GPT-2或LLaMA这样的较小语言模型来管理这个分配。这个模型计算每个示例的困惑度,这作为文本与模型响应相关性的一种衡量。然后LLMLingua优先考虑具有最高困惑度值的示例,并将它们纳入提示中,直到满足示例的令牌预算。剩余的预算用于完善指令和问题。
LLMLingua的第二个组成部分是迭代式令牌级提示压缩(ITPC)算法,它允许更细粒度的压缩。ITPC首先对提示进行分段,然后使用小型模型来确定这些段落的困惑度分布。然后,算法构建一个压缩的提示,保留困惑度高的令牌,确保通过考虑令牌之间的条件依赖性来保留关键信息。
第三个组成部分涉及基于指令调整的方法,该方法同步大型和小型语言模型的分布模式。这个过程从一个预训练的小型语言模型开始,然后使用由较大LLM生成的数据进行微调。通过指令调整,小型模型的行为与大型模型的行为更加紧密地对齐,从而增强了整个压缩过程。
测试LLMLingua
在他们的实验中,研究人员使用了GPT-3.5 Turbo和Claude 1.3作为主要的LLM,并使用Alpaca-7B或GPT2-Alpaca进行压缩任务。他们在包括GSM8k和BBH的各种基准测试中测试了LLMLingua,这些基准测试分别用于推理和上下文学习,以及ShareGPT和Arxiv-March23用于对话上下文理解和摘要任务。
“我们提出的方法在几乎所有实验中都一贯地大幅度超过了先前的方法。”研究人员报告说。
在GSM8K和BBH的推理和上下文学习基准测试中,LLMLingua不仅比全射方法取得了更高的结果,而且还取得了5倍和3倍的显著压缩比率。
“这清晰地表明,我们的压缩提示有效地保留了原始提示中包含的推理信息。”研究人员写道。
在ShareGPT和Arxiv-March23上进行的上下文理解基准测试中,LLMLingua实现了9倍和3.3倍的提示压缩。这表明LLMLingua在压缩提示时保留了初始提示的语义完整性。此外,LLMLingua在准确性和压缩程度上均超过了其他提示压缩方法。在某些情况下,它在原始提示上实现了高达20倍的压缩。
尽管涉及多个步骤和两种模型,LLMLingua还是实现了从1.7倍到5.7倍的速度提升,并且计算开销很小。
“我们的方法具有实质性的实际意义,因为它不仅降低了计算成本,还为在LLM中容纳更长上下文提供了潜在解决方案。”研究人员断言。
为了促进更广泛的采用,微软已通过易于使用的开源库使LLMLingua可用。开发人员可以使用这个库将LLMLingua集成到他们自己的应用程序中。