Prompt compression

Материал из Systems analysis wiki
Перейти к навигации Перейти к поиску

Сжатие промпта (англ. prompt compression) — это совокупность методов в промпт-инжиниринге, направленных на сокращение длины входного текста (промпта) для больших языковых моделей (LLM) при сохранении ключевой информации[1]. С ростом контекстного окна LLM до миллионов токенов (например, у Google Gemini) появилась возможность обрабатывать очень длинные тексты, но это создало новые проблемы: высокую стоимость вызовов, увеличение задержки и снижение качества рассуждений из-за эффекта «потери в середине»[2].

Сжатие промпта решает эти проблемы, концентрируя в сокращённом вводе наиболее существенные данные и отбрасывая избыточные. Это уменьшает риск превысить лимит контекста, ускоряет генерацию и снижает стоимость, сохраняя при этом точность ответов[3].

Методы сжатия промпта

Методы сжатия промпта можно разделить на несколько основных классов.

Удаление токенов (фильтрация)

Этот подход заключается в удалении наименее информативных токенов, фраз или предложений из исходного текста без изменения оставшихся частей. Важность токенов определяется эвристически.

  • LLMLingua: Метод, разработанный Microsoft, который вычисляет перплексию каждого токена и удаляет те из них, которые мало влияют на предсказуемость текста. В версии LongLLMLingua этот подход адаптирован для длинных документов, учитывая релевантность фрагментов по отношению к конкретному запросу пользователя[4].
  • Selective-Context: Использует небольшую языковую модель для оценки self-information каждого токена и отбрасывает токены с наименьшей информативностью[5].
  • PCRL (Prompt Compression via Reinforcement Learning): Обучает агента с помощью обучения с подкреплением принимать решение для каждого токена — «оставить» или «удалить» — с целью максимизации метрики качества (например, ROUGE) финального ответа[6].

Абстрактивное сжатие (резюмирование)

В этом подходе модель-компрессор (обычно меньшего размера) генерирует краткое абстрактное резюме исходного текста, которое затем передаётся основной LLM.

  • RECOMP (Retrieval-Compression-Prompting): Для каждого документа в базе знаний заранее генерируется краткий пересказ (summary), учитывающий возможные запросы пользователя (query-aware summary). Это позволяет не только сжимать, но и предварительно обрабатывать информацию[7].
  • PRCA (Prompt Compression with Reinforced Context Aggregation): Комбинирует обучение модели-суммаризатора с обучением с подкреплением, чтобы генерировать такие пересказы, которые максимально улучшают качество ответов основной LLM[8].
  • Prompt-SAW (Semantic Aware Winnowing): Перед суммаризацией извлекает из текста граф знаний (сущности и отношения), отбирает релевантные узлы графа и на их основе генерирует сжатый текст[9].

Экстрактивное сжатие

Этот метод извлекает ключевые фрагменты (предложения, абзацы) из исходного текста без их перефразирования.

  • Reranker-LLMs: Использует модель-ранжировщик (reranker), которая оценивает важность каждого абзаца или документа для текущего запроса и отбирает только наиболее релевантные[10].
  • CompAct: Демонстрирует итеративную экстракцию-суммаризацию. Модель последовательно берёт сегменты длинного текста, сжимает их и проверяет, достаточно ли информации для ответа. Если нет, добавляет следующий сегмент и снова сжимает, достигая значительного сжатия при сохранении качества[11].

Дистилляция и «токены памяти»

Новый класс методов, где вместо текста модель получает специально обученные токены-заместители или эмбеддинги, содержащие сжатую информацию.

  • Gist Tokens: Модель LLM дообучается «сворачивать» длинные инструкции в небольшой набор специальных gist-токенов (например, 20-30 токенов вместо нескольких тысяч). Эти токены затем используются вместо исходного промпта, обеспечивая до 26-кратного сжатия при минимальной потере качества[12].
  • Soft Prompt Tuning: Вместо текстового промпта используются обучаемые «виртуальные токены» (эмбеддинги), которые настраиваются для решения конкретной задачи.
  • SelfCP: Предлагает использовать саму замороженную LLM в качестве компрессора. Подавая ей сегмент текста с особыми метками, модель генерирует плотное представление (memory tokens), которое затем используется ею же для ответа[13].

Эффективность и компромиссы

  • Ускорение и снижение затрат: Поскольку сложность трансформера растёт квадратично ($O(n^2)$) от длины последовательности, сокращение промпта в несколько раз даёт существенную экономию. Например, gist tokens при 26-кратном сжатии демонстрируют до 40% экономии FLOPs[12].
  • Повышение качества: Иногда сжатие промпта может даже улучшить качество ответов, если исходный текст содержал шум или отвлекающие детали. Удаление нерелевантного контекста помогает модели лучше сфокусироваться на важных аспектах задачи.
  • Компромисс качества (faithfulness): Слишком агрессивное сжатие может привести к потере важных деталей (дат, имён, отрицаний), что ухудшит качество ответа. Абстрактивные методы особенно подвержены риску галлюцинаций. Контроль полноты и точности (faithfulness) сжатого промпта — ключевая задача.

Связь с другими направлениями

  • Retrieval-Augmented Generation (RAG): RAG и сжатие промпта тесно связаны. RAG можно рассматривать как внешний этап сжатия: вместо обработки всей базы данных производится поиск и отбор релевантных документов. Сжатие промпта дополняет RAG, сокращая объём уже отобранных документов перед подачей в LLM.
  • In-Context Learning: Примеры в контексте (демонстрации) значительно увеличивают длину промпта. Сжатие этих демонстраций (например, с помощью Instruction Distillation, где множество примеров заменяется одной короткой инструкцией) является активной областью исследований.

См. также

Литература

  • Ali, M. et al. (2024). Prompt-SAW: Semantic-Aware Winnowing for Prompt Compression. arXiv:2403.00000.
  • Gao, J.; Cao, Z.; Li, W. (2024). SelfCP: Compressing Over-Limit Prompt via the Frozen Large Language Model Itself. arXiv:2405.17052.
  • Jiang, H. et al. (2023). LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models. arXiv:2310.05736.
  • Jiang, H. et al. (2023). LongLLMLingua: Accelerating and Enhancing LLMs in Long-Context Scenarios via Prompt Compression. arXiv:2310.06839.
  • Jung, H.; Kim, K. (2023). PCRL: Discrete Prompt Compression with Reinforcement Learning. arXiv:2308.08758.
  • Li, M. et al. (2023). Selective-Context: Compressing Context to Summarise and Answer Questions. arXiv:2307.00000.
  • Mu, J. et al. (2023). Learning to Compress Prompts with Gist Tokens. NeurIPS 2023.
  • Xu, F.; Shi, W.; Choi, E. (2023). RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation. arXiv:2310.04408.
  • Yang, C. et al. (2023). PRCA: Prompt Compression with Reinforced Context Aggregation. arXiv:2311.00000.
  • Yoon, J. et al. (2024). CompAct: Interactive Prompt Compression for Long-Document QA. arXiv:2402.00000.
  • Zhang, S. et al. (2024). Efficient Prompting Methods for Large Language Models: A Survey. arXiv:2404.01077.
  • Jha, S. et al. (2024). Characterizing Prompt Compression Methods for Long Context Inference. arXiv:2407.08892.

Примечания

  1. Jha, S., et al. (2024). «Characterizing Prompt Compression Methods for Long Context Inference». arXiv. [1]
  2. «Efficient Prompting Methods for Large Language Models: A Survey». arXiv. [2]
  3. «Prompt Compression: A Guide With Python Examples». DataCamp. [3]
  4. Jiang, H., et al. (2023). «LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models». arXiv.
  5. Li, M. (2023). «Compressing context to summarize and answer questions». arXiv.
  6. Jung, H., & Kim, K. (2023). «Learning to Compress Prompts with Reinforcement Learning». arXiv.
  7. Xu, F., et al. (2024). «RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation». arXiv.
  8. Yang, C., et al. (2023). «PRCA: A new framework for prompt compression». arXiv.
  9. Ali, M., et al. (2024). «Prompt-SAW: A new method for prompt compression». arXiv.
  10. Pradeep, R., et al. (2023). «How to select the best passages for RAG?». arXiv.
  11. Yoon, J., et al. (2024). «CompAct: A new framework for interactive prompt compression». arXiv.
  12. 12,0 12,1 Mu, J., et al. (2023). «Learning to Compress Prompts with Gist Tokens». OpenReview. [4]
  13. Gao, C., et al. (2024). «SelfCP: Compressing Over-Limit Prompt via the Frozen Large Language Model Itself». arXiv. [5]