Büyük dil modelleri ni gerçek dünya uygulamalarına entegre etmek için uygulamalı bir rehbere hoş geldiniz. Sadece okumakla kalmayın, uygulamaya geçin.
Yapay zekanın sadece bir hype veya dış gürültü olup olmadığını merak ediyor olabilirsiniz. Ben de başlangıçta bunun abartıldığını ve toz bulutu dağılana kadar bekleyebileceğimi düşünmüştüm. Ama yanılmışım. Üretken yapay zekanın gerçek dünya uygulamaları var. Ayrıca şirketler için gelir üretiyor, bu nedenle şirketlerin araştırmalara büyük yatırımlar yapması bekleniyor.
Bir teknoloji bir şeyi değiştirdiğinde, süreç genellikle şu aşamalardan geçer: inkar, öfke ve kabul. Bilgisayarlar tanıtıldığında da aynı şey olmuştu. Yazılım veya donanım alanında çalışıyorsak, bir noktada üretken yapay zekayı kullanmamız gerekebilir.
Bu makalede, uygulamanızı Büyük Dil Modelleri (LLM’ler) ile nasıl güçlendireceğinizi ve LLM’leri kurarken karşılaştığım zorlukları ele alacağım. Hadi başlayalım.
1. Kullanım Senaryonuzu Net Bir Şekilde Tanımlayarak Başlayın
Büyük dil modelleri konusuna atlamadan önce kendimize bazı sorular sormalıyız:
a. Büyük dil modelleri hangi problemi çözecek? b. Uygulamam Büyük dil modelleri olmadan yapabilir mi? c. Bu uygulamayı geliştirmek ve dağıtmak için yeterli kaynağa ve işlem gücüne sahip miyim?
Kullanım senaryonuzu daraltın ve belgelendirin. Benim durumumda, bir veri platformu hizmeti üzerinde çalışıyordum. Wiki’lerde, Slack’te, ekip kanallarında vs. tonlarca bilgimiz vardı. Bu bilgileri okuyup sorulara cevap verecek bir sohbet botu istiyorduk. Sohbet botu, müşteri sorularını ve isteklerini bizim adımıza cevaplayacak ve müşteriler hala memnun kalmazlarsa bir mühendise yönlendirileceklerdi.
2. Modelinizi Seçin
İki seçeneğiniz var: Modelinizi sıfırdan eğitmek veya önceden eğitilmiş bir model kullanıp üzerine inşa etmek. İkincisi, özel bir kullanım senaryonuz olmadığı sürece çoğu durumda işe yarayacaktır. Modelinizi sıfırdan eğitmek, büyük hesaplama gücü, önemli mühendislik çabaları ve maliyetler gerektirecektir.

Peki, hangi önceden eğitilmiş modeli seçmeliyim? Kullanım senaryonuza göre bir model seçebilirsiniz:
- 1B parametreli model: Temel bilgi ve örüntü eşleştirme özelliklerine sahiptir. Restoran değerlendirmeleri gibi kullanım senaryoları için uygundur.
- 10B parametreli model: Mükemmel bilgiye sahiptir ve yemek siparişi sohbet botu gibi talimatları takip edebilir.
- 100B+ parametreli model: Zengin dünya bilgisine ve karmaşık mantık yürütme yeteneğine sahiptir. Beyin fırtınası ortağı olarak kullanılabilir.
Llama ve ChatGPT gibi pek çok model mevcuttur. Bir model seçtikten sonra, modeli genişletebilirsiniz.
3. Büyük dil modelleri ile Uygulama Modelini Verilerinize Göre Geliştirin
Bir modele sahip olduktan sonra, onu genişletebilirsiniz. Büyük dil modelleri modeli genellikle erişilebilir verilerle eğitilmiştir. Onu kendi verilerimizle eğitmek isteriz. Modelimizin yanıt sağlamak için daha fazla bağlama ihtiyacı var.
Diyelim ki müşteri sorularını yanıtlayan bir restoran sohbet botu oluşturmak istiyoruz. Model, restoranınıza özgü bilgileri bilmiyor. Bu yüzden modele bazı bağlamlar sağlamak istiyoruz. Bunu birçok şekilde başarabiliriz. Bazılarına göz atalım:
Prompt Mühendisliği
Prompt mühendisliği, çıkarım sırasında giriş promptuna daha fazla bağlam eklemeyi içerir. Bağlamı giriş alıntınızın içinde sağlarsınız. Bu, yapılması en kolay yöntemdir ve hiçbir geliştirme gerektirmez. Ancak dezavantajları vardır. Prompt içinde büyük bir bağlam sağlayamazsınız. Bağlam promptunun bir limiti vardır. Ayrıca, kullanıcının her zaman tam bağlam sağlamasını bekleyemezsiniz. Bağlam kapsamlı olabilir. Bu hızlı ve kolay bir çözümdür, ancak çeşitli sınırlamaları vardır. İşte örnek bir prompt mühendisliği:
"Bu değerlendirmeyi sınıflandır
Filmi sevdim
Duygu: Olumlu
Bu değerlendirmeyi sınıflandır
Filmden nefret ettim.
Duygu: Olumsuz
Filmi sınıflandır
Final heyecan vericiydi"
İnsan Geri Bildirimiyle Pekiştirmeli Öğrenme (RLHF)

RLHF, Büyük dil modelleri ni bir uygulamaya entegre etmek için en çok kullanılan yöntemlerden biridir. Modelin öğrenmesi için bazı bağlamsal veriler sağlarsınız. İzlediği akış şöyledir: Model, eylem alanından bir eylem alır ve bu eylemin sonucu olarak ortamda meydana gelen durum değişikliğini gözlemler. Ödül modeli, çıktıya göre bir ödül sıralaması oluşturur. Model, ödülü maksimize etmek için ağırlıklarını günceller ve yinelemeli olarak öğrenir.
Örneğin, Büyük dil modelleri nde eylem, LLM’nin ürettiği bir sonraki kelimedir ve eylem alanı, tüm olası kelimeler ve sözcük dağarcığının sözlüğüdür. Ortam metin bağlamıdır; Durum, bağlam penceresindeki mevcut metindir.
Yukarıdaki açıklama daha çok bir ders kitabı açıklaması gibidir. Gerçek bir örneğe bakalım. Sohbet botunuzun wiki belgelerinizle ilgili soruları yanıtlamasını istiyorsunuz. Şimdi ChatGPT gibi önceden eğitilmiş bir model seçersiniz. Wiki’leriniz bağlam verileriniz olacaktır. RAG (Retrieval-Augmented Generation) gerçekleştirmek için langchain kütüphanesinden yararlanabilirsiniz. İşte Python’da örnek bir kod:
from langchain.document_loaders import WikipediaLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA
import os
# OpenAI API anahtarınızı ayarlayın
os.environ["OPENAI_API_KEY"] = "openai-api-anahtariniz-buraya"
# Adım 1: Wikipedia belgelerini yükleyin
query = "Alan Turing"
wiki_loader = WikipediaLoader(query=query, load_max_docs=3)
wiki_docs = wiki_loader.load()
# Adım 2: Metni yönetilebilir parçalara bölün
splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
split_docs = splitter.split_documents(wiki_docs)
# Adım 3: Parçaları vektörlere gömün
embeddings = OpenAIEmbeddings()
vector_store = FAISS.from_documents(split_docs, embeddings)
# Adım 4: Bir alma aracı oluşturun
retriever = vector_store.as_retriever(search_type="similarity", search_kwargs={"k": 3})
# Adım 5: Bir RetrievalQA zinciri oluşturun
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")
qa_chain = RetrievalQA.from_chain_type(
llm=llm,
chain_type="stuff", # "map_reduce" veya "refine" da deneyebilirsiniz
retriever=retriever,
return_source_documents=True,
)
# Adım 6: Bir soru sorun
question = "Alan Turing bilgisayar bilimine ne katkıda bulundu?"
response = qa_chain(question)
# Cevabı yazdırın
print("Cevap:", response["result"])
print("\n--- Kaynaklar ---")
for doc in response["source_documents"]:
print(doc.metadata)
4. Modelinizi Değerlendirin
Şimdi, modelinize RAG eklediniz. Modelinizin doğru davranıp davranmadığını nasıl kontrol edersiniz? Bu, bazı giriş parametreleri verdiğiniz ve test edebileceğiniz sabit bir çıktı aldığınız bir kod değil. Bu dil tabanlı bir iletişim olduğundan, birden fazla doğru cevap olabilir. Ancak kesin olarak bilebileceğiniz şey, cevabın yanlış olup olmadığıdır. Modelinizi test edebileceğiniz birçok metrik var.
Manuel Değerlendirme
Modelinizi sürekli olarak manuel olarak değerlendirebilirsiniz. Örneğin, biz wiki’lerimiz ve Jira ile RAG kullanarak geliştirilen bir Slack sohbet botu entegre etmiştik. Sohbet botunu Slack kanalına ekledikten sonra, başlangıçta yanıtlarını gölgelendirdik. Müşteriler yanıtları göremiyordu. Güven kazandıktan sonra sohbet botunu müşterilere açık hale getirdik. Yanıtlarını manuel olarak değerlendirdik. Ancak bu hızlı ve belirsiz bir yaklaşımdır. Bu tür manuel testlerden güven kazanamazsınız. Bu nedenle çözüm, ROUGE gibi bir kıyaslama karşısında test etmektir.
ROUGE Puanı ile Değerlendirme
ROUGE metrikleri, metin özetleme için kullanılır. Rouge metrikleri, oluşturulan özeti farklı ROUGE metriklerini kullanarak referans özetlerle karşılaştırır. Rouge metrikleri, modeli geri çağırma (recall), kesinlik (precision) ve F1 puanlarını kullanarak değerlendirir. ROUGE metrikleri çeşitli türlerde gelir ve zayıf bir tamamlama bile iyi bir puana yol açabilir; bu nedenle, farklı ROUGE metriklerine başvururuz. Biraz bağlam için, unigram tek bir kelimedir; bigram iki kelimedir; ve n-gram N kelimedir.
- ROUGE-1 Recall = Unigram eşleşmeleri / Referansta unigram
- ROUGE-1 Precision = Unigram eşleşmeleri / Oluşturulan çıktıda unigram
- ROUGE-1 F1 = 2 * (Recall * Precision / (Recall + Precision))
- ROUGE-2 Recall = Bigram eşleşmeleri / Bigram referans
- ROUGE-2 Precision = Bigram eşleşmeleri / Oluşturulan çıktıda bigram
- ROUGE-2 F1 = 2 * (Recall * Precision / (Recall + Precision))
- ROUGE-L Recall = En uzun ortak alt dizi / Referansta unigram
- ROUGE-L Precision = En uzun ortak alt dizi / Çıktıda unigram
- ROUGE-L F1 = 2 * (Recall * Precision / (Recall + Precision))
Örneğin:
- Referans: “Dışarısı soğuk.”
- Oluşturulan çıktı: “Dışarısı çok soğuk.”
- ROUGE-1 Recall = 2/2 = 1.0
- ROUGE-1 Precision = 2/3 = 0.67
- ROUGE-1 F1 = 2 * 0.67/1.67 = 0.80
- ROUGE-2 Recall = 0/1 = 0
- ROUGE-2 Precision = 0/2 = 0
- ROUGE-2 F1 = 0
- ROUGE-L Recall = 1/2 = 0.5
- ROUGE-L Precision = 1/3 = 0.33
- ROUGE-L F1 = 2 * 0.165/0.83 = 0.40
Dış Kıyaslama ile Zahmeti Azaltın
ROUGE Puanı, model değerlendirmesinin nasıl çalıştığını anlamak için kullanılır. BLEU Puanı gibi başka kıyaslamalar da vardır. Ancak, modelimizi değerlendirmek için veri setini pratik olarak oluşturamayız. Modellerimizi kıyaslamak için dış kütüphanelerden yararlanabiliriz. En yaygın kullanılanlar GLUE Benchmark ve SuperGLUE Benchmark’tır.
5. Modelinizi Optimize Edin ve Dağıtın
Bu adım çok önemli olmayabilir, ancak hesaplama maliyetlerini azaltmak ve daha hızlı sonuçlar almak her zaman iyidir. Modeliniz hazır olduğunda, performansı artırmak ve bellek gereksinimlerini azaltmak için optimize edebilirsiniz. Daha fazla mühendislik çabası, bilgi, zaman ve maliyet gerektiren birkaç kavrama değineceğiz. Bu kavramlar, bazı tekniklerle tanışmanıza yardımcı olacaktır.
Ağırlıkların Nicemlenmesi (Quantization)
Modellerin parametreleri vardır, bunlar eğitim sırasında verilerden öğrenilen ve değerleri modelin nasıl tahmin yaptığını belirleyen model içindeki dahili değişkenlerdir. 1 parametre genellikle 24 bayt işlemci belleği gerektirir. Yani, 1B parametresi seçerseniz, 24 GB işlemci belleği gerektirecektir. Nicemleme, model ağırlıklarını verimli depolama için daha yüksek hassasiyetli kayan noktalı sayılardan daha düşük hassasiyetli kayan noktalı sayılara dönüştürür. Depolama hassasiyetinin değiştirilmesi, ağırlığın tek bir değerini depolamak için gereken bayt sayısını önemli ölçüde etkileyebilir.
Budama (Pruning)
Budama, bir modelde daha az önemli olan ve çok az etkisi olan, sıfıra eşit veya sıfıra yakın ağırlıklar gibi ağırlıkları kaldırmayı içerir. Budamanın bazı teknikleri şunlardır:
a. Tam model yeniden eğitimi b. LoRA gibi PEFT c. Eğitim sonrası işlem.
Sonuç
Sonuç olarak, ChatGPT veya FLAN-T5 gibi önceden eğitilmiş bir model seçebilir ve üzerine inşa edebilirsiniz. Kendi önceden eğitilmiş modelinizi oluşturmak uzmanlık, kaynak, zaman ve bütçe gerektirir. Gerekirse kullanım senaryonuza göre ince ayar yapabilirsiniz. Ardından, Büyük dil modelleri uygulamaları güçlendirmek için kullanabilir ve RAG gibi tekniklerle uygulamanızın kullanım senaryosuna göre özelleştirebilirsiniz. Modelinizi bazı kıyaslamalar karşısında değerlendirerek doğru davranıp davranmadığını görebilirsiniz. Daha sonra modelinizi dağıtabilirsiniz.