Skip to content

LLMLingua, LongLLMLingua, Selective-Context: Comparison of Automatic Prompt Compression Families

Microsoft Research's LLMLingua family compresses prompts 50-90% while keeping quality loss at 2-5%. This lesson compares LLMLingua-1, LLMLingua-2, LongLLMLingua, Selective-Context, LongHeads with setup and first Turkish examples.

Şükrü Yusuf KAYA
20 min read
Advanced
LLMLingua, LongLLMLingua, Selective-Context: Otomatik Prompt Sıkıştırma Aileleri Karşılaştırma
🧬 "Prompt'u modele anlatmak için bütününü göndermek zorunda mıyız?"
Microsoft Research'ün cevabı: hayır. Modül 5'te manuel kısalttığımız prompt'ları otomatik %80-90 sıkıştırma mümkün — küçük bir önceden eğitilmiş model ile. Bu derste o teknoloji.

Niye Otomatik Sıkıştırmaya İhtiyaç Var?#

Manuel optimizasyon (Modül 5) sınırlı:
  • Statik prompt'lar için işliyor — sistem prompt'unu yeniden yazarsın
  • Dinamik içerik için işlemiyor — RAG retrieved chunks, conversation history, tool outputs
Bunlar her isteğin runtime'da üretilir. Manuel optimize edemezsin. Otomatik compression burada devreye girer.

Tipik kullanım örnekleri#

  • RAG: Retrieved 10K token doküman → 2K önemli kısım
  • Conversation history: 20-turn sohbeti 5 turn'lük özet'e
  • Agent context: Tool outputs, observations accumulated → essential subset
  • Document analysis: 100K token doküman → 15K önemli kısım

LLMLingua-1 (2023)#

İlk versiyon. Mantığı şöyle:
  1. Küçük model (Llama-7B/13B) ile her token'ın bilgi içeriğini ölç
  2. Perplexity-based scoring — beklenmedik token = bilgi yüklü
  3. Düşük perplexity (öngörülebilir) token'ları at
  4. Geriye kalan compact prompt'u büyük modele gönder
from llmlingua import PromptCompressor compressor = PromptCompressor( model_name="NousResearch/Llama-2-7b-hf", use_llmlingua2=False, ) compressed = compressor.compress_prompt( long_context="...", instruction="Yanıtın için sadece relevant bilgiyi kullan.", question="...", ratio=0.3, # 70% sıkıştırma ) print(compressed["compressed_prompt"])

Performans#

  • Sıkıştırma oranı: %50-80 tipik
  • Kalite kaybı: %3-8
  • Latency: +200-500ms (küçük model inference)
Trade-off: prompt küçülür, ama küçük modelin inference'i için ek maliyet ve gecikme var.

LLMLingua-2 (2024) — Daha Hızlı, Daha İyi#

İkinci versiyon (yeni paper, yeni model):
  • Bidirectional encoder (BERT-style, küçük) — perplexity yerine classification
  • Her token "tut / at" şeklinde etiketlenir
  • 50× daha hızlı (BERT küçük + simple classification)
  • Türkçe için multilingual support
compressor = PromptCompressor( model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank", use_llmlingua2=True, ) compressed = compressor.compress_prompt( context=long_text, rate=0.5, # 50% retention force_tokens=["\n", "?", "."], # bu karakterler korunur )

Performans#

  • Sıkıştırma oranı: %60-90
  • Kalite kaybı: %2-4 (daha iyi)
  • Latency: +50-150ms (çok daha hızlı)
  • Multilingual: Türkçe dahil 100 dil
Modül 6'nın default seçimi bu.

LongLLMLingua — Uzun Bağlam İçin#

100K+ token RAG sonuçları için özel.
Mantığı:
  1. Question-aware compression — sorunun ne olduğunu bilerek kompres et
  2. Question-relevant olan kısımları agressive korur
  3. Question-irrelevant kısımları agressive atar
  4. Multi-document scenarios için optimize
compressor = PromptCompressor(use_llmlingua2=True) compressed = compressor.compress_prompt( context=retrieved_documents, # 50K token retrieved question=user_query, rate=0.3, use_context_level_filter=True, # ← uzun-bağlam özel ) # Çıktı 15K token, soru-relevant kısımlar korunmuş

Selective-Context (Yiqun Yao et al.)#

Farklı bir paradigma:
  • Tek-token tek-token gitmiyor, sentence-level veya phrase-level evaluation
  • Self-information metric (perplexity yerine)
  • Sintaks-aware (cümleyi yarı yarıya kesmiyor)
# Selective-Context library from selective_context import SelectiveContext sc = SelectiveContext(model_type="gpt2", lang="zh") # multilingual context, indices = sc( text=long_text, reduce_ratio=0.5, # %50 kısıt reduce_level="sent", # sentence-level )

Avantajlar#

  • Output daha okunabilir (cümleler bütün)
  • Quality kaybı daha az LLMLingua-1'den

Dezavantajlar#

  • LLMLingua-2'den biraz daha yavaş
  • Multi-lingual support daha sınırlı

Karşılaştırma Tablosu#

ÖzellikLLMLingua-1LLMLingua-2LongLLMLinguaSelective-Context
Çıkış yılı2023202420242023
Underlying modelLlama 7BXLM-RoBERTaXLM-RoBERTaGPT-2
Sıkıştırma oranı%50-80%60-90%70-95%40-70
Quality loss%3-8%2-4%3-6%3-7
Latency overhead+500ms+100ms+200ms+300ms
MultilingualLimitedYes (100+)YesLimited
Türkçe destek⚠️⚠️
Question-aware⚠️
GPU gerekliEvetYok (CPU OK)YokYok
Packagellmlinguallmlinguallmlinguaselective-context

Karar matrisi#

SenaryonSeç
Genel-amaç prompt compressionLLMLingua-2
Long-context RAG (>50K)LongLLMLingua
Conversation history compressionLLMLingua-2
Multi-document QALongLLMLingua
Sentence-aware (okunabilirlik kritik)Selective-Context
Maliyet-hassas (CPU-only)LLMLingua-2

İlk Türkçe Örnek#

LLMLingua-2'i Türkçe RAG bağlamı üzerinde test edelim.
python
# pip install llmlingua
 
from llmlingua import PromptCompressor
 
# LLMLingua-2 multilingual model
compressor = PromptCompressor(
model_name="microsoft/llmlingua-2-xlm-roberta-large-meetingbank",
use_llmlingua2=True,
)
 
# Türkçe RAG bağlamı (örnek)
turkish_context = """
İade ve değişim politikamız: Müşterilerimiz aldıkları ürünleri,
14 gün içerisinde iade edebilirler. İade edilecek ürünlerin
ambalajının açılmamış ve etiketinin sökülmemiş olması
gerekmektedir. İade işlemi sırasında, müşterilerimiz fatura veya
fiş ile birlikte ürünü, anlaşmalı kargo firmamızla ücretsiz olarak
gönderebilirler. İade onayı yapıldıktan sonra, ödeme tutarı 5-10
iş günü içerisinde müşterimizin hesabına iade edilmektedir.
 
Kargo bilgileri: Tüm Türkiye geneline kargo süremiz 1-3 iş günüdür.
İstanbul içi siparişlerde aynı gün veya bir sonraki gün teslimat
mümkündür. 250 TL ve üzeri siparişlerde kargo ücretsizdir. Daha
düşük tutarlı siparişlerde kargo ücreti 25 TL'dir. Sipariş takip
numarası, sipariş onaylandıktan sonra SMS ve email ile gönderilir.
 
Ödeme yöntemleri: Kredi kartı (Visa, MasterCard, Troy), banka
havalesi ve kapıda ödeme seçenekleri mevcuttur. Kredi kartı
ödemelerinde 12 aya kadar taksit imkânı sunmaktayız.
"""
 
question = "İade için kaç gün süre var?"
 
result = compressor.compress_prompt(
context=turkish_context,
question=question,
rate=0.4, # %60 sıkıştırma
force_tokens=["\n", ".", ":"],
)
 
print(f"Original token sayısı: {result['origin_tokens']}")
print(f"Sıkıştırılmış: {result['compressed_tokens']}")
print(f"Sıkıştırma oranı: {result['ratio']}")
print(f"\n=== Compressed ===\n{result['compressed_prompt']}")
print(f"\n=== Saving ===\n{result['saving']}")
Türkçe RAG bağlamı LLMLingua-2 ile %60 sıkıştırma.

Beklenen çıktı#

Original token sayısı: 248 Sıkıştırılmış: 102 Sıkıştırma oranı: 0.41x Token tasarrufu: 146 === Compressed === İade ve değişim politikamız: 14 gün içerisinde iade. Ambalaj açılmamış olmalı. Fatura ile gönderim. İade onayı sonrası 5-10 iş günü. Kargo: 1-3 iş günü. İstanbul içi aynı gün. 250 TL üstü ücretsiz. Düşük: 25 TL. Ödeme: Kredi kartı, havale, kapıda ödeme. 12 ay taksit. === Saving === Tokens saved: 146 ($0.0004 per request, $400/year @ 1M requests)

Production Pattern#

Compression'ı pipeline'a entegre etmek için:
import os from llmlingua import PromptCompressor from litellm import completion compressor = PromptCompressor(use_llmlingua2=True) class CompressedRAGPipeline: def __init__(self, target_compression: float = 0.5): self.target = target_compression async def answer(self, question: str, retrieved_chunks: list[str]): # 1. Retrieved chunks join context = "\n\n".join(retrieved_chunks) # 2. Compress compressed = compressor.compress_prompt( context=context, question=question, rate=self.target, ) # 3. LLM call with compressed response = await completion( model="claude-sonnet-4-6", messages=[ {"role": "system", "content": "Aşağıdaki bilgiye dayanarak Türkçe yanıt ver."}, {"role": "user", "content": f"BİLGİ:\n{compressed['compressed_prompt']}\n\nSORU: {question}"}, ], max_tokens=300, metadata={ "feature": "rag", "compression_ratio": compressed["ratio"], "saved_tokens": compressed["origin_tokens"] - compressed["compressed_tokens"], }, ) return response pipeline = CompressedRAGPipeline(target_compression=0.4)
▶️ Sıradaki ders
6.2 — Gisting ve Soft-Prompt Tuning. LLMLingua'dan daha radikal sıkıştırma: prompt'u embedding vektörlerine çevirip 1/100 boyuta sığdırmak. Avantaj büyük, kısıt da büyük.

Frequently Asked Questions

No — Microsoft's pre-trained model (xlm-roberta-large-meetingbank) is freely available on Hugging Face. Download and use. No need to retrain. You only need to load the small model into memory (~500MB) during compression.

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

Related Content