प्रॉम्प्ट ट्यूनिंग को समझें: अपने भाषा मॉडलों को सटीकता के साथ बेहतर बनाएं
प्रॉम्प्ट ट्यूनिंग एक ऐसी तकनीक है जिसका उपयोग किसी प्री-ट्रेन्ड भाषा मॉडल के प्रदर्शन को उसके आंतरिक आर्किटेक्चर बदले बिना सुधारने के लिए किया जाता है।
बड़े भाषा मॉडल (LLMs) के तेज़ी से विकसित हो रहे क्षेत्र में, प्रॉम्प्ट ट्यूनिंग जैसी अत्याधुनिक विधियों से अपडेट रहना बेहद ज़रूरी है। यह तकनीक, पहले से प्रशिक्षित फाउंडेशनल मॉडलों पर लागू होती है और पारंपरिक मॉडल प्रशिक्षण से जुड़ी भारी कम्प्यूटेशनल लागत के बिना प्रदर्शन बेहतर बनाती है।
इस आलेख में, हम प्रॉम्प्ट ट्यूनिंग की बुनियाद समझेंगे, इसे फाइन-ट्यूनिंग और प्रॉम्प्ट इंजीनियरिंग से तुलना करेंगे, और इसके प्रमुख लाभों पर चर्चा करेंगे। हम HuggingFace प्लेटफ़ॉर्म का एक व्यावहारिक उदाहरण भी देंगे, जहाँ हम bloomz-560m मॉडल पर प्रॉम्प्ट ट्यूनिंग करेंगे। यह गाइड प्रॉम्प्ट ट्यूनिंग की आपकी समझ को गहरा करने और इसे अपने प्रोजेक्ट्स में अपनाने के लिए प्रेरित करने का उद्देश्य रखता है।
Prompt Tuning क्या है?
प्रॉम्प्ट ट्यूनिंग एक ऐसी तकनीक है जो प्री-ट्रेन्ड भाषा मॉडल के मूल आर्किटेक्चर को बदले बिना उसके प्रदर्शन को बेहतर बनाती है। मॉडल के गहरे स्ट्रक्चरल वेट्स में बदलाव करने के बजाय, प्रॉम्प्ट ट्यूनिंग उन प्रॉम्प्ट्स को समायोजित करती है जो मॉडल की प्रतिक्रिया को निर्देशित करते हैं। यह विधि "सॉफ़्ट प्रॉम्प्ट्स" के परिचय पर आधारित है—ट्यून किए जाने योग्य पैरामीटरों का एक सेट जिसे इनपुट सीक्वेंस की शुरुआत में डाला जाता है।
यह आरेख पारंपरिक मॉडल ट्यूनिंग की तुलना प्रॉम्प्ट ट्यूनिंग से करता है। ध्यान दें कि मॉडल ट्यूनिंग में हर टास्क के लिए अलग मॉडल की आवश्यकता होती है। दूसरी ओर, प्रॉम्प्ट ट्यूनिंग टास्क-विशिष्ट प्रॉम्प्ट्स को समायोजित करके कई टास्क में एक ही फाउंडेशनल मॉडल का उपयोग करती है।
प्रॉम्प्ट ट्यूनिंग कैसे काम करती है?
1. सॉफ़्ट प्रॉम्प्ट्स का इनिशियलाइज़ेशन
सॉफ़्ट प्रॉम्प्ट्स कृत्रिम रूप से निर्मित टोकन्स होते हैं जिन्हें मॉडल के इनपुट सीक्वेंस में जोड़ा जाता है। इन्हें कई तरीकों से इनिशियलाइज़ किया जा सकता है। रैंडम इनिशियलाइज़ेशन सामान्य है, हालांकि इन्हें कुछ ह्यूरिस्टिक्स के आधार पर भी इनिशियलाइज़ किया जा सकता है। एक बार इनिशियलाइज़ हो जाने पर, सॉफ़्ट प्रॉम्प्ट्स इनपुट डेटा की शुरुआत में जोड़े जाते हैं। जब मॉडल इस डेटा को प्रोसेस करता है, तो वह सॉफ़्ट प्रॉम्प्ट्स और वास्तविक इनपुट—दोनों को ध्यान में रखता है।
2. फ़ॉरवर्ड पास और लॉस का मूल्यांकन
प्रशिक्षण की प्रक्रिया आमतौर पर एक मानक डीप न्यूरल नेटवर्क (DNN) के प्रशिक्षण जैसी होती है। यह फ़ॉरवर्ड पास से शुरू होती है, जिसमें मॉडल संयुक्त इनपुट को अपनी परतों से गुज़ारता है और आउटपुट बनाता है। इसके बाद इस आउटपुट का वांछित परिणाम के साथ एक लॉस फ़ंक्शन की मदद से मूल्यांकन किया जाता है, जो मॉडल के आउटपुट और वास्तविक अपेक्षित मान के बीच अंतर को मापता है।
बैकप्रोपेगेशन
बैकप्रोपेगेशन के दौरान, त्रुटियाँ नेटवर्क में पीछे की ओर प्रवाहित की जाती हैं। हालांकि, नेटवर्क के वेट्स को समायोजित करने के बजाय, हम केवल सॉफ़्ट प्रॉम्प्ट पैरामीटरों को संशोधित करते हैं। यह प्रक्रिया कई युगों (epochs) तक दोहराई जाती है, जिसमें सॉफ़्ट प्रॉम्प्ट्स धीरे-धीरे इनपुट को इस तरह आकार देना सीखते हैं कि दिए गए टास्क के लिए त्रुटि न्यूनतम हो जाए।
इटरेशन
फ़ॉरवर्ड पास, लॉस मूल्यांकन और बैकप्रोपेगेशन की प्रक्रिया कई युगों तक दोहराई जाती है। समय के साथ, ये सॉफ़्ट प्रॉम्प्ट्स इनपुट को ऐसे ढंग से आकार देना सीखते हैं जो लगातार लॉस स्कोर घटाए, और इस प्रकार मॉडल के टास्क-विशिष्ट प्रदर्शन को बेहतर करें, बिना उसकी मूल क्षमताओं से समझौता किए।
प्रॉम्प्ट ट्यूनिंग, फाइन-ट्यूनिंग, और प्रॉम्प्ट इंजीनियरिंग—ये तीन अलग-अलग विधियाँ हैं जो प्री-ट्रेन्ड LLMs पर किसी विशिष्ट टास्क का प्रदर्शन सुधारने के लिए लागू की जाती हैं। ये विधियाँ एक-दूसरे की विरोधी नहीं हैं और प्रत्येक का अपना उपयुक्त उपयोग-परिदृश्य होता है।
फाइन-ट्यूनिंग
फाइन-ट्यूनिंग सबसे संसाधन-गहन होती है, जिसमें किसी विशिष्ट उद्देश्य हेतु एक विशेष डेटासेट पर मॉडल का व्यापक री-ट्रेनिंग शामिल होता है। यह प्री-ट्रेन्ड मॉडल के वेट्स को समायोजित करती है, जिससे डेटा की बारीकियों के लिए उसे अनुकूलित किया जाता है, लेकिन इसके लिए भारी कम्प्यूटेशनल संसाधनों की आवश्यकता होती है और ओवरफिटिंग का जोखिम बढ़ता है। कई LLMs, जैसे ChatGPT, अपनी शुरुआती सामान्य ट्रेनिंग (नेक्स्ट वर्ड प्रेडिक्शन टास्क) के बाद फाइन-ट्यूनिंग से गुजरते हैं। फाइन-ट्यूनिंग इन मॉडलों को डिजिटल असिस्टेंट के रूप में काम करना सिखाती है, जिससे वे सामान्य रूप से प्रशिक्षित मॉडल की तुलना में कहीं अधिक उपयोगी हो जाते हैं।
प्रॉम्प्ट ट्यूनिंग
प्रॉम्प्ट ट्यूनिंग अतिरिक्त पैरामीटरों के एक सेट—"सॉफ़्ट प्रॉम्प्ट्स"—को समायोजित करती है, जिन्हें मॉडल के इनपुट प्रोसेसिंग में एकीकृत किया जाता है। यह विधि मॉडल के वेट्स को पूरी तरह बदले बिना यह संशोधित करती है कि मॉडल इनपुट प्रॉम्प्ट्स की व्याख्या कैसे करता है, और इस तरह प्रदर्शन सुधार और संसाधन दक्षता के बीच संतुलन प्रदान करती है। यह विशेष रूप से तब उपयोगी है जब कम्प्यूटेशनल संसाधन सीमित हों या कई टास्क में लचीलापन चाहिए, क्योंकि तकनीक लगाने के बाद मूल मॉडल वेट्स अपरिवर्तित रहते हैं।
प्रॉम्प्ट इंजीनियरिंग
दूसरी ओर, प्रॉम्प्ट इंजीनियरिंग में कोई प्रशिक्षण या पुनः प्रशिक्षण शामिल नहीं होता। यह पूरी तरह उपयोगकर्ता द्वारा मॉडल के लिए प्रॉम्प्ट्स डिज़ाइन करने पर आधारित है। इसमें मॉडल की प्रोसेसिंग क्षमताओं की बारीक समझ आवश्यक होती है और मॉडल में निहित ज्ञान का लाभ उठाया जाता है। प्रॉम्प्ट इंजीनियरिंग को किसी कम्प्यूटेशनल संसाधन की आवश्यकता नहीं होती, क्योंकि यह केवल रणनीतिक रूप से इनपुट तैयार करने पर निर्भर करती है। अधिक जानने के लिए DataCamp का डेवलपर्स के लिए प्रॉम्प्ट इंजीनियरिंग कोर्स देखें।
तुलना
इनमें से प्रत्येक तकनीक प्री-ट्रेन्ड मॉडलों की क्षमताओं का लाभ उठाने का अलग तरीका प्रस्तुत करती है। इनमें से चुनाव आपके अनुप्रयोग की विशिष्ट आवश्यकताओं पर निर्भर करता है—जैसे उपलब्ध कम्प्यूटेशनल संसाधन, मॉडल कस्टमाइजेशन की जरूरत, और मॉडल के लर्निंग पैरामीटरों के साथ इंटरैक्शन का वांछित स्तर।
विधि
संसाधन-गहनता
ट्रेनिंग आवश्यक
किसके लिए सर्वोत्तम
फाइन-ट्यूनिंग
उच्च
हाँ
ऐसे कार्य जिनमें मॉडल का गहन कस्टमाइजेशन चाहिए
प्रॉम्प्ट ट्यूनिंग
कम
हाँ
कई कार्यों में मॉडल की अखंडता बनाए रखना
प्रॉम्प्ट इंजीनियरिंग
नहीं
नहीं
त्वरित अनुकूलन, बिना कम्प्यूटेशनल लागत
आपके प्रोजेक्ट की विशिष्ट ज़रूरतों के आधार पर हर विधि की अपनी जगह है।
Prompt Tuning के लाभ
प्रॉम्प्ट ट्यूनिंग कई प्रमुख फायदे लाती है, जो बड़े भाषा मॉडलों के अनुकूलन के लिए इसे एक अनिवार्य तकनीक बनाते हैं।
संसाधन दक्षता
प्रॉम्प्ट ट्यूनिंग प्री-ट्रेन्ड मॉडल के पैरामीटरों को बदले बिना रखती है, जिससे आवश्यक कम्प्यूटेशनल शक्ति में उल्लेखनीय कमी आती है। यह दक्षता विशेष रूप से संसाधन-सीमित परिवेश में महत्वपूर्ण है, जहां ऊँची लागत के बिना उन्नत मॉडलों का उपयोग संभव हो पाता है। जैसे-जैसे फाउंडेशनल मॉडलों का औसत आकार बढ़ता है, मॉडल पैरामीटरों को “फ्रीज़” करना और भी आकर्षक हो जाता है, क्योंकि हर टास्क के लिए अलग मॉडल डिप्लॉय करने की ज़रूरत नहीं रहती।
तेज़ परिनियोजन
व्यापक फाइन-ट्यूनिंग के विपरीत, प्रॉम्प्ट ट्यूनिंग में केवल सॉफ़्ट प्रॉम्प्ट पैरामीटरों के एक छोटे सेट को समायोजित करना पड़ता है। इससे अनुकूलन प्रक्रिया तेज़ होती है, विभिन्न टास्क के बीच त्वरित स्विच संभव होता है, और डाउनटाइम घटता है।
मॉडल की अखंडता और ज्ञान संरक्षण
मॉडल की मुख्य आर्किटेक्चर और वेट्स को यथावत रखते हुए, प्रॉम्प्ट ट्यूनिंग प्री-ट्रेन्ड मॉडल में निहित मूल क्षमताओं और ज्ञान को संरक्षित करती है। विभिन्न अनुप्रयोगों में मॉडल की विश्वसनीयता और सामान्यीकरण बनाए रखने के लिए यह बेहद अहम है।
टास्क में लचीलापन
प्रॉम्प्ट ट्यूनिंग केवल सॉफ़्ट प्रॉम्प्ट्स बदलकर एक ही फाउंडेशनल मॉडल का कई टास्क में उपयोग करने में सहायक होती है। यह दृष्टिकोण हर विशिष्ट टास्क के लिए अलग मॉडल ट्रेन और मेंटेन करने की आवश्यकता को कम करता है, जिससे स्केलेबिलिटी और मॉडल प्रबंधन की सरलता बढ़ती है।
मानवीय हस्तक्षेप में कमी
प्रॉम्प्ट ट्यूनिंग में प्रॉम्प्ट इंजीनियरिंग की तुलना में मानवीय हस्तक्षेप काफी कम चाहिए, जहां किसी विशेष टास्क के अनुरूप प्रॉम्प्ट्स को सावधानी से गढ़ना समयसाध्य और त्रुटिप्रवण हो सकता है। इसके बजाय, प्रशिक्षण के दौरान सॉफ़्ट प्रॉम्प्ट्स का स्वचालित अनुकूलन मानवीय त्रुटि घटाता है और दक्षता बढ़ाता है।
प्रतिस्पर्धी प्रदर्शन
शोध से संकेत मिलता है कि बड़े मॉडलों के लिए प्रॉम्प्ट ट्यूनिंग, फाइन-ट्यूनिंग के तुल्य प्रदर्शन स्तर हासिल कर सकती है। जैसे-जैसे मॉडल का आकार बढ़ता है, यह लाभ और महत्वपूर्ण हो जाता है, क्योंकि उच्च दक्षता और मजबूत परिणाम—दोनों साथ मिलते हैं।
Prompt Tuning का चरण-दर-चरण तरीका
इस गाइड में, हम BigScience के bloomz-560m मॉडल पर प्रॉम्प्ट ट्यूनिंग लागू करेंगे। हम Hugging Face इकोसिस्टम में PEFT (Parameter-Efficient Fine-Tuning) लाइब्रेरी का उपयोग करेंगे।
हालाँकि यहाँ हम कॉज़ल लैंग्वेज मॉडलिंग टास्क पर फ़ोकस करेंगे, PEFT लाइब्रेरी विभिन्न टास्क, मॉडलों और ट्यूनिंग तकनीकों को सपोर्ट करती है। अन्य मॉडलों और टास्क के लिए संगत PEFT विधियाँ आप PEFT डाक्यूमेंटेशन पेज पर पा सकते हैं।
1. मॉडल और टोकनाइज़र लोड करना
शुरू करने के लिए, हम BigScience के bloomz-560m मॉडल से मॉडल और टोकनाइज़र लोड करते हैं। टोकनाइज़र टेक्स्ट इनपुट्स को प्रोसेस करने के काम आता है, जबकि फाउंडेशनल मॉडल कॉज़ल लैंग्वेज मॉडलिंग टास्क को संभालता है। trust_remote_code=True पैरामीटर आपको विशिष्ट आर्किटेक्चर के लिए मॉडल मेंटेनर्स द्वारा दिए गए कस्टम कोड का उपयोग करने देता है।
हालाँकि यह पूर्ण कार्यक्षमता पाने के लिए उपयोगी है, केवल विश्वसनीय स्रोतों के मॉडल के कोड पर ही भरोसा करें। अज्ञात या अप्रमाणित क्रिएटर्स के मॉडलों के लिए अविश्वसनीय कोड का उपयोग करने से सुरक्षा या स्थिरता जोखिम हो सकते हैं, इसलिए इससे बचें।
from transformers import AutoModelForCausalLM, AutoTokenizer
model_name ="bigscience/bloomz-560m"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(
model_name,
trust_remote_code=True)संचालित द्वारा
2. फाउंडेशनल मॉडल के साथ इन्फरेंस
किसी भी ट्यूनिंग से पहले, बिना-ट्यून किए गए फाउंडेशनल मॉडल से इन्फरेंस चलाकर एक बेसलाइन स्थापित करना आवश्यक है। "I want you to act as a logistician," जैसे प्रॉम्प्ट का उपयोग करके, हम देख सकते हैं कि बिना किसी अतिरिक्त ट्यूनिंग के मॉडल किस तरह प्रतिक्रियाएँ जनरेट करता है। प्रॉम्प्ट के बाद एक अतिरिक्त स्पेस ज़रूर दें, अन्यथा मॉडल कुछ भी जनरेट नहीं कर सकता।
यह ट्यूनिंग के बाद सुधारों की तुलना के लिए संदर्भ का काम करेगा।
हम एक कस्टम generate_text फ़ंक्शन का उपयोग करेंगे ताकि काम आसान हो।
defgenerate_text(model, tokenizer, prompt_text, max_tokens):
prompt_text = tokenizer(prompt_text, return_tensors="pt")
outputs = model.generate(
input_ids=prompt_text["input_ids"],
attention_mask=prompt_text["attention_mask"],
max_length=max_tokens,
repetition_penalty=1.5,
eos_token_id=tokenizer.eos_token_id
)return tokenizer.batch_decode(outputs, skip_special_tokens=True)
initial_output = generate_text(model, tokenizer,"I want you to act as a logistician. ",100)print("Initial model output:", initial_output)संचालित द्वारा
यह मॉडल आउटपुट है:
['I want you to act as a logistician. You will be able to: Analyze the data']
जैसा कि आप देख सकते हैं, मॉडल संदर्भ को लेकर पूरी तरह आश्वस्त नहीं है।
3. डेटासेट
डेटासेट प्रॉम्प्ट ट्यूनिंग का एक अहम घटक है। हम ट्यूनिंग के लिए `awesome-chatgpt-prompts` डेटासेट का उपयोग करते हैं। यह डेटासेट ट्यूनिंग हेतु प्रेरक सामग्री प्रदान करता है, जिससे मॉडल अपनी प्रतिक्रियाओं को उसी अनुरूप ढाल सके।
from datasets import load_dataset
dataset_prompt ="fka/awesome-chatgpt-prompts"
data_prompt = load_dataset(dataset_prompt)
data_prompt = data_prompt.map(lambda x: tokenizer(x["prompt"]), batched=True)
train_prompts = data_prompt["train"].select(range(50))संचालित द्वारा
हम डेटासेट को टोकनाइज़ करते हैं और प्रशिक्षण के लिए एक छोटा सबसेट तैयार करते हैं।
4. ट्यूनिंग
अब सबसे रोचक भाग; हम PEFT लाइब्रेरी की PromptTuningConfig क्लास का उपयोग करके प्रॉम्प्ट ट्यूनिंग कॉन्फ़िगर करेंगे।
from peft import get_peft_model, PromptTuningConfig, TaskType, PromptTuningInit
tuning_config = PromptTuningConfig(
task_type=TaskType.CAUSAL_LM, #This type indicates the model will generate text.
prompt_tuning_init=PromptTuningInit.RANDOM, #The added virtual tokens are initializad with random numbers
num_virtual_tokens=4, #Number of virtual tokens to be added and trained.
tokenizer_name_or_path=model_name
)
peft_model = get_peft_model(model, tuning_config)संचालित द्वारा
प्रशिक्षण आर्ग्युमेंट्स को TrainingArguments क्लास का उपयोग करके निर्दिष्ट किया जाता है।
from transformers import TrainingArguments
training_args = TrainingArguments(
use_cpu=True,# This is necessary for CPU clusters.
output_dir ="./",
auto_find_batch_size=True,# Find a suitable batch size that will fit into memory automatically, you can also use a custom batch size
learning_rate=0.005,
num_train_epochs=5)संचालित द्वारा
Trainer ऑब्जेक्ट प्रशिक्षण प्रक्रिया को मैनेज करता है। DataCollatorForLanguageModeling के साथ, डेटा कोलेटेर यह सुनिश्चित करता है कि प्रशिक्षण सैंपल सही फ़ॉर्मेट में हों। train मेथड से प्रशिक्षण चरण शुरू होता है, जो विशेष प्रॉम्प्ट टास्क के लिए bloomz-560m मॉडल को फाइन-ट्यून करता है।
from transformers import Trainer, DataCollatorForLanguageModeling
trainer = Trainer(
model=peft_model,# We pass in the PEFT version of the foundation model, bloomz-560M
args=training_args,#The args for the training.
train_dataset=train_prompts,#The dataset used to train the model.
data_collator=DataCollatorForLanguageModeling(tokenizer, mlm=False)# mlm=False indicates not to use masked language modeling)
trainer.train()संचालित द्वारा
5. ट्यून किए गए मॉडल से इन्फेरेंस
ट्यून किया हुआ मॉडल ट्रेनर ऑब्जेक्ट में स्टोर होता है, इसे एक्सेस करने के लिए हम trainer.model का उपयोग कर सकते हैं। ट्यून किए गए मॉडल के साथ इन्फेरेंस चलाने के लिए हम generate_text फ़ंक्शन का उपयोग करते हैं!
tuned_output = generate_text(trainer.model, tokenizer,"I want you to act as a logistician. ",100)print("Tuned model output:", tuned_output)संचालित द्वारा
ट्यून किए गए मॉडल का आउटपुट इस प्रकार है:
['I want you to act as a logistician. You will be responsible for the logistics of your business.']
जैसा कि आप अब देख सकते हैं, मॉडल जानता है कि लॉजिस्टिशियन क्या करता है। अलग-अलग प्रॉम्प्ट, मॉडल और डेटासेट के साथ बेझिझक प्रयोग करें!
जनरेटिव AI में गहराई से उतरें
प्रॉम्प्ट ट्यूनिंग एक शक्तिशाली तकनीक है, जो किसी विशिष्ट कार्य पर बड़े भाषा मॉडलों को अधिक दक्ष बनाती है। हमने पहले यह समझाकर कि यह क्या है और कैसे काम करता है, प्रॉम्प्ट ट्यूनिंग की पड़ताल की। फिर इसकी तुलना अन्य समान तकनीकों—फाइन-ट्यूनिंग और प्रॉम्प्ट इंजीनियरिंग—से की। अंत में, हमने इसके फ़ायदे चर्चा किए और एक प्रीट्रेन्ड मॉडल पर प्रॉम्प्ट ट्यूनिंग लागू करने की चरण-दर-चरण गाइड देखी।
जैसे-जैसे जनरेटिव AI का क्षेत्र विकसित हो रहा है, नवीनतम प्रगति से अपडेट रहना आवश्यक है। अपनी कौशल और AI की समझ को और निखारने के लिए, Datacamp गहन संसाधनों की एक शृंखला प्रदान करता है। मैं आपको ये व्यापक ट्यूटोरियल देखने के लिए प्रोत्साहित करता/करती हूँ:
मैं दिमित्री डिडमानीद्ज़े हूँ—एक डेटा वैज्ञानिक, जो वर्तमान में मैथमेटिक्स में मास्टर्स कर रहा हूँ, जिसमें मशीन लर्निंग पर विशेष ध्यान है। मेरी शैक्षणिक यात्रा में ट्रांसफॉर्मर-आधारित मॉडलों की क्षमताओं पर शोध और विश्वविद्यालय स्तर पर अध्यापन भी शामिल रहा है, जिसने जटिल सैद्धांतिक अवधारणाओं की मेरी समझ को समृद्ध किया है। मैंने बैंकिंग उद्योग में भी काम किया है, जहाँ मैंने वास्तविक दुनिया की डेटा संबंधी चुनौतियों से निपटने के लिए इन सिद्धांतों को लागू किया है।
बड़े भाषा मॉडल (LLMs) के तेज़ी से विकसित हो रहे क्षेत्र में, प्रॉम्प्ट ट्यूनिंग जैसी अत्याधुनिक विधियों से अपडेट रहना बेहद ज़रूरी है। यह तकनीक, पहले से प्रशिक्षित फाउंडेशनल मॉडलों पर लागू होती है और पारंपरिक मॉडल प्रशिक्षण से जुड़ी भारी कम्प्यूटेशनल लागत के बिना प्रदर्शन बेहतर बनाती है।
इस आलेख में, हम प्रॉम्प्ट ट्यूनिंग की बुनियाद समझेंगे, इसे फाइन-ट्यूनिंग और प्रॉम्प्ट इंजीनियरिंग से तुलना करेंगे, और इसके प्रमुख लाभों पर चर्चा करेंगे। हम HuggingFace प्लेटफ़ॉर्म का एक व्यावहारिक उदाहरण भी देंगे, जहाँ हम bloomz-560m मॉडल पर प्रॉम्प्ट ट्यूनिंग करेंगे। यह गाइड प्रॉम्प्ट ट्यूनिंग की आपकी समझ को गहरा करने और इसे अपने प्रोजेक्ट्स में अपनाने के लिए प्रेरित करने का उद्देश्य रखता है।
Prompt Tuning क्या है?
प्रॉम्प्ट ट्यूनिंग एक ऐसी तकनीक है जो प्री-ट्रेन्ड भाषा मॉडल के मूल आर्किटेक्चर को बदले बिना उसके प्रदर्शन को बेहतर बनाती है। मॉडल के गहरे स्ट्रक्चरल वेट्स में बदलाव करने के बजाय, प्रॉम्प्ट ट्यूनिंग उन प्रॉम्प्ट्स को समायोजित करती है जो मॉडल की प्रतिक्रिया को निर्देशित करते हैं। यह विधि "सॉफ़्ट प्रॉम्प्ट्स" के परिचय पर आधारित है—ट्यून किए जाने योग्य पैरामीटरों का एक सेट जिसे इनपुट सीक्वेंस की शुरुआत में डाला जाता है।
छवि का स्रोत
यह आरेख पारंपरिक मॉडल ट्यूनिंग की तुलना प्रॉम्प्ट ट्यूनिंग से करता है। ध्यान दें कि मॉडल ट्यूनिंग में हर टास्क के लिए अलग मॉडल की आवश्यकता होती है। दूसरी ओर, प्रॉम्प्ट ट्यूनिंग टास्क-विशिष्ट प्रॉम्प्ट्स को समायोजित करके कई टास्क में एक ही फाउंडेशनल मॉडल का उपयोग करती है।
प्रॉम्प्ट ट्यूनिंग कैसे काम करती है?
1. सॉफ़्ट प्रॉम्प्ट्स का इनिशियलाइज़ेशन
सॉफ़्ट प्रॉम्प्ट्स कृत्रिम रूप से निर्मित टोकन्स होते हैं जिन्हें मॉडल के इनपुट सीक्वेंस में जोड़ा जाता है। इन्हें कई तरीकों से इनिशियलाइज़ किया जा सकता है। रैंडम इनिशियलाइज़ेशन सामान्य है, हालांकि इन्हें कुछ ह्यूरिस्टिक्स के आधार पर भी इनिशियलाइज़ किया जा सकता है। एक बार इनिशियलाइज़ हो जाने पर, सॉफ़्ट प्रॉम्प्ट्स इनपुट डेटा की शुरुआत में जोड़े जाते हैं। जब मॉडल इस डेटा को प्रोसेस करता है, तो वह सॉफ़्ट प्रॉम्प्ट्स और वास्तविक इनपुट—दोनों को ध्यान में रखता है।
2. फ़ॉरवर्ड पास और लॉस का मूल्यांकन
प्रशिक्षण की प्रक्रिया आमतौर पर एक मानक डीप न्यूरल नेटवर्क (DNN) के प्रशिक्षण जैसी होती है। यह फ़ॉरवर्ड पास से शुरू होती है, जिसमें मॉडल संयुक्त इनपुट को अपनी परतों से गुज़ारता है और आउटपुट बनाता है। इसके बाद इस आउटपुट का वांछित परिणाम के साथ एक लॉस फ़ंक्शन की मदद से मूल्यांकन किया जाता है, जो मॉडल के आउटपुट और वास्तविक अपेक्षित मान के बीच अंतर को मापता है।
बैकप्रोपेगेशन
बैकप्रोपेगेशन के दौरान, त्रुटियाँ नेटवर्क में पीछे की ओर प्रवाहित की जाती हैं। हालांकि, नेटवर्क के वेट्स को समायोजित करने के बजाय, हम केवल सॉफ़्ट प्रॉम्प्ट पैरामीटरों को संशोधित करते हैं। यह प्रक्रिया कई युगों (epochs) तक दोहराई जाती है, जिसमें सॉफ़्ट प्रॉम्प्ट्स धीरे-धीरे इनपुट को इस तरह आकार देना सीखते हैं कि दिए गए टास्क के लिए त्रुटि न्यूनतम हो जाए।
इटरेशन
फ़ॉरवर्ड पास, लॉस मूल्यांकन और बैकप्रोपेगेशन की प्रक्रिया कई युगों तक दोहराई जाती है। समय के साथ, ये सॉफ़्ट प्रॉम्प्ट्स इनपुट को ऐसे ढंग से आकार देना सीखते हैं जो लगातार लॉस स्कोर घटाए, और इस प्रकार मॉडल के टास्क-विशिष्ट प्रदर्शन को बेहतर करें, बिना उसकी मूल क्षमताओं से समझौता किए।
Prompt Tuning बनाम Fine-Tuning बनाम Prompt Engineering
प्रॉम्प्ट ट्यूनिंग, फाइन-ट्यूनिंग, और प्रॉम्प्ट इंजीनियरिंग—ये तीन अलग-अलग विधियाँ हैं जो प्री-ट्रेन्ड LLMs पर किसी विशिष्ट टास्क का प्रदर्शन सुधारने के लिए लागू की जाती हैं। ये विधियाँ एक-दूसरे की विरोधी नहीं हैं और प्रत्येक का अपना उपयुक्त उपयोग-परिदृश्य होता है।
फाइन-ट्यूनिंग
फाइन-ट्यूनिंग सबसे संसाधन-गहन होती है, जिसमें किसी विशिष्ट उद्देश्य हेतु एक विशेष डेटासेट पर मॉडल का व्यापक री-ट्रेनिंग शामिल होता है। यह प्री-ट्रेन्ड मॉडल के वेट्स को समायोजित करती है, जिससे डेटा की बारीकियों के लिए उसे अनुकूलित किया जाता है, लेकिन इसके लिए भारी कम्प्यूटेशनल संसाधनों की आवश्यकता होती है और ओवरफिटिंग का जोखिम बढ़ता है। कई LLMs, जैसे ChatGPT, अपनी शुरुआती सामान्य ट्रेनिंग (नेक्स्ट वर्ड प्रेडिक्शन टास्क) के बाद फाइन-ट्यूनिंग से गुजरते हैं। फाइन-ट्यूनिंग इन मॉडलों को डिजिटल असिस्टेंट के रूप में काम करना सिखाती है, जिससे वे सामान्य रूप से प्रशिक्षित मॉडल की तुलना में कहीं अधिक उपयोगी हो जाते हैं।
प्रॉम्प्ट ट्यूनिंग
प्रॉम्प्ट ट्यूनिंग अतिरिक्त पैरामीटरों के एक सेट—"सॉफ़्ट प्रॉम्प्ट्स"—को समायोजित करती है, जिन्हें मॉडल के इनपुट प्रोसेसिंग में एकीकृत किया जाता है। यह विधि मॉडल के वेट्स को पूरी तरह बदले बिना यह संशोधित करती है कि मॉडल इनपुट प्रॉम्प्ट्स की व्याख्या कैसे करता है, और इस तरह प्रदर्शन सुधार और संसाधन दक्षता के बीच संतुलन प्रदान करती है। यह विशेष रूप से तब उपयोगी है जब कम्प्यूटेशनल संसाधन सीमित हों या कई टास्क में लचीलापन चाहिए, क्योंकि तकनीक लगाने के बाद मूल मॉडल वेट्स अपरिवर्तित रहते हैं।
प्रॉम्प्ट इंजीनियरिंग
दूसरी ओर, प्रॉम्प्ट इंजीनियरिंग में कोई प्रशिक्षण या पुनः प्रशिक्षण शामिल नहीं होता। यह पूरी तरह उपयोगकर्ता द्वारा मॉडल के लिए प्रॉम्प्ट्स डिज़ाइन करने पर आधारित है। इसमें मॉडल की प्रोसेसिंग क्षमताओं की बारीक समझ आवश्यक होती है और मॉडल में निहित ज्ञान का लाभ उठाया जाता है। प्रॉम्प्ट इंजीनियरिंग को किसी कम्प्यूटेशनल संसाधन की आवश्यकता नहीं होती, क्योंकि यह केवल रणनीतिक रूप से इनपुट तैयार करने पर निर्भर करती है। अधिक जानने के लिए DataCamp का डेवलपर्स के लिए प्रॉम्प्ट इंजीनियरिंग कोर्स देखें।
तुलना
इनमें से प्रत्येक तकनीक प्री-ट्रेन्ड मॉडलों की क्षमताओं का लाभ उठाने का अलग तरीका प्रस्तुत करती है। इनमें से चुनाव आपके अनुप्रयोग की विशिष्ट आवश्यकताओं पर निर्भर करता है—जैसे उपलब्ध कम्प्यूटेशनल संसाधन, मॉडल कस्टमाइजेशन की जरूरत, और मॉडल के लर्निंग पैरामीटरों के साथ इंटरैक्शन का वांछित स्तर।
विधि
संसाधन-गहनता
ट्रेनिंग आवश्यक
किसके लिए सर्वोत्तम
फाइन-ट्यूनिंग
उच्च
हाँ
ऐसे कार्य जिनमें मॉडल का गहन कस्टमाइजेशन चाहिए
प्रॉम्प्ट ट्यूनिंग
कम
हाँ
कई कार्यों में मॉडल की अखंडता बनाए रखना
प्रॉम्प्ट इंजीनियरिंग
नहीं
नहीं
त्वरित अनुकूलन, बिना कम्प्यूटेशनल लागत
आपके प्रोजेक्ट की विशिष्ट ज़रूरतों के आधार पर हर विधि की अपनी जगह है।
Prompt Tuning के लाभ
प्रॉम्प्ट ट्यूनिंग कई प्रमुख फायदे लाती है, जो बड़े भाषा मॉडलों के अनुकूलन के लिए इसे एक अनिवार्य तकनीक बनाते हैं।
संसाधन दक्षता
प्रॉम्प्ट ट्यूनिंग प्री-ट्रेन्ड मॉडल के पैरामीटरों को बदले बिना रखती है, जिससे आवश्यक कम्प्यूटेशनल शक्ति में उल्लेखनीय कमी आती है। यह दक्षता विशेष रूप से संसाधन-सीमित परिवेश में महत्वपूर्ण है, जहां ऊँची लागत के बिना उन्नत मॉडलों का उपयोग संभव हो पाता है। जैसे-जैसे फाउंडेशनल मॉडलों का औसत आकार बढ़ता है, मॉडल पैरामीटरों को “फ्रीज़” करना और भी आकर्षक हो जाता है, क्योंकि हर टास्क के लिए अलग मॉडल डिप्लॉय करने की ज़रूरत नहीं रहती।
तेज़ परिनियोजन
व्यापक फाइन-ट्यूनिंग के विपरीत, प्रॉम्प्ट ट्यूनिंग में केवल सॉफ़्ट प्रॉम्प्ट पैरामीटरों के एक छोटे सेट को समायोजित करना पड़ता है। इससे अनुकूलन प्रक्रिया तेज़ होती है, विभिन्न टास्क के बीच त्वरित स्विच संभव होता है, और डाउनटाइम घटता है।
मॉडल की अखंडता और ज्ञान संरक्षण
मॉडल की मुख्य आर्किटेक्चर और वेट्स को यथावत रखते हुए, प्रॉम्प्ट ट्यूनिंग प्री-ट्रेन्ड मॉडल में निहित मूल क्षमताओं और ज्ञान को संरक्षित करती है। विभिन्न अनुप्रयोगों में मॉडल की विश्वसनीयता और सामान्यीकरण बनाए रखने के लिए यह बेहद अहम है।
टास्क में लचीलापन
प्रॉम्प्ट ट्यूनिंग केवल सॉफ़्ट प्रॉम्प्ट्स बदलकर एक ही फाउंडेशनल मॉडल का कई टास्क में उपयोग करने में सहायक होती है। यह दृष्टिकोण हर विशिष्ट टास्क के लिए अलग मॉडल ट्रेन और मेंटेन करने की आवश्यकता को कम करता है, जिससे स्केलेबिलिटी और मॉडल प्रबंधन की सरलता बढ़ती है।
मानवीय हस्तक्षेप में कमी
प्रॉम्प्ट ट्यूनिंग में प्रॉम्प्ट इंजीनियरिंग की तुलना में मानवीय हस्तक्षेप काफी कम चाहिए, जहां किसी विशेष टास्क के अनुरूप प्रॉम्प्ट्स को सावधानी से गढ़ना समयसाध्य और त्रुटिप्रवण हो सकता है। इसके बजाय, प्रशिक्षण के दौरान सॉफ़्ट प्रॉम्प्ट्स का स्वचालित अनुकूलन मानवीय त्रुटि घटाता है और दक्षता बढ़ाता है।
प्रतिस्पर्धी प्रदर्शन
शोध से संकेत मिलता है कि बड़े मॉडलों के लिए प्रॉम्प्ट ट्यूनिंग, फाइन-ट्यूनिंग के तुल्य प्रदर्शन स्तर हासिल कर सकती है। जैसे-जैसे मॉडल का आकार बढ़ता है, यह लाभ और महत्वपूर्ण हो जाता है, क्योंकि उच्च दक्षता और मजबूत परिणाम—दोनों साथ मिलते हैं।
Prompt Tuning का चरण-दर-चरण तरीका
इस गाइड में, हम BigScience के bloomz-560m मॉडल पर प्रॉम्प्ट ट्यूनिंग लागू करेंगे। हम Hugging Face इकोसिस्टम में PEFT (Parameter-Efficient Fine-Tuning) लाइब्रेरी का उपयोग करेंगे।
हालाँकि यहाँ हम कॉज़ल लैंग्वेज मॉडलिंग टास्क पर फ़ोकस करेंगे, PEFT लाइब्रेरी विभिन्न टास्क, मॉडलों और ट्यूनिंग तकनीकों को सपोर्ट करती है। अन्य मॉडलों और टास्क के लिए संगत PEFT विधियाँ आप PEFT डाक्यूमेंटेशन पेज पर पा सकते हैं।
1. मॉडल और टोकनाइज़र लोड करना
शुरू करने के लिए, हम BigScience के bloomz-560m मॉडल से मॉडल और टोकनाइज़र लोड करते हैं। टोकनाइज़र टेक्स्ट इनपुट्स को प्रोसेस करने के काम आता है, जबकि फाउंडेशनल मॉडल कॉज़ल लैंग्वेज मॉडलिंग टास्क को संभालता है।
trust_remote_code=Trueपैरामीटर आपको विशिष्ट आर्किटेक्चर के लिए मॉडल मेंटेनर्स द्वारा दिए गए कस्टम कोड का उपयोग करने देता है।हालाँकि यह पूर्ण कार्यक्षमता पाने के लिए उपयोगी है, केवल विश्वसनीय स्रोतों के मॉडल के कोड पर ही भरोसा करें। अज्ञात या अप्रमाणित क्रिएटर्स के मॉडलों के लिए अविश्वसनीय कोड का उपयोग करने से सुरक्षा या स्थिरता जोखिम हो सकते हैं, इसलिए इससे बचें।
2. फाउंडेशनल मॉडल के साथ इन्फरेंस
किसी भी ट्यूनिंग से पहले, बिना-ट्यून किए गए फाउंडेशनल मॉडल से इन्फरेंस चलाकर एक बेसलाइन स्थापित करना आवश्यक है। "I want you to act as a logistician," जैसे प्रॉम्प्ट का उपयोग करके, हम देख सकते हैं कि बिना किसी अतिरिक्त ट्यूनिंग के मॉडल किस तरह प्रतिक्रियाएँ जनरेट करता है। प्रॉम्प्ट के बाद एक अतिरिक्त स्पेस ज़रूर दें, अन्यथा मॉडल कुछ भी जनरेट नहीं कर सकता।
यह ट्यूनिंग के बाद सुधारों की तुलना के लिए संदर्भ का काम करेगा।
हम एक कस्टम
generate_textफ़ंक्शन का उपयोग करेंगे ताकि काम आसान हो।यह मॉडल आउटपुट है:
['I want you to act as a logistician. You will be able to: Analyze the data']जैसा कि आप देख सकते हैं, मॉडल संदर्भ को लेकर पूरी तरह आश्वस्त नहीं है।
3. डेटासेट
डेटासेट प्रॉम्प्ट ट्यूनिंग का एक अहम घटक है। हम ट्यूनिंग के लिए `awesome-chatgpt-prompts` डेटासेट का उपयोग करते हैं। यह डेटासेट ट्यूनिंग हेतु प्रेरक सामग्री प्रदान करता है, जिससे मॉडल अपनी प्रतिक्रियाओं को उसी अनुरूप ढाल सके।
हम डेटासेट को टोकनाइज़ करते हैं और प्रशिक्षण के लिए एक छोटा सबसेट तैयार करते हैं।
4. ट्यूनिंग
अब सबसे रोचक भाग; हम
PEFTलाइब्रेरी कीPromptTuningConfigक्लास का उपयोग करके प्रॉम्प्ट ट्यूनिंग कॉन्फ़िगर करेंगे।प्रशिक्षण आर्ग्युमेंट्स को
TrainingArgumentsक्लास का उपयोग करके निर्दिष्ट किया जाता है।Trainerऑब्जेक्ट प्रशिक्षण प्रक्रिया को मैनेज करता है।DataCollatorForLanguageModelingके साथ, डेटा कोलेटेर यह सुनिश्चित करता है कि प्रशिक्षण सैंपल सही फ़ॉर्मेट में हों।trainमेथड से प्रशिक्षण चरण शुरू होता है, जो विशेष प्रॉम्प्ट टास्क के लिएbloomz-560mमॉडल को फाइन-ट्यून करता है।5. ट्यून किए गए मॉडल से इन्फेरेंस
ट्यून किया हुआ मॉडल ट्रेनर ऑब्जेक्ट में स्टोर होता है, इसे एक्सेस करने के लिए हम
trainer.modelका उपयोग कर सकते हैं। ट्यून किए गए मॉडल के साथ इन्फेरेंस चलाने के लिए हमgenerate_textफ़ंक्शन का उपयोग करते हैं!ट्यून किए गए मॉडल का आउटपुट इस प्रकार है:
['I want you to act as a logistician. You will be responsible for the logistics of your business.']जैसा कि आप अब देख सकते हैं, मॉडल जानता है कि लॉजिस्टिशियन क्या करता है। अलग-अलग प्रॉम्प्ट, मॉडल और डेटासेट के साथ बेझिझक प्रयोग करें!
जनरेटिव AI में गहराई से उतरें
प्रॉम्प्ट ट्यूनिंग एक शक्तिशाली तकनीक है, जो किसी विशिष्ट कार्य पर बड़े भाषा मॉडलों को अधिक दक्ष बनाती है। हमने पहले यह समझाकर कि यह क्या है और कैसे काम करता है, प्रॉम्प्ट ट्यूनिंग की पड़ताल की। फिर इसकी तुलना अन्य समान तकनीकों—फाइन-ट्यूनिंग और प्रॉम्प्ट इंजीनियरिंग—से की। अंत में, हमने इसके फ़ायदे चर्चा किए और एक प्रीट्रेन्ड मॉडल पर प्रॉम्प्ट ट्यूनिंग लागू करने की चरण-दर-चरण गाइड देखी।
जैसे-जैसे जनरेटिव AI का क्षेत्र विकसित हो रहा है, नवीनतम प्रगति से अपडेट रहना आवश्यक है। अपनी कौशल और AI की समझ को और निखारने के लिए, Datacamp गहन संसाधनों की एक शृंखला प्रदान करता है। मैं आपको ये व्यापक ट्यूटोरियल देखने के लिए प्रोत्साहित करता/करती हूँ: