LLMLingua

LLMLingua

提示词压缩技术助力大语言模型效率提升

LLMLingua系列是一套创新的提示词压缩工具,可将提示词压缩至原长度的5%,同时保持大语言模型性能。通过小型语言模型识别并移除非必要标记,该技术有效解决长文本处理和上下文遗忘等问题,大幅降低API使用成本并提高推理效率。LLMLingua系列包含三个版本,适用于检索增强生成、在线会议和代码处理等多种场景。

LLMLingua提示词压缩大语言模型长文本处理推理加速Github开源项目
<div style="display: flex; align-items: center;"> <div style="width: 100px; margin-right: 10px; height:auto;" align="left"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/9a3c8039-8a57-4d5d-be96-04604ad3394e.png" alt="LLMLingua" width="100" align="left"> </div> <div style="flex-grow: 1;" align="center"> <h2 align="center">LLMLingua系列 | 通过提示压缩有效地向大语言模型传递信息</h2> </div> </div> <p align="center"> | <a href="https://llmlingua.com/"><b>项目主页</b></a> | <a href="https://aclanthology.org/2023.emnlp-main.825/"><b>LLMLingua</b></a> | <a href="https://arxiv.org/abs/2310.06839"><b>LongLLMLingua</b></a> | <a href="https://arxiv.org/abs/2403.12968"><b>LLMLingua-2</b></a> | <a href="https://huggingface.co/spaces/microsoft/LLMLingua"><b>LLMLingua演示</b></a> | <a href="https://huggingface.co/spaces/microsoft/LLMLingua-2"><b>LLMLingua-2演示</b></a> | </p>

https://github.com/microsoft/LLMLingua/assets/30883354/eb0ea70d-6d4c-4aa7-8977-61f94bb87438

新闻

  • 🌀 [24/07/03] 我们很高兴宣布发布MInference,以加速长上下文大语言模型的推理,在A100上预填充时将推理延迟减少高达10倍,同时在100万个词元提示中保持准确性!欲了解更多信息,请查看我们的论文,访问项目页面
  • 🧩 LLMLingua已集成到Prompt flow中,这是一个用于基于大语言模型的AI应用程序的流线型工具框架。
  • 🦚 我们很高兴宣布发布LLMLingua-2,比LLMLingua速度提高了3-6倍!欲了解更多信息,请查看我们的论文,访问项目页面,并探索我们的演示
  • 👾 LLMLingua已集成到LangChainLlamaIndex中,这两个是广泛使用的RAG框架。
  • 🤳 演讲幻灯片可在AI Time Jan, 24中获取。
  • 🖥 EMNLP'23幻灯片可在Session 5BoF-6中获取。
  • 📚 查看我们的新博客文章,讨论通过提示压缩获得的RAG益处和成本节省。在这里查看脚本示例。
  • 🎈 访问我们的项目页面,了解RAG、在线会议、CoT和代码等实际应用案例。
  • 👨‍🦯 浏览我们的'./examples'目录,获取实际应用示例,包括LLMLingua-2RAG在线会议CoT代码使用LlamaIndex的RAG

简介

LLMLingua利用一个紧凑的、训练良好的语言模型(如GPT2-small、LLaMA-7B)来识别和删除提示中的非必要词元。这种方法能够实现大语言模型(LLMs)的高效推理,实现高达20倍的压缩,同时性能损失最小。

LongLLMLingua缓解了LLMs中的"丢失中间信息"问题,增强了长上下文信息处理能力。它通过提示压缩降低成本并提高效率,仅使用1/4的词元就将RAG性能提高了21.4%。

LLMLingua-2是一种小型但强大的提示压缩方法,通过从GPT-4进行数据蒸馏训练,用于带有BERT级编码器的词元分类,在任务无关的压缩方面表现出色。它在处理领域外数据时超越了LLMLingua,提供3-6倍更快的性能。

🎥 概览

背景

  • 你是否在要求ChatGPT总结长文本时遇到过令牌限制?
  • 在大量微调后ChatGPT忘记之前的指令,这让你感到沮丧吗?
  • 尽管效果出色,但使用GPT3.5/4 API进行实验时却产生了高昂的费用?

虽然ChatGPT和GPT-4等大型语言模型在泛化和推理方面表现出色,但它们经常面临提示长度限制和基于提示的定价方案等挑战。

现在你可以使用LLMLinguaLongLLMLinguaLLMLingua-2了!

这些工具提供了一种高效的解决方案,可以将提示压缩高达20倍,从而提高LLM的实用性。

  • 💰 节省成本:以最小的开销减少提示和生成长度。
  • 📝 扩展上下文支持:增强对更长上下文的支持,缓解"迷失在中间"的问题,并提高整体性能。
  • ⚖️ 稳健性:无需对LLM进行额外训练。
  • 🕵️ 知识保留:保留原始提示信息,如ICL和推理。
  • 📜 KV缓存压缩:加速推理过程。
  • 🪃 全面恢复:GPT-4可以从压缩的提示中恢复所有关键信息。

PS: 这个演示基于alt-gpt项目。特别感谢@Livshitz的宝贵贡献。

如果您觉得这个仓库有帮助,请引用以下论文:

[引用信息省略]

🎯 快速入门

1. 安装LLMLingua:

要开始使用LLMLingua,只需使用pip安装:

pip install llmlingua

2. 使用LLMLingua系列方法进行提示压缩:

使用LLMLingua,你可以轻松压缩你的提示。以下是操作方法:

from llmlingua import PromptCompressor llm_lingua = PromptCompressor() compressed_prompt = llm_lingua.compress_prompt(prompt, instruction="", question="", target_token=200) ## 或者使用phi-2模型, llm_lingua = PromptCompressor("microsoft/phi-2") ## 或者使用量化模型,如TheBloke/Llama-2-7b-Chat-GPTQ,只需<8GB GPU内存。 ## 在此之前,你需要pip install optimum auto-gptq llm_lingua = PromptCompressor("TheBloke/Llama-2-7b-Chat-GPTQ", model_config={"revision": "main"})

要在你的场景中尝试LongLLMLingua,你可以使用

from llmlingua import PromptCompressor llm_lingua = PromptCompressor() compressed_prompt = llm_lingua.compress_prompt( prompt_list, question=question, rate=0.55, # 设置LongLLMLingua的特殊参数 condition_in_question="after_condition", reorder_context="sort", dynamic_context_compression_ratio=0.3, # 或 0.4 condition_compare=True, context_budget="+100", rank_method="longllmlingua", )

要在你的场景中尝试LLMLingua-2,你可以使用

from llmlingua import PromptCompressor llm_lingua = PromptCompressor( model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank", use_llmlingua2=True, # 是否使用llmlingua-2 ) compressed_prompt = llm_lingua.compress_prompt(prompt, rate=0.33, force_tokens = ['\n', '?']) ## 或使用LLMLingua-2-small模型 llm_lingua = PromptCompressor( model_name="microsoft/llmlingua-2-bert-base-multilingual-cased-meetingbank", use_llmlingua2=True, # 是否使用llmlingua-2 ) #### 3. **高级用法 - 结构化提示压缩:** 将文本分成几个部分,决定是否压缩以及压缩率。使用<llmlingua></llmlingua>标签进行上下文分段,可选择添加rate和compress参数。 ```python structured_prompt = """<llmlingua, compress=False>发言人4:</llmlingua><llmlingua, rate=0.4>谢谢。我们能处理内容的功能吗?我相信是第11、3、14、16和28项。</llmlingua><llmlingua, compress=False> 发言人0:</llmlingua><llmlingua, rate=0.4>第11项是来自议会的Price建议,建议在市政经理部门的一般基金组中增加200美元的拨款,用于向长滩公共图书馆之友提供捐助。第12项是来自议员Super Now的建议。建议在市政经理部门的特别广告和推广基金组中增加10,000美元的拨款,用于支持夏末庆祝活动。第13项是来自议员Austin的建议。建议在市政经理部门的一般基金组中增加500美元的拨款,用于向Jazz Angels提供捐款。第14项是来自议员Austin的建议。建议在市政经理部门的一般基金组中增加300美元的拨款,用于向Little Lion基金会提供捐款。第16项是来自议员Allen的建议,建议在市政经理部门的一般基金组中增加1,020美元的拨款,用于向Casa Korero、Sew Feria商业协会、长滩公共图书馆之友和Dave Van Patten提供捐助。第28项是一项建议。来自副市长Richardson和议员Muranga的建议。建议在市政经理部门的一般基金组中增加1,000美元的拨款,用于向Ron Palmer峰会篮球和学术营提供捐款。</llmlingua><llmlingua, compress=False> 发言人4:</llmlingua><llmlingua, rate=0.6>我们有一项提议和第二次发言,作为议员服务的议员Ringa和客户,他们有任何意见吗?</llmlingua>""" compressed_prompt = llm_lingua.structured_compress_prompt(structured_prompt, instruction="", question="", rate=0.5) print(compressed_prompt['compressed_prompt']) # > 发言人4:我们能处理内容的功能吗?我相信是第11、、16和28项。 # 发言人0:来自议会的Price建议增加基金组中的Manager0提供a the1是议员Super Now。特别组提供夏季活动man a the Jazzels a来自议员Austin的建议。建议在市政经理部门的一般基金组中增加300美元的拨款,用于向Little Lion基金会提供捐款。第16项是来自议员Allen的建议,建议在市政经理部门的一般基金组中增加1,020美元的拨款,用于向Casa Korero、Sew Feria商业协会、长滩公共图书馆之友和Dave Van Patten提供捐助。第28项是一项建议。来自副市长Richardson和议员Muranga的建议。建议在市政经理部门的一般基金组中增加1,000美元的拨款,用于向Ron Palmer峰会篮球和学术营提供捐款。 # 发言人4:我们有一项提议和第二次发言,作为议员服务的议员Ringa和客户,他们有任何意见吗? #### 4. **了解更多:** 要了解如何在真实场景中应用LLMLingua和LongLLMLingua,如RAG、在线会议、CoT和代码等,请参考我们的[**示例**](./examples)。如需详细指导,[**文档**](./DOCUMENT.md)提供了有关有效使用LLMLingua的广泛建议。 #### 5. **LLMLingua-2的数据收集和模型训练:** 要在您的自定义数据上训练压缩器,请参考我们的[**数据收集**](./experiments/llmlingua2/data_collection)[**模型训练**](./experiments/llmlingua2/model_training) ## 常见问题 欲了解更多见解和答案,请访问我们的[常见问题部分](./Transparency_FAQ.md) ## 贡献 本项目欢迎贡献和建议。大多数贡献要求您同意贡献者许可协议(CLA),声明您有权并确实授予我们使用您贡献的权利。有关详细信息,请访问https://cla.opensource.microsoft.com。 当您提交拉取请求时,CLA机器人将自动确定您是否需要提供CLA,并适当地装饰PR(例如,状态检查、评论)。只需按照机器人提供的说明操作即可。您只需在所有使用我们CLA的仓库中执行一次此操作。 本项目已采用[Microsoft开源行为准则](https://opensource.microsoft.com/codeofconduct/)有关更多信息,请参阅[行为准则常见问题](https://opensource.microsoft.com/codeofconduct/faq/)联系[opencode@microsoft.com](mailto:opencode@microsoft.com)获取任何其他问题或意见。 ## 商标 本项目可能包含项目、产品或服务的商标或标志。Microsoft商标或标志的授权使用必须遵循 [Microsoft的商标和品牌指南](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general)在修改后的版本中使用Microsoft商标或标志不得引起混淆或暗示Microsoft赞助。 任何第三方商标或标志的使用均受这些第三方的政策约束。

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多