7.2. Fine-Tuning to follow instructions

Bu bölümün amacı, metin üretmek yerine talimatları takip etmek için önceden eğitilmiş bir modeli ince ayar yapmayı göstermektir; örneğin, bir sohbet botu olarak görevlere yanıt vermek.

Veri Seti

Bir LLM'yi talimatları takip edecek şekilde ince ayar yapmak için, LLM'yi ince ayar yapmak üzere talimatlar ve yanıtlar içeren bir veri setine ihtiyaç vardır. Bir LLM'yi talimatları takip edecek şekilde eğitmek için farklı formatlar vardır; örneğin:

  • Apply Alpaca istem tarzı örneği:

Below is an instruction that describes a task. Write a response that appropriately completes the request.

### Instruction:
Calculate the area of a circle with a radius of 5 units.

### Response:
The area of a circle is calculated using the formula \( A = \pi r^2 \). Plugging in the radius of 5 units:

\( A = \pi (5)^2 = \pi \times 25 = 25\pi \) square units.
  • Phi-3 İstem Tarzı Örneği:

<|User|>
Can you explain what gravity is in simple terms?

<|Assistant|>
Absolutely! Gravity is a force that pulls objects toward each other.

Bir LLM'yi bu tür veri setleriyle eğitmek, yalnızca ham metin yerine, LLM'nin aldığı sorulara belirli yanıtlar vermesi gerektiğini anlamasına yardımcı olur.

Bu nedenle, istekler ve yanıtlar içeren bir veri seti ile yapılacak ilk şeylerden biri, o veriyi istenen istem formatında modellemektir, örneğin:

# Code from https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/ch07.ipynb
def format_input(entry):
instruction_text = (
f"Below is an instruction that describes a task. "
f"Write a response that appropriately completes the request."
f"\n\n### Instruction:\n{entry['instruction']}"
)

input_text = f"\n\n### Input:\n{entry['input']}" if entry["input"] else ""

return instruction_text + input_text

model_input = format_input(data[50])

desired_response = f"\n\n### Response:\n{data[50]['output']}"

print(model_input + desired_response)

Sonra, her zamanki gibi, veri kümesini eğitim, doğrulama ve test için setlere ayırmak gereklidir.

Batching & Data Loaders

Sonra, eğitim için tüm girdileri ve beklenen çıktıları gruplamak gereklidir. Bunun için:

  • Metinleri tokenleştirin

  • Tüm örnekleri aynı uzunluğa (genellikle bu uzunluk, LLM'yi önceden eğitmek için kullanılan bağlam uzunluğu kadar büyük olacaktır) doldurun

  • Özel bir toplama fonksiyonunda girişi 1 kaydırarak beklenen tokenleri oluşturun

  • Eğitim kaybından hariç tutmak için bazı doldurma tokenlerini -100 ile değiştirin: İlk endoftext tokeninden sonra, diğer tüm endoftext tokenlerini -100 ile değiştirin (çünkü cross_entropy(...,ignore_index=-100) kullanmak, -100 olan hedefleri yok sayacağı anlamına gelir)

  • [Opsiyonel] LLM'nin yalnızca yanıtı nasıl üreteceğini öğrenmesi için soruya ait tüm tokenleri -100 ile maskeleyin. Uygula Alpaca tarzında bu, ### Yanıt: kısmına kadar her şeyi maskelemek anlamına gelecektir.

Bunu oluşturduktan sonra, her veri kümesi (eğitim, doğrulama ve test) için veri yükleyicilerini oluşturma zamanı.

Önceden Eğitilmiş LLM'yi Yükle & İnce Ayar Yap & Kayıp Kontrolü

İnce ayar yapmak için önceden eğitilmiş bir LLM yüklemek gereklidir. Bu, diğer sayfalarda zaten tartışılmıştır. Sonra, LLM'yi ince ayar yapmak için daha önce kullanılan eğitim fonksiyonunu kullanmak mümkündür.

Eğitim sırasında, eğitim kaybı ve doğrulama kaybının epochlar boyunca nasıl değiştiğini görmek de mümkündür; böylece kaybın azalıp azalmadığını ve aşırı uyum olup olmadığını görebilirsiniz. Aşırı uyum, eğitim kaybı azalırken doğrulama kaybının azalmadığı veya hatta arttığı durumlarda meydana gelir. Bunu önlemek için, bu davranışın başladığı epochta eğitimi durdurmak en basit şeydir.

Yanıt Kalitesi

Bu, kayıp değişimlerine daha fazla güvenilebilecek bir sınıflandırma ince ayarı olmadığı için, test setindeki yanıtların kalitesini kontrol etmek de önemlidir. Bu nedenle, tüm test setlerinden üretilen yanıtları toplamak ve kalitelerini manuel olarak kontrol etmek önerilir; böylece yanlış yanıtlar olup olmadığını görebilirsiniz (LLM'nin yanıt cümlesinin formatını ve sözdizimini doğru bir şekilde oluşturması mümkün, ancak tamamen yanlış bir yanıt vermesi de mümkündür. Kayıp değişimi bu davranışı yansıtmayacaktır). Ayrıca, üretilen yanıtları ve beklenen yanıtları diğer LLM'lere geçirerek yanıtları değerlendirmelerini istemek de mümkündür.

Yanıtların kalitesini doğrulamak için çalıştırılacak diğer testler:

  1. Kapsamlı Çoklu Görev Dil Anlayışı (MMLU): MMLU, bir modelin bilgi ve problem çözme yeteneklerini beş yedi konu üzerinden değerlendirir; beşeri bilimler, bilimler ve daha fazlası dahil. Farklı zorluk seviyelerinde anlayışı değerlendirmek için çoktan seçmeli sorular kullanır.

  2. LMSYS Chatbot Arena: Bu platform, kullanıcıların farklı chatbotlardan gelen yanıtları yan yana karşılaştırmalarına olanak tanır. Kullanıcılar bir istem girer ve birden fazla chatbot, doğrudan karşılaştırılabilen yanıtlar üretir.

  3. AlpacaEval: AlpacaEval, GPT-4 gibi gelişmiş bir LLM'nin diğer modellerin çeşitli istemlere verdiği yanıtları değerlendirdiği otomatik bir değerlendirme çerçevesidir.

  4. Genel Dil Anlayışı Değerlendirmesi (GLUE): GLUE, duygu analizi, metin çıkarımı ve soru yanıtlama gibi dokuz doğal dil anlama görevinden oluşan bir koleksiyondur.

  5. SuperGLUE: GLUE üzerine inşa edilen SuperGLUE, mevcut modeller için zorlayıcı olan daha zorlu görevleri içerir.

  6. Taklit Oyunu Benchmark'ının Ötesinde (BIG-bench): BIG-bench, bir modelin akıl yürütme, çeviri ve soru yanıtlama gibi alanlardaki yeteneklerini test eden 200'den fazla görev içeren büyük ölçekli bir benchmark'tır.

  7. Dil Modellerinin Kapsamlı Değerlendirmesi (HELM): HELM, doğruluk, sağlamlık ve adalet gibi çeşitli metrikler üzerinden kapsamlı bir değerlendirme sağlar.

  8. OpenAI Evals: OpenAI tarafından oluşturulan, özel ve standartlaştırılmış görevlerde AI modellerinin test edilmesine olanak tanıyan açık kaynaklı bir değerlendirme çerçevesidir.

  9. HumanEval: Dil modellerinin kod üretme yeteneklerini değerlendirmek için kullanılan bir dizi programlama problemi.

  10. Stanford Soru Yanıtlama Veri Seti (SQuAD): SQuAD, modellerin metni anlaması gereken Wikipedia makaleleri hakkında sorulardan oluşur.

  11. TriviaQA: Trivia soruları ve yanıtları ile birlikte kanıt belgelerinden oluşan büyük ölçekli bir veri seti.

ve daha birçokları

Talimatları İzleme İnce Ayar Kodu

Bu ince ayarı gerçekleştirmek için kod örneğini https://github.com/rasbt/LLMs-from-scratch/blob/main/ch07/01_main-chapter-code/gpt_instruction_finetuning.py adresinde bulabilirsiniz.

Referanslar

Last updated