例如,SelectiveContext(Compressing Context to Enhance Inference Efficiency of Large Language Model,https://arxiv.org/abs/2310.06201)通过量化词汇单元的信息化量来识别并删除输入提示中的冗余或信息量较少的部分。使用Spacy的句法解析能力,将单个标记组合成名词短语,以保持文本连贯性。SelectiveContext不依赖外部模型或额外参数,可以应用于任何模型架构。
LLMLingua(LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models, https://arxiv.org/abs/2310.05736)使用一个较小的语言模型(如GPT-2)来计算内容的自我信息或困惑度,并在将自然语言提示输入到大模型之前移除冗余标记。LLMLingua在提示结构上操作,最初基于困惑度分数选择关键示例,然后应用token级过滤。
LongLLMLingua(LongLLMLingua: Accelerating and Enhancing LLMs in Long Context Scenarios via Prompt Compression(https://arxiv.org/abs/2310.06839)利用Prompt压缩增强LLMs在Long Context Scenarios下感知prompt中关键信息的能力,能够有效缓解Lost in the Middle,计算Document与Query之间的条件熵,以此来判断Document相对于Query的“重要性”。此时有两种选择,计算给定Document下的Query的熵,计算给定Query下的Document的熵。很显然考虑到Document自身拥有的信息熵可能差距非常悬殊,而且难以归一化,所以直接计算给定Document下的Query的熵更加合理。因此,提出了它的两个核心点:粗粒度压缩(Question-Aware Coarse-Grained Compression)和细粒度压缩(Question-Aware Fine-Grained Compression)。
也就是LLMLinga-2(LLMLingua-2: Data Distillation for Efficient and Faithful Task-Agnostic Prompt Compression,https://aclanthology.org/2024.findings-acl.57.pdf)训练一个token级别分类模型来做token“重要性”的识别,以此达到压缩的目的,有趣的是,压缩的实际目标与基于小模型logits的信息熵并不一致;使用双向语言模型可以做到的压缩性能上限要高出单向语言模型,并在实现上使用BERT+Classification范式,形成一个BERT的token级别分类模型,将每个token输出的logits作为起“保留”的概率,设定一个压缩比例阈值来进行压缩。
例如,Nano-Capsulator(Learning to Compress Prompt in Natural Language Formats, https://arxiv.org/abs/2402.18700): 将原始提示总结成简洁的自然语言版本,然后输入到LLM中。这个过程移除了不相关的信息,并将提示重构为流畅的句子。
Contrastive Conditioning (CC)(Prompt Compression and Contrastive Conditioning for Controllability and Toxicity Reduction in Language Models, https://arxiv.org/abs/2210.03162)通过训练一个较短的软提示来近似自然语言提示的输出分布,通过最小化token序列之间的Kullback-Leibler (KL) 散度。这种方法需要对自然语言提示和软提示进行重复序列采样,以估计输出分布。CC方法可以针对特定的自然语言提示进行训练,但泛化能力有限,因为新的提示需要从头开始重新训练。
Gist Tokens (GIST)(Learning to Compress Prompts with Gist Tokens, https://arxiv.org/pdf/2304.08467)通过在原始提示token后追加一系列新的可训练token来修改LLM的注意力机制。这些压缩token可以关注原始提示,而新生成的token只能关注压缩token,从而在注意力流中实现分离。GIST方法能够泛化到未见过的提示,而不需要额外的微调。
AutoCompressor(Adapting Language Models to Compress Contexts, https://arxiv.org/pdf/2305.14788)可以处理长上下文提示的压缩,其过程是递归的,将原始提示分成多个子提示,每个子提示被压缩成一小组token,然后与新的子提示一起传递给下一次迭代以进行进一步压缩。
In-Context AutoEncoder (ICAE)(In-context Autoencoder for Context Compression in a Large Language Model, https://arxiv.org/pdf/2307.06945)通过使用冻结的LLM作为解码器来增加压缩长度。将长而信息丰富的上下文压缩成少量token,然后用于问答。ICAE可以处理详细的、复杂的上下文,而问题本身保持未压缩,答案是基于压缩的上下文和未压缩的问题生成的。
500xCompressor(500xCompressor: Generalized Prompt Compression for Large Language Models,https://arxiv.org/abs/2408.03094)在保持压缩长度限制的同时实现高压缩比的提示压缩。与ICAE类似,500xCompressor在编码器中使用可训练的LoRA参数,同时保持原始LLM在解码器中冻结。不同之处在于,500xCompressor向解码器提供压缩token的K V值,而不是token本身,这些K V值保留了比嵌入向量更详细的信息。
xRAG(xRAG: Extreme Context Compression for Retrieval-augmented Generation with One Token) 使用冻结的嵌入模型作为编码器,只有编码器和解码器LLM之间的适配器包含可训练参数。xRAG证明了当前的嵌入模型可以将信息压缩到单个token中,用于问答任务。
UniICL(Unifying Demonstration Selection and Compression for In-Context Learning, https://arxiv.org/abs/2405.17062)专注于压缩输入提示的示例组件,留下查询不变。UniICL中唯一可训练的组件是放置在编码器和解码器之间的投影器。UniICL的编码器和解码器都是冻结的,减少了训练过程中的梯度计算,并节省了加载LLM所需的内存。