Kompresja promptu
Kompresja promptu (ang. prompt compression) — to zbiór metod w prompt inżynierii, mających na celu skrócenie długości tekstu wejściowego (promptu) dla dużych modeli językowych (LLM) przy zachowaniu kluczowych informacji[1]. Wraz ze wzrostem okna kontekstowego LLM do milionów tokenów (np. w Google Gemini) pojawiła się możliwość przetwarzania bardzo długich tekstów, lecz stworzyło to nowe problemy: wysokie koszty wywołań, zwiększone opóźnienia oraz obniżenie jakości wnioskowania z powodu efektu „zagubienia w środku"[2].
Kompresja promptu rozwiązuje te problemy, koncentrując w skróconym wejściu najbardziej istotne dane i odrzucając nadmiarowe. Zmniejsza to ryzyko przekroczenia limitu kontekstu, przyspiesza generowanie i obniża koszty, zachowując przy tym dokładność odpowiedzi[3].
Metody kompresji promptu
Metody kompresji promptu można podzielić na kilka głównych klas.
Usuwanie tokenów (filtrowanie)
Podejście to polega na usuwaniu najmniej informatywnych tokenów, fraz lub zdań z tekstu źródłowego bez zmiany pozostałych części. Ważność tokenów określana jest heurystycznie.
- LLMLingua: Metoda opracowana przez Microsoft, która oblicza perpleksję każdego tokenu i usuwa te z nich, które mało wpływają na przewidywalność tekstu. W wersji LongLLMLingua podejście to zostało zaadaptowane dla długich dokumentów, uwzględniając trafność fragmentów względem konkretnego zapytania użytkownika[4].
- Selective-Context: Wykorzystuje niewielki model językowy do oceny self-information każdego tokenu i odrzuca tokeny o najmniejszej informatywności[5].
- PCRL (Prompt Compression via Reinforcement Learning): Uczy agenta za pomocą uczenia przez wzmacnianie (Reinforcement Learning) podejmowania decyzji dla każdego tokenu — „zachować" lub „usunąć" — w celu maksymalizacji metryki jakości (np. ROUGE) finalnej odpowiedzi[6].
Abstrakcyjne sжатие (streszczanie)
W tym podejściu model-kompresor (zazwyczaj mniejszego rozmiaru) generuje krótkie abstrakcyjne streszczenie tekstu źródłowego, które następnie przekazywane jest głównemu LLM.
- RECOMP (Retrieval-Compression-Prompting): Dla każdego dokumentu w bazie wiedzy z góry generowane jest krótkie streszczenie (summary), uwzględniające możliwe zapytania użytkownika (query-aware summary). Pozwala to nie tylko kompresować, lecz także wstępnie przetwarzać informacje[7].
- PRCA (Prompt Compression with Reinforced Context Aggregation): Łączy uczenie modelu-sumaryzatora z uczeniem przez wzmacnianie (Reinforcement Learning), aby generować takie streszczenia, które maksymalnie poprawiają jakość odpowiedzi głównego LLM[8].
- Prompt-SAW (Semantic Aware Winnowing): Przed streszczaniem wyodrębnia z tekstu graf wiedzy (encje i relacje), wybiera trafne węzły grafu i na ich podstawie generuje skompresowany tekst[9].
Ekstrakcyjne kompresowanie
Metoda ta wyodrębnia kluczowe fragmenty (zdania, akapity) z tekstu źródłowego bez ich parafrazowania.
- Reranker-LLMs: Wykorzystuje model rankingowy (reranker), który ocenia ważność każdego akapitu lub dokumentu dla bieżącego zapytania i wybiera wyłącznie najbardziej trafne[10].
- CompAct: Demonstruje iteracyjną ekstrakcję-streszczanie. Model kolejno pobiera segmenty długiego tekstu, kompresuje je i sprawdza, czy informacji wystarczy do udzielenia odpowiedzi. Jeśli nie, dodaje kolejny segment i ponownie kompresuje, osiągając znaczną kompresję przy zachowaniu jakości[11].
Destylacja i „tokeny pamięci"
Nowa klasa metod, w której zamiast tekstu model otrzymuje specjalnie wytrenowane tokeny-zastępniki lub embedding, zawierające skompresowane informacje.
- Gist Tokens: Model LLM jest fine-tunowany w celu „zwijania" długich instrukcji w niewielki zestaw specjalnych gist-tokenów (np. 20–30 tokenów zamiast kilku tysięcy). Tokeny te są następnie używane zamiast oryginalnego promptu, zapewniając do 26-krotną kompresję przy minimalnej utracie jakości[12].
- Soft Prompt Tuning: Zamiast tekstowego promptu używane są uczące się „wirtualne tokeny" (embedding), które są dostrajane do rozwiązania konkretnego zadania.
- SelfCP: Proponuje wykorzystanie samego zamrożonego LLM jako kompresora. Podając mu segment tekstu ze specjalnymi znacznikami, model generuje gęstą reprezentację (memory tokens), która następnie używana jest przez ten sam model do udzielenia odpowiedzi[13].
Efektywność i kompromisy
- Przyspieszenie i redukcja kosztów: Ponieważ złożoność transformera rośnie kwadratowo ($O(n^2)$) wraz z długością sekwencji, kilkukrotne skrócenie promptu przynosi istotne oszczędności. Przykładowo, gist tokens przy 26-krotnej kompresji wykazują do 40% oszczędności FLOPs[12].
- Poprawa jakości: Niekiedy kompresja promptu może nawet poprawić jakość odpowiedzi, jeśli tekst źródłowy zawierał szum lub rozpraszające szczegóły. Usunięcie nieistotnego kontekstu pomaga modelowi lepiej skupić się na ważnych aspektach zadania.
- Kompromis jakościowy (faithfulness): Zbyt agresywna kompresja może prowadzić do utraty istotnych szczegółów (dat, imion, negacji), co obniży jakość odpowiedzi. Metody abstrakcyjne są szczególnie narażone na ryzyko halucynacji. Kontrola kompletności i dokładności (faithfulness) skompresowanego promptu to kluczowe zadanie.
Związek z innymi kierunkami
- Retrieval-Augmented Generation (RAG): RAG i kompresja promptu są ściśle powiązane. RAG można traktować jako zewnętrzny etap kompresji: zamiast przetwarzania całej bazy danych wykonywane jest wyszukiwanie i selekcja trafnych dokumentów. Kompresja promptu uzupełnia RAG, redukując objętość już wyselekcjonowanych dokumentów przed podaniem ich do LLM.
- In-Context Learning: Przykłady w kontekście (demonstracje) znacząco zwiększają długość promptu. Kompresja tych demonstracji (np. za pomocą Instruction Distillation, gdzie wiele przykładów zastępowane jest jedną krótką instrukcją) jest aktywnym obszarem badań.
Literatura
- 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.
Przypisy
- ↑ Jha, S., et al. (2024). «Characterizing Prompt Compression Methods for Long Context Inference». arXiv. [1]
- ↑ «Efficient Prompting Methods for Large Language Models: A Survey». arXiv. [2]
- ↑ «Prompt Compression: A Guide With Python Examples». DataCamp. [3]
- ↑ Jiang, H., et al. (2023). «LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models». arXiv.
- ↑ Li, M. (2023). «Compressing context to summarize and answer questions». arXiv.
- ↑ Jung, H., & Kim, K. (2023). «Learning to Compress Prompts with Reinforcement Learning». arXiv.
- ↑ Xu, F., et al. (2024). «RECOMP: Improving Retrieval-Augmented LMs with Compression and Selective Augmentation». arXiv.
- ↑ Yang, C., et al. (2023). «PRCA: A new framework for prompt compression». arXiv.
- ↑ Ali, M., et al. (2024). «Prompt-SAW: A new method for prompt compression». arXiv.
- ↑ Pradeep, R., et al. (2023). «How to select the best passages for RAG?». arXiv.
- ↑ Yoon, J., et al. (2024). «CompAct: A new framework for interactive prompt compression». arXiv.
- ↑ 12.0 12.1 Mu, J., et al. (2023). «Learning to Compress Prompts with Gist Tokens». OpenReview. [4]
- ↑ Gao, C., et al. (2024). «SelfCP: Compressing Over-Limit Prompt via the Frozen Large Language Model Itself». arXiv. [5]