在长文本场景中,ChatGPT等大语言模型经常面临更高算力成本、更长的延迟以及更差的性能。为了解决这三大难题,微软开源了LongLLMLingua。
据悉,LongLLMLingua的核心技术原理是将“文本提示”实现最高20倍的极限压缩,同时又可以准确评估提示中内容与问题的相关程度,消除无关内容保留关键信息,达到降本增效目的。
实验结果显示,经过LongLLMLingua压缩后的提示,比原始提示的性能提升了17.1%,同时输入GPT-3.5-Turbo的tokens减少了4倍。在LongBench和ZeroScrolls测试中显示,每1,000个样本节省28.5美元和27.4美元的成本。
当压缩约10k tokens的提示,压缩率在2-10倍范围内时,端到端延迟可以降低1.4-3.8倍,显著加速了推理速率。
论文地址:https://arxiv.org/abs/2310.06839
开源地址:https://github.com/microsoft/LLMLingua
从介绍论文来看,LongLLMLingua主要由问题感知的粗细粒度压缩、文档重排序、动态压缩比率和压缩后子序列恢复4大模块组成。
问题感知的粗粒度压缩模块
该模块的设计思路是,使用问题文本进行条件化,评估每个段落与问题的相关程度,保留相关度更高的段落。
具体来说,通过计算问题文本与各段落的条件困惑度,判断二者的逻辑关联程度,条件困惑度越低表示相关性越高。
在此基础上,设置阈值保留困惑度较低的段落,过滤掉与问题不相关的段落。这实现了根据问题快速移除大量冗余信息的粗粒度压缩。
文档重排序模块
研究表明,在提示中,靠近开始和结束位置的内容对语言模型的影响最大。所以该模块根据各段落的相关程度对其进行重新排序,使关键信息出现在对模型更敏感的位置,减少中间位置信息损失。
通过利用粗粒度压缩模块计算出的各段落与问题的关联度,对段落进行排序,使关联度最高的段落排在最前面。这进一步增强了模型对关键信息的感知。
在获取重排序后的相关段落后,需要进一步压缩每个段落内的词量。此时动态压缩比率模块对提示进行精细调控。
动态压缩比率模块
对更相关的段落使用更低的压缩比率,分配更多的保留词语预算,而对相关性较弱的段落则使用更高的压缩比率。
通过利用粗粒度压缩结果中的段落关联度,动态确定每个段落的压缩比率。关联度最高的段落压缩比率最低,依次类推。
实现自适应、细粒度的压缩控制,有效保留关键信息。压缩后还需要提高结果的可靠性,这就需要下面的压缩后子序列恢复模块。
压缩后子序列恢复模块
在压缩过程中,一些关键词可能被过度删除,影响信息的完整性,而该模块可以检测并恢复这些关键词。
工作原理是,利用源文本、压缩文本、生成文本之间的子序列关系,从生成结果中恢复完整的关键名词词组,修复压缩带来的信息缺失,提高结果的准确性。
整个过程有点像我们快速浏览文章、筛选信息、整合要点的工作流程等,使模型快速捕捉文本的关键信息,生成高质量的摘要。
LongLLMLingua实验数据
研究人员构建了一个基于Natural Questions的多文档问答数据集,其中每个示例包含一个问题及20个相关文档,并需要从这20个文档中查找到答案。
该数据集模拟了实际的搜索引擎和问答场景,可以评估模型在长文档中的问答性能。
此外,研究人员还采用了更为通用的长文本理解基准测试集,包括LongBench和ZeroSCROLLS,以评估方法在更广泛场景下的效果。
其中,LongBench覆盖单文档问答、多文档问答、文本摘要、少样本学习等任务,包含英文数据集。ZeroSCROLLS则包括文本摘要、问答理解、情感分析等典型语言理解任务。
在这些数据集上,研究人员比较了LongLLMLingua压缩后的提示与原始提示在大语言模型上的性能。同时,也与其他提示压缩方法进行了对比,如基于困惑度的LLMLingua和基于检索的方法,评估了LongLLMLingua的有效性。
实验结果显示,LongLLMLingua压缩后的提示在问答准确率、生成文本质量等指标上普遍优于原始提示。
例如,在NaturalQuestions上,压缩4倍的提示提升了17.1%的问答准确率。当压缩约10k tokens的提示,压缩率在2-10倍范围内时,端到端延迟可以降低1.4-3.8倍。这充分证明LongLLMLingua可以在压缩提示的同时提升关键信息提取。
(举报)