Selam millet!
Önceki yazılarımızdan birinde ince ayardan ve bunun neden önemli olduğundan bahsetmiştik. Bu yazıda Talimat İnce Ayarı adı verilen belirli bir ince ayar türüne göz atacağız.
Gpt-3 gibi önceden eğitilmiş temel modeller, çok büyük miktarda veri üzerinde eğitilir. Gpt-3 durumunda internetteki tüm verilerdir. Bunu kesin olarak bilmiyoruz ancak bu modellerin çoğu, önemli miktarda manuel temizleme ve biçimlendirme sonrasında internet ölçeğindeki verilerle eğitiliyor. Temel modeller eğitildikçe bir sonraki jetonu nasıl tahmin edeceklerini öğrenirler ve jeton tahmininde gerçekten başarılı olurlar. Ancak saf token tahmini sandığınız kadar kullanışlı değil. Önceden eğitilmiş bir temel modele “ Meksika'nın başkenti nedir?” diye sorarsanız. Bir cevapla cevap vermeyecek ancak giriş cümlesini “ Kolombiya'nın başkenti nedir ” ile tamamlayabilir. Yani gpt-3 gibi bir model token tahmininde güçlü olsa da bir chatbot veya yardımcı pilot olarak çalışmayacaktır. Peki önceden eğitilmiş bir modeli chat-gpt gibi kullanışlı bir chatbot'a nasıl dönüştürebiliriz? Cevap ince ayardır, esas olarak “ Talimat İnce Ayarı ” adı verilen özel bir ince ayar türüdür.
"Talimat takibi" olarak da adlandırılan talimat ince ayarı, önceden eğitilmiş bir temel modelin bir sohbet botu gibi davranmasını öğretmeye yönelik bir süreçtir.
Öğretimin ince ayarı, soru-cevap biçimindeki veri setlerine ihtiyaç duyar. Herkese açık veri setlerini veya şirketinizin soru-cevap şeklindeki veri setini kullanabilirsiniz. Veri kümeniz Soru-Cevap şeklinde değilse Alpaca gibi farklı teknikleri kullanarak veya diğer LLM'lerdeki özel istemleri kullanarak verileri Soru-Cevap'a dönüştürebilirsiniz. Talimatlarda ince ayar yapmanın, modele yalnızca ince ayarda kullandığınız verilerle ilgili soruları yanıtlama konusunda yeni bir davranış kazandırdığını, aynı zamanda bu yeni davranışın, modelin zaten sahip olduğu mevcut bilgiye uygulanabilir olduğunu ve bunun da ince ayarı güçlü bir teknik haline getirdiğini unutmayın.
Lamini, geliştiricilerin, barındırma, eğitim ve diğer karmaşık yönlerin karmaşıklığını ortadan kaldırarak dil modelleriyle kolay bir şekilde ilgilenmelerine olanak tanıyan bir yapay zeka şirketidir. Tüm yeteneklerine buradan göz atın. Eleuther AI tarafından oluşturulan açık kaynaklı bir model olan pythia adlı küçük dil modelini eğitmek için Lamini'yi kullanacağız ve Alpaca adlı bir şirket veri kümesini kullanarak üzerinde talimat ince ayarları yapacağız.
Bu adımda gerekli modülü başlatalım ve ayrıca alpaka eğitim veri setine bakalım. İşte kod.
import itertools import jsonlines from datasets import load_dataset from pprint import pprint from llama import BasicModelRunner from transformers import AutoTokenizer, AutoModelForCausalLM from transformers import AutoModelForSeq2SeqLM, AutoTokenizer ## we are using alpaca data set, which is an open source fine tuning data set instruction_tuned_dataset = load_dataset("tatsu-lab/alpaca", split="train", streaming=True) m = 5 print("Instruction-tuned dataset:") top_m = list(itertools.islice(instruction_tuned_dataset, m)) for j in top_m: print(j)
Talimat ayarlama veri seti bu şekilde görünür. Soru-cevap şeklinde veriler içerir.
Bu adımda alpaka setinden verileri alıp aşağıda gösterilen komutlara yerleştiriyoruz.
prompt_template_with_input = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Input: {input} ### Response:""" prompt_template_without_input = """Below is an instruction that describes a task. Write a response that appropriately completes the request. ### Instruction: {instruction} ### Response:""" ## hydrate prompts - meaning add data to the above prompts processed_data = [] for j in top_m: if not j["input"]: processed_prompt = prompt_template_without_input.format(instruction=j["instruction"]) else: processed_prompt = prompt_template_with_input.format(instruction=j["instruction"], input=j["input"]) processed_data.append({"input": processed_prompt, "output": j["output"]})
Bunu yaptıktan sonra veri seti aşağıdaki gibi görünecektir.
Temel olarak ham Soru-Cevap verilerini alıyoruz ve LLM'ye bir soru sorulduğunda bu sorunun cevabının nasıl görünmesi gerektiğini anlamlı kılacak bir formata dönüştürüyoruz. Bunu yinelemeli olarak yapıyoruz ve bir jsonl dosyasında saklıyoruz.
with jsonlines.open(f'alpaca_processed.jsonl', 'w') as writer: writer.write_all(processed_data)
1. ve 2. adımda ham verileri yükledik, nemlendirdik ve jsonl formatında sakladık. Ancak Lamini'de bu hidratlanmış veriler kullanıma hazır olduğundan teknik olarak 1. ve 2. adım gerekli değildir. Ancak talimat ince ayarının nasıl çalıştığını anlamak için gösterilmesi gerekiyordu. Öncelikle Pythia modelinin ince ayarı yapılmamış bir versiyonunun basit bir soruya nasıl cevap vereceğini görelim.
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/pythia-70m") #70M parameter model that is not instruction tuned. model = AutoModelForCausalLM.from_pretrained("EleutherAI/pythia-70m") def inference(text, model, tokenizer, max_input_tokens=1000, max_output_tokens=100): # Tokenize input_ids = tokenizer.encode( text, return_tensors="pt", truncation=True, max_length=max_input_tokens ) # Generate device = model.device generated_tokens_with_prompt = model.generate( input_ids=input_ids.to(device), max_length=max_output_tokens ) # Decode generated_text_with_prompt = tokenizer.batch_decode(generated_tokens_with_prompt, skip_special_tokens=True) # Strip the prompt generated_text_answer = generated_text_with_prompt[0][len(text):] return generated_text_answer ## the 70M model doesnt have any company specific data, we will use the alpace data set from hosted on lamini and fine tune this model # load alpaca dataset finetuning_dataset_path = "lamini/lamini_docs" finetuning_dataset = load_dataset(finetuning_dataset_path) #print(finetuning_dataset) test_sample = finetuning_dataset["test"][0] print(test_sample) print("untrained output sample") print(inference(test_sample["question"], model, tokenizer))
Aldığım çıktı bu. Çıktının yararlı olmadığını ve modelin belirteç tamamlamayı denediğini ve gerçek bir yanıt vermediğini fark edeceksiniz.
Önceki adımda görülen soru-cevap verilerini talimat ince ayarı için kullandığımızda, aynı model bir sohbet botu gibi davranmaya başlayacak ve hem ince ayarlı verilerde hem de modelin zaten sahip olduğu verilerde sorularınıza daha doğru yanıtlar sağlayacaktır. oluşur. Tıpkı bir çocuğun ilk kez dil öğrendiğinde olduğu gibi, artık dil eğitimi sayesinde öğrendiği yeni şeylerin yanı sıra, halihazırda sahip olduğu duyguları da ifade edebilecektir. Modelin önceden eğitilmiş versiyonu gibi, ince ayarlı talimat modeli de Lamini'de barındırılır ve aşağıda gösterildiği gibi bir komutla çıkarılabilir. (Evet Lamini harika!)
## finetuned output instruction_model = AutoModelForCausalLM.from_pretrained("lamini/lamini_docs_finetuned") print("instruction finetuned output") print(inference(test_sample["question"], instruction_model, tokenizer))
İşte çıktının nasıl görüneceği. Önceki adımda gördüğümüz anlamsızlık yerine daha doğru bir çıktıya sahip olduğumuzu fark edeceksiniz.
Bu yazının amacı , talimat ince ayarına ve bunun temel modelleri daha kullanışlı sürümlere dönüştürmek için nasıl kullanıldığına bir giriş yapmaktır. Gelecek yazılarda talimat ince ayarının yapılmasına ilişkin gerçek süreci derinlemesine ele alacağım.
Yapay Zekanın 100 Günü'nün 13. Günü bu kadar.
Büyük teknolojide olup biten her şeyin ardındaki ikinci dereceden içgörülerden bahsettiğim Ortalamanın Üstünde adlı bir haber bülteni yazıyorum. Teknolojiyle ilgiliyseniz ve ortalama olmak istemiyorsanız abone olun .
Yapay zekanın 100 günüyle ilgili en son güncellemeler için beni Twitter ve LinkedIn'de takip edin. Teknolojiyle ilgileniyorsanız, buradaki teknoloji profesyonellerinden oluşan topluluğuma katılmak ilginizi çekebilir.
Ayrıca burada görünür.