LLMLingua, LongLLMLingua, Selective-Context: Otomatik Prompt Sıkıştırma Aileleri Karşılaştırma
Microsoft Research'ün LLMLingua serisi prompt'ları %50-90 sıkıştırıp kalite kaybını %2-5'te tutuyor. Bu derste LLMLingua-1, LLMLingua-2, LongLLMLingua, Selective-Context ve LongHeads karşılaştırması, kurulum, ilk Türkçe örnekler.
Şükrü Yusuf KAYA
20 dakikalık okuma
İleri🧬 "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:
- Küçük model (Llama-7B/13B) ile her token'ın bilgi içeriğini ölç
- Perplexity-based scoring — beklenmedik token = bilgi yüklü
- Düşük perplexity (öngörülebilir) token'ları at
- 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ığı:
- Question-aware compression — sorunun ne olduğunu bilerek kompres et
- Question-relevant olan kısımları agressive korur
- Question-irrelevant kısımları agressive atar
- 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#
| Özellik | LLMLingua-1 | LLMLingua-2 | LongLLMLingua | Selective-Context |
|---|---|---|---|---|
| Çıkış yılı | 2023 | 2024 | 2024 | 2023 |
| Underlying model | Llama 7B | XLM-RoBERTa | XLM-RoBERTa | GPT-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 |
| Multilingual | Limited | Yes (100+) | Yes | Limited |
| Türkçe destek | ⚠️ | ✅ | ✅ | ⚠️ |
| Question-aware | ❌ | ⚠️ | ✅ | ❌ |
| GPU gerekli | Evet | Yok (CPU OK) | Yok | Yok |
| Package | llmlingua | llmlingua | llmlingua | selective-context |
Karar matrisi#
| Senaryon | Seç |
|---|---|
| Genel-amaç prompt compression | LLMLingua-2 |
| Long-context RAG (>50K) | LongLLMLingua |
| Conversation history compression | LLMLingua-2 |
| Multi-document QA | LongLLMLingua |
| 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 modelcompressor = 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ünlerinambalajının açılmamış ve etiketinin sökülmemiş olmasıgerekmektedir. İade işlemi sırasında, müşterilerimiz fatura veyafiş ile birlikte ürünü, anlaşmalı kargo firmamızla ücretsiz olarakgönderebilirler. İade onayı yapıldıktan sonra, ödeme tutarı 5-10iş 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 teslimatmümkündür. 250 TL ve üzeri siparişlerde kargo ücretsizdir. Dahadüşük tutarlı siparişlerde kargo ücreti 25 TL'dir. Sipariş takipnumarası, sipariş onaylandıktan sonra SMS ve email ile gönderilir. Ödeme yöntemleri: Kredi kartı (Visa, MasterCard, Troy), bankahavalesi 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.
Sık Sorulan Sorular
Hayır — Microsoft pre-trained model'i (xlm-roberta-large-meetingbank) ücretsiz Hugging Face'te. Download edip kullanırsın. Yeniden eğitmeye gerek yok. Sadece compression yaparken küçük model'i memory'ye yüklemen gerek (~500MB).
Yorumlar & Soru-Cevap
(0)Yorum yazmak için giriş yap.
Yorumlar yükleniyor...
İlgili İçerikler
Modül 0: Neden Maliyet, Neden Şimdi?
AI Maliyet Patlaması: 2022'den 2026'ya Token Fiyatları Neden %96 Düştü Ama Faturalar Neden 40 Kat Arttı?
Öğrenmeye BaşlaModül 0: Neden Maliyet, Neden Şimdi?
Birim Ekonomisi Sözlüğü: COGS, Gross Margin, $/User, Contribution Margin — Mühendisin Bilmesi Gereken 9 Finansal Kavram
Öğrenmeye BaşlaModül 0: Neden Maliyet, Neden Şimdi?