হেই সবাই!
আগের পোস্টগুলির একটিতে, আমরা ফাইনটিউনিং এবং কেন এটি গুরুত্বপূর্ণ তা নিয়ে কথা বলেছিলাম। এই পোস্টে আমরা ইনস্ট্রাকশন ফাইনটিউনিং নামে একটি নির্দিষ্ট ধরণের ফাইনটিউনিং দেখব।
প্রাক-প্রশিক্ষিত বেস মডেল যেমন gpt-3 প্রচুর পরিমাণে ডেটাতে প্রশিক্ষিত। gpt-3 এর ক্ষেত্রে ইন্টারনেটে এর সমস্ত ডেটা। ঠিক আছে আমরা নিশ্চিতভাবে জানি না তবে এই মডেলগুলির বেশিরভাগই যথেষ্ট ম্যানুয়াল ক্লিন আপ এবং ফর্ম্যাটিং করার পরে ইন্টারনেট স্কেল ডেটাতে প্রশিক্ষিত। যেহেতু তারা প্রশিক্ষিত হয় ভিত্তিক মডেলগুলি শিখেছে কিভাবে পরবর্তী টোকেনের ভবিষ্যদ্বাণী করতে হয় এবং টোকেন ভবিষ্যদ্বাণীতে সত্যিই ভাল হয়। কিন্তু বিশুদ্ধ টোকেন ভবিষ্যদ্বাণী ততটা কার্যকর নয় যতটা আপনি ভাববেন। আপনি যদি প্রাক-প্রশিক্ষিত বেস মডেলকে জিজ্ঞাসা করেন " মেক্সিকোর রাজধানী কি? " এটি একটি উত্তর দিয়ে উত্তর দেবে না কিন্তু " কলম্বিয়ার রাজধানী কি " দিয়ে ইনপুট বাক্যটি সম্পূর্ণ করতে পারে। তাই জিপিটি-৩ এর মতো মডেল টোকেন ভবিষ্যদ্বাণীতে শক্তিশালী হলেও এটি চ্যাটবট বা কপিলট হিসেবে কাজ করবে না। তাহলে কিভাবে আমরা একটি প্রাক-প্রশিক্ষিত মডেলকে chat-gpt-এর মতো একটি দরকারী চ্যাটবটে রূপান্তর করব? উত্তরটি হল ফাইনটিউনিং, প্রধানত একটি নির্দিষ্ট ধরনের ফাইনটিউনিং যাকে বলা হয় " নির্দেশনা ফাইনটিউনিং "।
নির্দেশনা ফাইনটিউনিংকে "নির্দেশ-অনুসরণ" হিসাবেও উল্লেখ করা হয় একটি প্রক্রিয়া যা একটি প্রাক-প্রশিক্ষিত বেস মডেলকে একটি চ্যাট বটের মতো আচরণ করতে শেখানোর জন্য।
নির্দেশনা ফাইনটিউনিংয়ের জন্য ডেটা সেট প্রয়োজন যা প্রশ্ন ও উত্তরের আকারে থাকে। আপনি সর্বজনীন ডেটা সেট বা আপনার কোম্পানির ডেটা সেট ব্যবহার করতে পারেন যা প্রশ্নোত্তর আকারে রয়েছে। যদি আপনার ডেটা সেট প্রশ্নোত্তর আকারে না থাকে তবে আপনি আলপাকা বা অন্যান্য LLM-তে কাস্টম প্রম্পট ব্যবহার করে বিভিন্ন কৌশল ব্যবহার করে ডেটাকে প্রশ্নোত্তর-এ রূপান্তর করতে পারেন। নোট করুন যে নির্দেশনা ফাইনটিউনিং মডেলটিকে শুধুমাত্র আপনার ফাইনটিউনিং-এ যে ডেটা ব্যবহার করে তার উপর প্রশ্নের উত্তর দেওয়ার একটি নতুন আচরণ দেয়, তবে এই নতুন আচরণটি মডেলটির ইতিমধ্যে বিদ্যমান জ্ঞানের জন্য প্রযোজ্য যা ফাইনটিউনিংকে একটি শক্তিশালী কৌশল করে তোলে।
Lamini হল একটি AI কোম্পানি যা ডেভেলপারদেরকে সহজ উপায়ে ভাষা মডেলের সাথে মোকাবিলা করতে দেয় হোস্টিং, প্রশিক্ষণ এবং অন্যান্য জটিল দিকগুলির জটিলতা দূর করে। এখানে এর সম্পূর্ণ ক্ষমতা দেখুন। আমরা লামিনিকে pythia নামক ছোট ল্যাঙ্গুয়েজ মডেলকে প্রশিক্ষণ দিতে ব্যবহার করব, যেটি Eleuther AI দ্বারা তৈরি একটি ওপেনসোর্স মডেল এবং Alpaca নামক একটি কোম্পানির ডেটাসেট ব্যবহার করে এটিতে নির্দেশনা ফাইনটিউনিং করব।
এই ধাপে প্রয়োজনীয় মডিউল শুরু করা যাক এবং আলপাকা প্রশিক্ষণ ডেটা সেটটিও দেখুন। এখানে কোড আছে.
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)
এইভাবে নির্দেশনা টিউনিং ডেটা সেট দেখতে কেমন। এতে প্রশ্ন ও উত্তর আকারে তথ্য রয়েছে।
এই ধাপে আমরা আলপাকা সেট থেকে ডেটা নিয়ে নিচের প্রম্পটগুলিতে রাখি।
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"]})
এটি করার পর ডাটা সেটটি নিচের মত দেখাবে।
আমরা মূলত কাঁচা প্রশ্নোত্তর ডেটা নিচ্ছি এবং এমন একটি বিন্যাসে রূপান্তর করছি যা এলএলএম-এর কাছে বোঝা যায় যে প্রশ্ন করা হলে সেই প্রশ্নের উত্তর কেমন হওয়া উচিত। আমরা এটি পুনরাবৃত্তিমূলকভাবে করি এবং একটি jsonl ফাইলে সংরক্ষণ করি।
with jsonlines.open(f'alpaca_processed.jsonl', 'w') as writer: writer.write_all(processed_data)
ধাপ 1 এবং 2 এ আমরা কাঁচা ডেটা লোড করেছি এবং হাইড্রেট করেছি এবং jsonl ফর্ম্যাটে সংরক্ষণ করেছি। কিন্তু লামিনীর কাছে এই হাইড্রেটেড ডেটা যাওয়ার জন্য প্রস্তুত রয়েছে, তাই প্রযুক্তিগতভাবে ধাপ 1 এবং 2 এর প্রয়োজন নেই৷ কিন্তু নির্দেশ ফাইনটিউনিং কীভাবে কাজ করে তা বোঝার জন্য এটি দেখানোর প্রয়োজন ছিল। আসুন প্রথমে দেখি Pythia মডেলের একটি অ-সূক্ষ্ম সংস্করণ কিভাবে একটি সহজ প্রশ্নের উত্তর দেবে।
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))
এই আমি পেয়েছি আউটপুট. আপনি লক্ষ্য করবেন যে আউটপুটটি সহায়ক নয় এবং মডেলটি টোকেন সম্পূর্ণ করার চেষ্টা করছে এবং একটি প্রকৃত উত্তর দিচ্ছে না।
একবার আমরা পূর্ববর্তী ধাপে দেখা প্রশ্নোত্তর ডেটা ব্যবহার করে সূক্ষ্ম টিউন নির্দেশ করার জন্য ব্যবহার করা হলে একই মডেল একটি চ্যাট বটের মতো আচরণ করতে শুরু করবে এবং সূক্ষ্ম করা ডেটার পাশাপাশি মডেলটি ইতিমধ্যেই থাকা ডেটা উভয় ক্ষেত্রেই আপনার প্রশ্নের আরও সঠিক উত্তর দেবে। বন্ধ গঠিত। এটি প্রায় যেমন একটি শিশু যখন প্রথমবার একটি ভাষা শেখে, তখন সে এখন ভাষা প্রশিক্ষণের কারণে তারা যে নতুন জিনিসগুলি শিখেছে তার সাথে তাদের ইতিমধ্যে থাকা অনুভূতিগুলি প্রকাশ করতে সক্ষম হবে। মডেলের পূর্বপ্রশিক্ষিত সংস্করণের মতো, নির্দেশনা ফাইনটিউনড মডেলটিও ল্যামিনিতে হোস্ট করা হয়েছে এবং নীচে দেখানো হিসাবে একটি কমান্ড দিয়ে অনুমান করা যেতে পারে। (হ্যাঁ লামিনি দুর্দান্ত!)
## finetuned output instruction_model = AutoModelForCausalLM.from_pretrained("lamini/lamini_docs_finetuned") print("instruction finetuned output") print(inference(test_sample["question"], instruction_model, tokenizer))
আউটপুট কেমন হবে তা এখানে। আপনি লক্ষ্য করবেন যে বিভ্রান্তির পরিবর্তে আমরা আগের ধাপে দেখেছি আমাদের আরও সঠিক আউটপুট রয়েছে।
এই পোস্টের লক্ষ্য হল নির্দেশনা ফাইনটিউনিং এবং এটি কীভাবে আরও ব্যবহারযোগ্য সংস্করণে বেস মডেল তৈরি করতে ব্যবহৃত হয় তার একটি ভূমিকা দেওয়া। ভবিষ্যতের পোস্টগুলিতে আমি নির্দেশনা ফাইনটিউনিং করার প্রকৃত প্রক্রিয়ার গভীরে ডুব দেব।
এটি AI এর 100 দিনের 13 তম দিনের জন্য।
আমি গড়ের উপরে নামে একটি নিউজলেটার লিখি যেখানে আমি বড় প্রযুক্তিতে ঘটছে এমন সবকিছুর পিছনে দ্বিতীয় ক্রম অন্তর্দৃষ্টি সম্পর্কে কথা বলি। আপনি যদি প্রযুক্তিতে থাকেন এবং গড় হতে না চান তবে এতে সদস্যতা নিন ।
AI এর 100 দিনের সর্বশেষ আপডেটের জন্য Twitter , LinkedIn- এ আমাকে অনুসরণ করুন। আপনি যদি প্রযুক্তিতে থাকেন তবে আপনি এখানে প্রযুক্তি পেশাদারদের আমার সম্প্রদায়ে যোগদান করতে আগ্রহী হতে পারেন।
এছাড়াও এখানে উপস্থিত হয়.