Ana içeriğe geç

İstem Sıkıştırma: Python Örnekleriyle Bir Rehber

İstem sıkıştırma, bir dil modelinin anlaması ve ilgili bir yanıt üretmesi için gereken temel bilgiyi korurken girdi isteminin uzunluğunu azaltma işlemidir.
· 12 dk. oku

Yapay Zeka ile Keşfedin

Yapay zekânın hızla gelişen dünyasında, büyük dil modellerini (LLM) optimize etmek yalnızca mümkün olanın sınırlarını zorlamakla kalmaz, aynı zamanda verimlilik ve maliyet etkinliğini de sağlamayı gerektirir.

İstem sıkıştırma, bu modellerin performansını artırırken hesaplama maliyetlerini en aza indirmeye yardımcı olan kritik bir teknik olarak öne çıktı. Neredeyse her hafta yeni araştırmalar yayınlanırken yetişmek zor olsa da, temelleri anlamak esastır.

Bu makale, istem sıkıştırmanın temellerini ele alır, ne zaman kullanılacağını tartışır, RAG hatlarında maliyetleri düşürmedeki önemini açıklar ve OpenAI’nin API’si üzerinden gpt-3.5-turbo-0125 modelini kullanarak örnekler sunar.

Daha fazlasını öğrenmek isterseniz, istem mühendisliği ile ilgili bu kursa göz atın.

İstem Sıkıştırma Nedir?

İstem sıkıştırma, doğal dil işleme (NLP) alanında, LLM’lere verilen girdileri, çıktının kalitesini ve ilgililiğini kayda değer ölçüde değiştirmeden kısaltarak optimize etmek için kullanılan bir tekniktir. Bu optimizasyon, sorgulardaki belirteç (token) sayısının LLM performansı üzerindeki etkisi nedeniyle kritik öneme sahiptir.

Belirteçler, LLM’lerin kullandığı temel metin birimleridir ve dil modelinin belirteçleyicisine bağlı olarak sözcükleri veya alt sözcükleri temsil eder. Bir istemdeki belirteç sayısını azaltmak birkaç nedenle faydalıdır ve bazen gereklidir:

  • Belirteç sınırı kısıtları: LLM’lerin girdiler için azami belirteç sınırı vardır. Bu sınırın aşılması, önemli bilgilerin kesilmesine, çıktının açıklığının ve modelin etkinliğinin azalmasına yol açabilir.
  • İşleme verimliliği ve maliyet düşürme: Daha az belirteç, daha hızlı işleme süresi ve daha düşük maliyet demektir.
  • Daha ilgili yanıtlar: İnsan tarafından okunabilir bir istem her zaman iyi bir istem değildir. Bazen iyi ve bilgilendirici olduğunu düşündüğümüz istemler, LLM’ler için durak sözcükleri ("a", "the", "is" vb.) gibi önemsiz bilgiler taşıyabilir.

İstem sıkıştırma; yinelenen bilgileri kaldırma, ana noktaları özetleme veya bir istemin özünü damıtırken belirteç sayısını en aza indirmeye yönelik uzmanlaşmış algoritmalar kullanma gibi stratejilerle belirteç sayısını düşürür.

İstem Sıkıştırmayı Ne Zaman Kullanmalıyız?

İstem sıkıştırmayı kullanabileceğimiz senaryoları inceleyelim.

İleri düzey istem mühendisliği teknikleri

Düşünce zinciri (chain-of-thought) gibi teknikler, oldukça etkili olmakla birlikte, çoğu zaman binlerce belirtece ulaşan uzun istemler üretir. Bu durum, işleme sürelerini ve maliyetleri artırır ve bazı modellerin belirteç sınırlarını aşabilir.

İstem sıkıştırma, belirteç sayısını azaltırken istemin etkinliğini koruyarak bu sorunları hafifletir.

Bilgi getirmeli üretim (RAG) hatları

RAG hatları, bilgi getirme ile metin üretimini birleştirir ve bağlamsal anlayışın kritik olduğu uzmanlaşmış sohbet botları ve diğer uygulamalarda sıkça kullanılır. Bu hatlar genellikle istem olarak kapsamlı konuşma geçmişlerine veya getirilen belgelere ihtiyaç duyar; bu da yüksek belirteç sayıları ve artan maliyetlerle sonuçlanır.

Bu tür durumlarda, temel bağlamı korurken maliyetleri en aza indirmek için istem sıkıştırma şarttır.

İstem sıkıştırmanın uygulanabilirliği ve sınırlamaları

İstem sıkıştırmanın evrensel bir çözüm olmadığını ve dikkatli kullanılmasını gerektirdiğini unutmamak önemlidir. Örneğin, sohbet bağlamları için tasarlanmış ChatGPT gibi asistan modeller, agresif istem sıkıştırmadan fayda görmeyebilir.

Bu modeller çoğu zaman belirteç başına ücret almaz ve konuşma geçmişini etkin şekilde yönetmek için entegre sohbet özetleme ve hafıza özelliklerine sahiptir; bu da sıkıştırmayı gereksiz kılar.

Ayrıca, belirteç başına ücret alan modellerle çalışırken bile aşırı sıkıştırmanın nüansların veya önemli ayrıntıların kaybolmasına yol açabileceğini belirtmek gerekir. Boyutu azaltmak ile istemin anlam bütünlüğünü korumak arasında doğru dengeyi kurmak esastır.

İstem Sıkıştırma Nasıl Çalışır?

İstem sıkıştırma teknikleri üç ana yönteme ayrılabilir: bilgi damıtma, kodlama ve filtreleme. Her teknik, LLM’ler için istemlerin uzunluğunu ve verimliliğini optimize etmek üzere farklı güçlü yönlerden yararlanır.

Bu tekniklerin her birinden bahsedecek olsak da, daha kapsamlı bir yaklaşımı şu makalede bulabilirsiniz: Efficient Prompting Methods for Large Language Models: A Survey. Bu makale boyunca bu çalışmaya “survey makalesi” diye atıfta bulunacağım.

Bilgi damıtma

Bilgi damıtma, ilk olarak Hinton ve ark. (2015) tarafından tanıtılan ve daha küçük, daha basit bir modelin (öğrenci) daha büyük ve karmaşık bir modelin (öğretmen) davranışını taklit edecek şekilde eğitildiği bir makine öğrenimi tekniğidir.

Bu teknik başlangıçta bir model kümesini eğitmenin hesaplama zorluklarını ele almak için geliştirilmiştir. İstem mühendisliği bağlamında ise bilgi damıtma, model yerine istemi sıkıştırmak için kullanılabilir.

Bu, yumuşak istem ayarı yoluyla LLM’lerdeki zor istemlerin nasıl sıkıştırılacağının öğrenilmesiyle sağlanır. Ayrıntılı bilgiler için survey makalesinin 3.1 ve ek A.1.1 bölümlerine bakın.

Kodlama

Kodlama yöntemleri, girdi metinlerini vektörlere dönüştürerek kritik bilgiyi yitirmeden istem uzunluğunu azaltır. Bu vektörler istemlerin temel anlamını yakalar ve LLM’lerin daha kısa girdileri verimli şekilde işlemesine olanak tanır.

Ancak kodlama dili ve belirteçleyiciye bağlı olarak belirteç uzunluğu gerçekte artabilir. Örneğin, bir istemi Base64 ile kodlarsanız belirteç uzunluğu daha da büyük olabilir; bu nedenle kullanım durumunuza göre ön testler yapmayı ihmal etmeyin.

İlginç biçimde, bazı kodlama teknikleri modelin güvenlik mekanizmalarını atlatmaya (jailbreaking) da kullanılır. Kodlama yöntemleri hakkında daha fazla ayrıntı için survey makalesinin 3.2 ve ek A.1.2 bölümlerine bakın.

Filtreleme

Önceki iki yöntem tüm istemi sıkıştırmaya çalışırken, filtreleme teknikleri LLM’lerin verimliliğini artırmak için gereksiz parçaları elemek üzerinde yoğunlaşır.

Filtreleme teknikleri, bir istemin farklı kısımlarının bilgi içeriğini değerlendirir ve istemdeki tüm bilgilerin LLM’ler için faydalı olmadığı varsayımından hareketle yinelenen bilgileri kaldırır. Bu, cümle, öbek veya belirteç düzeyinde yapılabilir.

Amaç, istemin yalnızca en ilgili kısımlarını korumaktır. Li ve ark. (2023) tarafından Selective Context makalesinde araştırmacılar, yinelenen bilgileri filtrelemek için özbilgi ölçümlerini kullanır. LLMLingua: Compressing Prompts for Accelerated Inference of Large Language Models çalışmasında ise Microsoft araştırmacıları, istemleri kilit bileşenlere rafine eder ve her parça için sıkıştırma oranlarını dinamik olarak ayarlar. Daha fazla okuma için survey makalesinin 3.3 ve ek A.1.3 bölümlerine bakın.

Python ile İstem Sıkıştırma Nasıl Uygulanır

Bu bölümde, popüler olan ve son teknoloji kabul edilen Selective Context algoritmasını uygulayıp test edeceğim. Yalnızca algoritmayı denemek istiyorsanız hiçbir şey kurmanıza gerek yok—zaten HuggingFace platformunda barındırılıyor.

Ayrıca Keep It Simple (KIS), SCLR ve LLMLingua ailesindeki algoritmalar gibi diğer yaygın sıkıştırma teknikleri de var; ancak bu kısa makalede bunları ele alamayacağız.

HuggingFace üzerindeki Selective Context sayfasının ekran görüntüsü.

Uygulama Bağlantısı

Selective Context web uygulamasında, sıkıştırmak istediğiniz istemin dilini (İngilizce veya Basitleştirilmiş Çince) seçebilirsiniz. Ayrıca sıkıştırma oranını ayarlayabilir ve cümleleri, belirteçleri veya öbekleri filtreleyip filtrelemeyeceğinizi belirleyebilirsiniz.

OpenAI API ile Selective Context’i uygulama ve test etme

Şimdi Python uygulaması üzerinde çalışalım. Ayrıca gpt-3.5-turbo-0125 modeliyle birkaç sıkıştırılmış istemi test edeceğiz.

Önce gerekli tüm modülleri kurmamız gerekiyor. pip kullanarak selective-context kütüphanesini kurmalıyız:

pip install selective-context

Ayrıca spacy içinden en_core_web_sm modelini indirmemiz gerekiyor; bunu aşağıdaki komutla yapabilirsiniz:

python -m spacy download en_core_web_sm

Şimdi SelectiveContext nesnesini başlatmamız gerekiyor. Model için curie veya gpt-2, dil için en veya zh seçebiliriz. Bu örnekte gpt-2 kullanacağım.

sc = SelectiveContext(model_type = ‘gpt-2’, lang = ‘en’)

Ardından, sıkıştırmak istediğimiz metin dizesi üzerinde SelectiveContext nesnemizi çağırabiliriz. reduce_ratio ve reduce_level parametrelerini ayarlayabiliriz. reduce_level aşağıdakilerden biri olmalıdır: ‘sent’, ‘phrase’ veya ‘token’. Nesne çağrısı, context sıkıştırılmış istem, reduced_content ise kaldırılan öbek, cümle veya belirteçlerin listesi olacak şekilde bir (context, reduced_content) ikilisi döndürür.

context, reduced_content = sc(text, reduce_ratio = 0.5, reduce_level = ‘sent’)

Şimdi birkaç örnek yapalım. Model gpt-3.5-turbo-0125’den bu makaledeki “İstem sıkıştırmayı ne zaman kullanmalıyız” bölümünü özetlemesini isteyeceğim. Ardından bölümü, cümle, öbek ve belirteç olmak üzere üç azaltma düzeyinin tümünde 0,5 sıkıştırma oranıyla sıkıştıracağız. Modelden sıkıştırılmış sürümleri yeniden özetlemesini isteyecek ve her istemin belirteç sayısını ve modelin çıktısını karşılaştıracağız.

Orijinal paragraf ve özet

Aşağıda kullanacağım API çağrısını görebilirsiniz—sadece biçim dizesindeki text değişkenini değiştireceğiz. İlk olarak, modelden orijinal, sıkıştırılmamış paragrafı özetlemesini istiyoruz:

from openai import OpenAI
client = OpenAI(api_key = key)
completion = client.chat.completions.create(
	model = “gpt-3.5-turbo-0125”,
	messages = [
{“role”: “user”, “content”: f”Summarize the following paragraph:\n {text}”}
]
)

completion.usage’ı kontrol ederek orijinal istemin 304 belirteç uzunluğunda olduğunu görebiliriz ve çıktı şöyledir:

[Prompt compression is useful in scenarios such as advanced prompt engineering techniques and retrieval-augmented generation pipelines to reduce token counts and costs while preserving effectiveness and context. However, it is not a universal solution and should be used judiciously, as excessive compression can lead to a loss of important details. It is important to strike a balance between reducing size and maintaining the prompt's meaning.]

Görüldüğü gibi, model sıkıştırılmamış paragrafı oldukça iyi özetledi.

Belirteç düzeyinde azaltma

Şimdi belirteç düzeyinde azaltılmış sürümü deneyelim. Sıkıştırılmış paragraf şöyle görünüyor:

[When Should Prompt CompProm compression particularly following Advanced prompt engineering Techniques like chainofthought prompting while highly lengthy prompts reach thousands tokensThis increases processing costs and may exceed token limits of certain modelsProm compression mit these token count while prompt effectivenessRetri-au generationRAG pipelines R combine information retrieval text specialized chat contextual understandingThese pipelines frequently involve providing extensive conversation histories retrieved as prompts leading high token counts increased expensesProm compression essential such essential context while costsApplic prompt compression It prompt universal judFor instance assistant models like ChatGPT designed convers contexts benefit aggressive prompt compressionThese models often do charge per token integrated chat summar memory features conversation history effectively compression redundantIt even working models charge per token excessive compression could nuance importantSt reducing size maintaining prompt’s meaning is]

İstem 162 belirteç uzunluğunda ve model özeti şu şekilde:

[Prompt compression is recommended following advanced prompt engineering techniques like chain of thought prompting, especially when dealing with lengthy prompts that reach thousands of tokens. This helps reduce processing costs and ensure that the prompt remains effective for models like RAG pipelines, which involve extensive conversation histories. Prompt compression is essential for maintaining context while keeping costs low, particularly for models like ChatGPT that charge per token and benefit from aggressive compression. However, excessive compression could lead to loss of important nuances, so it is important to strike a balance between reducing size and maintaining the prompt's meaning.]

Paragraf doğru özetlenmedi. ChatGPT’nin agresif sıkıştırmadan fayda görmediğine dair nüans kayboldu.

Cümle düzeyinde azaltma

Sırada cümle düzeyinde azaltma var. Azaltılmış istem 129 belirteç uzunluğunda:

[When Should We Use Prompt Compression? This increases processing times and costs and may exceed token limits of certain models. These pipelines frequently involve providing extensive conversation histories or retrieved documents as prompts, leading to high token counts and increased expenses. Prompt compression is essential in such cases to maintain essential context while minimizing costs. For instance, assistant models like ChatGPT, designed for conversational contexts, may not benefit from aggressive prompt compression. These models often do not charge per token and have integrated chat summarization and memory features to manage conversation history effectively, making compression redundant. ]

Model özeti şöyle:

[Prompt compression is necessary when processing times, costs, and token limits may be exceeded in pipelines involving extensive conversation histories or retrieved documents as prompts. However, for certain models like ChatGPT, designed for conversational contexts, aggressive prompt compression may not be beneficial as they already have features to manage conversation history effectively without the need for compression.]

Bu özet hata içermiyor ancak RAG tartışmasını atlıyor.

Öbek düzeyinde azaltma

Son olarak öbek düzeyinde azaltmayı test edelim. İstem 183 belirteç uzunluğunda:

[When Should Prompt Compression Prompt compression particularly beneficial Advanced prompt engineering techniques Techniques like chainofthought prompting while highly lengthy prompts reach thousands tokens This increases processing costs and may exceed token limits of certain models Prompt compression these issues token count while the prompt's effectiveness Retrieval-augmented generation (RAG) pipelines RAG pipelines combine information retrieval text generation specialized chatbots contextual understanding These pipelines frequently involve providing extensive conversation histories or retrieved as prompts leading high token counts increased expenses Prompt compression essential such cases to maintain essential context while costs Applicability prompt compression It's For instance assistant models like ChatGPT designed conversational contexts may benefit aggressive prompt compression These models often do charge per token have integrated chat summarization memory features manage conversation history effectively making compression redundant It even working models charge per token excessive compression could nuance important details reducing size maintaining the prompt’s meaning is
]

Modelin özeti şöyle:

[Prompt compression is beneficial in advanced prompt engineering techniques, such as chainofthought prompting, which can involve lengthy prompts reaching thousands of tokens. Retrieval-augmented generation (RAG) pipelines combine information retrieval and text generation in specialized chatbots, requiring extensive conversation histories or retrieved prompts leading to high token counts and increased expenses. Prompt compression is essential in maintaining context while managing costs in such cases. For instance, assistant models like ChatGPT, which are designed for conversational contexts, may benefit from aggressive prompt compression to effectively manage conversation history and reduce costs. However, excessive compression could compromise important details, so maintaining the prompt's meaning is crucial.]

Özet büyük ölçüde doğru ve tutarlı. Ancak ChatGPT’nin agresif istem sıkıştırmadan fayda gördüğü kısmını yanlış anlıyor.

İstem sıkıştırmayı değerlendirme

Farklı sıkıştırma düzeylerinde belirteç sayılarını ve model özetlerinin içeriğini karşılaştırarak, istem sıkıştırmanın model çıktısı üzerindeki etkisini görebiliriz:

Sıkıştırma düzeyi

Belirteç sayısı (orijinali 304)

Doğruluk

Belirteç düzeyi

162

ChatGPT’nin agresif sıkıştırmadan fayda görmediğine dair önemli nüansları kaybetti ve hatalar yaptı.

Cümle düzeyi

129

Hata yapmadı ancak RAG hatlarıyla ilgili bazı bağlamları kaçırdı.

Öbek düzeyi

183

Belirteç düzeyine benzer şekilde, ChatGPT’nin agresif sıkıştırmadan fayda gördüğünü yanlış belirtti.

Genel olarak, istem sıkıştırma ana fikirleri korurken belirteç sayısını önemli ölçüde azaltabilir. Ancak, önemli nüansların ve bağlamın kaybolmaması için dengeyi tutturmak şarttır.

Bu alıştırma, belirli uygulamaya ve istemde bazı ayrıntıları korumanın kritikliğine bağlı olarak sıkıştırma düzeyinin dikkatle seçilmesi gerektiğini vurgular.

Tüm deneyleri nispeten yüksek sayılabilecek 0,5 sıkıştırma oranıyla yaptığımızı belirtmekte fayda var. Farklı kullanım durumları için çeşitli sıkıştırma oranlarını deneyerek, istem boyutunu azaltma ile bütünlüğünü koruma arasındaki en iyi dengeyi bulmak isteyebilirsiniz.

Sonuç

İstem sıkıştırma, LLM’lerin verimliliğini ve maliyet etkinliğini optimize etmek için güçlü bir tekniktir. Önemini, çeşitli tekniklerini ve uygulama ayrıntılarını tartışarak temellerini ele aldık.

Üretken yapay zekâ alanı gelişmeye devam ettikçe, en son gelişmeleri takip etmek kritik önemdedir. İstem sıkıştırma ve ilgili teknikler konusundaki becerilerinizi ve anlayışınızı daha da geliştirmek için bu makalede atıfta bulunulan makaleleri ve ayrıca DataCamp’in aşağıdaki kapsamlı blog yazıları ve kurslarını keşfetmenizi öneririm:

İstem Sıkıştırma Hakkında SSS

İstem sıkıştırma nedir ve neden önemlidir?

İstem sıkıştırma, büyük dil modellerine (LLM) verilen girdileri, çıktının kalitesini ve ilgililiğini koruyarak kısaltmak için kullanılan bir tekniktir. Önemlidir; çünkü belirteç sınırları içinde kalmaya yardımcı olur, işleme süresini ve maliyetleri azaltır.

İstem sıkıştırmayı uygulamadaki yaygın zorluklar nelerdir?

Yaygın zorluklar arasında, sıkıştırma ile temel bilgileri koruma arasındaki dengeyi sağlamak, çeşitli girdi veri türlerini ele almak ve sıkıştırılmış istemin hâlâ yüksek kaliteli çıktılar üretmesini temin etmek yer alır. Ayrıca, makine öğrenimi tabanlı ve hibrit yaklaşımları uygulamak kaynak yoğun ve karmaşık olabilir.

Sohbet botlarında çok turlu konuşmalar için istem sıkıştırmayı nasıl ele alırsınız?

Çok turlu konuşmalarda, istem sıkıştırma önceki etkileşimlerden gelen bağlamın korunmasını sağlamalıdır. Seçici bağlam filtreleme gibi teknikler, konuşmanın kritik kısımlarını tutarken daha az önemli bilgileri sıkıştırmaya yardımcı olabilir. Bu yaklaşım, sohbet botunun yanıtlarında sürekliliği ve ilgililiği korur.

İstem sıkıştırma becerilerimi geliştirmek için hangi kaynakları kullanabilirim?

Becerilerinizi daha da geliştirmek için makalede bahsi geçen araştırma makalelerini, blog yazılarını ve DataCamp kurslarını inceleyin. Konular arasında istem mühendisliğini anlama, istem ayarlama ve bilgi getirmeli üretim (RAG) yer alır; bunların tümü istem sıkıştırmada ustalaşmak için kritiktir. Ayrıca öğrendiğiniz teknikleri mutlaka uygulayın.

İstem sıkıştırma kullanırken etik açıdan dikkat edilmesi gerekenler var mı?

Evet, etik hususlar arasında, sıkıştırmanın istemeden önyargılar getirmemesini ya da yanıltıcı veya zararlı çıktılara yol açabilecek kritik bilgileri dışlamamasını sağlamak yer alır. Ayrıca istem sıkıştırma teknikleri, modeli istemeden jailbreak ederek öngörülemeyen davranışlara veya uygunsuz içerik üretimine neden olabilir. Özellikle sağlık, finans veya hukuk danışmanlığı gibi hassas uygulamalarda, istem sıkıştırmanın modelin performansı ve çıktıları üzerindeki etkilerini izlemek önemlidir.

Dimitri Didmanidze

Yazar

Dimitri Didmanidze

Ben Dimitri Didmanidze. Makine Öğrenmesi odaklı Matematik yüksek lisansı yapıyorum. Akademik yolculuğum, dönüştürücü tabanlı modellerin yetenekleri üzerine araştırmaları ve üniversite düzeyinde ders vermeyi de kapsadı; bu deneyimler, karmaşık kuramsal kavrayışımı güçlendirdi. Ayrıca bankacılık sektöründe çalışarak bu ilkeleri gerçek dünyadaki veri sorunlarını çözmek için uyguladım.

Konular

İlgili