चैटजीपीटी जैसे एलएलएम मॉडल के विकास के साथ, कंपनियों द्वारा भाषा-आधारित गहन शिक्षण अनुप्रयोगों का व्यावसायीकरण करने की होड़ मच गई है। डुओलिंगो और ब्लिंकिस्ट जैसी कंपनियां शैक्षणिक चैट एप्लिकेशन बना रही हैं, कोकाउंसेल जैसी कंपनियां दस्तावेज़ विश्लेषण मॉडल बना रही हैं, और मेडजीपीटी जैसी कुछ कंपनियां विशेषज्ञ मॉडल भी बना रही हैं जो चिकित्सा निदान जैसी चीजें कर सकती हैं। पिछले लेख में, मैंने लिखा था कि कैसे कोई पावर दस्तावेज़ विश्लेषक बनाने के लिए चैटजीपीटी और प्रॉम्प्ट इंजीनियरिंग का उपयोग कर सकता है।
अधिक शक्तिशाली और डोमेन-विशिष्ट एलएलएम अनुप्रयोगों का समर्थन करने के लिए, प्रौद्योगिकी प्रदाताओं ने कई क्लाउड समाधान उपलब्ध कराए हैं। उदाहरण के लिए, ChatGPT के पीछे की कंपनी OpenAI ने उपयोगकर्ताओं के लिए एक सरल लेकिन शक्तिशाली फ़ाइन-ट्यूनिंग API उपलब्ध कराया है, जो उपयोगकर्ताओं को GPT3 तकनीक के आधार पर अपने स्वयं के भाषा मॉडल बनाने की अनुमति देता है। Google ने, पीछे न हटते हुए, अपने बाइसन-टेक्स्ट मॉडल को, जिसे व्यापक रूप से GPT 3 और GPT 3.5 का एक सक्षम प्रतियोगी माना जाता है, Google क्लाउड प्लेटफ़ॉर्म के माध्यम से फ़ाइन-ट्यूनिंग के लिए उपलब्ध कराया। पिछले लेख में, मैंने डोमेन विशेषज्ञ एलएलएम बनाने के लिए फाइन-ट्यूनिंग एपीआई का उपयोग करने के तरीके के बारे में लिखा था।
ये सेवाएँ जितनी शक्तिशाली हो सकती हैं, एलएलएम प्रौद्योगिकी में गंभीर निवेश पर विचार करने वाली कंपनी ओपन-सोर्स प्रौद्योगिकियों से अपने स्वयं के मॉडल को प्रशिक्षित करना सीखना चाहेगी। इन विक्रेता-प्रदत्त समापन बिंदुओं का उपयोग करने की तुलना में, अपने स्वयं के मॉडल को प्रशिक्षित करने से निम्नलिखित लाभ मिलते हैं :
इस लेख में, हम एक लोकप्रिय और सक्षम ओपन-सोर्स एलएलएम मॉडल लेंगे, इसे अपने स्वयं के डेटा पर प्रशिक्षित करेंगे जैसा कि हमने पिछले लेख में किया था, और परिणामों को मान्य करेंगे। हालाँकि हम जिस उदाहरण से निपट रहे हैं वह गैर-व्यावसायिक है और सार्वजनिक जानकारी पर आधारित है, तकनीकों को व्यावसायिक प्रयासों में आसानी से लागू किया जा सकता है। हम "विशेषज्ञ एलएलएम मॉडल" अनुभाग में इस तकनीक का उपयोग करके कौन से व्यावसायिक अनुप्रयोग बनाए जा सकते हैं, इस पर विशिष्ट सुझावों पर चर्चा करेंगे, जहां हम उस समस्या को परिभाषित करते हैं जिसे हम इस लेख में हल करेंगे।
आज के प्रयोग के लिए, हम फ़्लान-टी5 लार्ज पर भरोसा करेंगे, जो Google द्वारा जारी किया गया एक बड़ा भाषा मॉडल है। हालांकि यह वह तकनीक नहीं है जो बार्ड को रेखांकित करती है, इस मॉडल को व्यापक रूप से जीपीटी-आधारित प्रौद्योगिकियों के साथ प्रतिस्पर्धी माना जाता है। हालाँकि, फ़्लान T5 मॉडल के बारे में प्रभावशाली बात यह है कि वे GPT आधारित मॉडल की तुलना में बहुत कम मापदंडों का उपयोग करके संतोषजनक परिणाम प्राप्त करते हैं। उदाहरण के लिए, यहां तक कि मॉडल के XL संस्करण में केवल 3 बिलियन पैरामीटर हैं, जबकि GPT3 में 175 बिलियन पैरामीटर हैं।
इस कॉम्पैक्टनेस के परिणामस्वरूप, इन मॉडलों को क्लाउड कंप्यूटिंग संपत्तियों पर प्रशिक्षित और संग्रहीत करना अपेक्षाकृत सस्ता है। इसके अतिरिक्त, फ़्लान-टी5 परिवार के मॉडलों को अपाचे लाइसेंस के साथ जारी किया गया है, जो व्यावसायिक उपयोग की अनुमति देता है, जिससे कुछ अन्य ओपन सोर्स एलएलएम के साथ होने वाले संभावित लाइसेंस सिरदर्द कम हो जाते हैं। उदाहरण के लिए, फेसबुक का LLaMa अभी भी केवल शोध और गैर-व्यावसायिक उद्देश्यों के लिए उपलब्ध है।
इस लेख को लिखने के लिए, मैंने प्रौद्योगिकी की प्रभावशीलता का परीक्षण करने के लिए कुछ अलग-अलग वर्गों के कार्यों का प्रयोग किया। आम तौर पर, फ़्लान-टी5, विशेष रूप से एक्सएल संस्करण, बाज़ार में उपलब्ध कुछ जीपीटी मॉडलों के समान ही प्राकृतिक भाषा समझने की उत्कृष्ट क्षमता रखता है। हालाँकि, अमूर्त कनेक्शन बनाते समय मॉडल कुछ हद तक छोटा हो जाता है, और लंबे आउटपुट उत्पन्न करने में कुछ परेशानी होती है। इसलिए, सही कार्य के लिए सही मॉडल का चयन करने का ध्यान रखना चाहिए।
रेप्लिकेट एक प्लेटफ़ॉर्म-ए-ए-सर्विस कंपनी है जो लोगों को किफायती मूल्य पर प्रशिक्षण और बड़े एआई मॉडल चलाने के लिए जीपीयू किराए पर लेने की अनुमति देती है। एआई मॉडल प्रबंधन टूल का उनका सूट उपयोगकर्ताओं को सर्वर संसाधनों के प्रबंधन के बजाय डेटा के साथ काम करने पर ध्यान केंद्रित करने की अनुमति देता है।
इस लेख को लिखने के लिए, मैंने AWS सेजमेकर, Google Colab और पेपरस्पेस ग्रेडिएंट सहित कई AI प्रशिक्षण PaaS पेशकशों को आज़माया। आरंभ करने के लिए रेप्लिकेट अब तक का सबसे आसान प्लेटफ़ॉर्म था, और उल्लिखित अन्य सेवाओं के सापेक्ष बहुत प्रतिस्पर्धी मूल्य निर्धारण की पेशकश करता था।
पायथन डेटा इंजीनियरिंग की भाषा है। व्यापक पारिस्थितिकी तंत्र प्रोग्रामर को डेटा को तुरंत ग्रहण करने, विश्लेषण करने और संसाधित करने की अनुमति देता है। अधिकांश प्रमुख एआई प्रशिक्षण प्लेटफार्मों में पायथन के लिए प्रथम श्रेणी का समर्थन है, जो हमारे काम को बहुत आसान बनाता है। रेप्लिकेट के उत्कृष्ट एकीकरण के कारण, हम आज अपना सारा कोड पायथन में लिखेंगे।
क्योंकि फ़्लान-टी5 परिवार के मॉडल टेक्स्ट उत्पन्न करने की तुलना में टेक्स्ट को समझने में बहुत बेहतर हैं, हम एक ऐसा कार्य चुनना चाहते हैं जो इनपुट पर भारी हो लेकिन आउटपुट पर हल्का हो। प्राकृतिक भाषा वर्गीकरणकर्ता इस प्रकार के परिदृश्य के लिए एक आदर्श उपयोग-मामला है, इसलिए आज हम एक नाटककार पहचानकर्ता का निर्माण करेंगे। विशेष रूप से, हम विलियम शेक्सपियर या एंटोन चेखव के मॉडल अंश देंगे, और देखेंगे कि क्या हम मॉडल को लेखन शैली और शब्द चयन के आधार पर नाटककार की पहचान करना सिखा सकते हैं।
बेशक, क्योंकि यह एक सार्वजनिक ट्यूटोरियल है, हम जानबूझकर सार्वजनिक और आसानी से पहुंच योग्य डेटा वाला एक मॉडल चुन रहे हैं। हालाँकि, इसे आसानी से व्यावसायिक संदर्भ में अनुकूलित किया जा सकता है । यहां कुछ उदाहरण दिए गए हैं जहां प्राकृतिक भाषा वर्गीकरणकर्ता उपयोगी हो सकते हैं:
प्रशिक्षण डेटा बनाने के लिए, हम प्रोजेक्ट गुटेनबर्ग से कुछ एंटोन चेखव और विलियम शेक्सपियर के नाटक डाउनलोड कर सकते हैं। डेटा अंतर्ग्रहण को सेट करने के लिए, हम निम्नलिखित पायथन स्क्रिप्ट चला सकते हैं।
import requests import openai import replicate import os import pandas as pd import random texts = { 'chekhov': 'https://www.gutenberg.org/files/7986/7986-0.txt', 'chekhov_2': 'https://www.gutenberg.org/cache/epub/1755/pg1755.txt', 'shakespeare_midsummer': 'https://www.gutenberg.org/cache/epub/1514/pg1514.txt', 'shakespeare_romeo_juliet': 'https://www.gutenberg.org/cache/epub/1112/pg1112.txt', 'shakespeare_macbeth': 'https://www.gutenberg.org/cache/epub/2264/pg2264.txt', 'shakespeare_hamlet': 'https://www.gutenberg.org/cache/epub/2265/pg2265.txt', }
अब हम प्रशिक्षण डेटा फ़ोल्डर बनाते हैं और टेक्स्ट डाउनलोड करते हैं:
if not os.path.exists('training_text'): os.mkdir('training_text') for name, url in texts.items(): print(name) res = requests.get(url) with open(os.path.join('training_text', '%s.txt' % name), 'w') as fp_write: fp_write.write(res.text)
आपको यह दिखाने के लिए कुछ आउटपुट देखने चाहिए कि यह सफल हुआ:
chekhov chekhov_2 shakespeare_midsummer shakespeare_romeo_juliet shakespeare_macbeth Shakespeare_hamlet
आप यह देखने के लिए ट्रेनिंग_टेक्स्ट फ़ोल्डर की भी जांच कर सकते हैं कि फ़ाइलें ठीक से डाउनलोड की गई थीं।
अब हम इन फ़ाइलों को वापस मेमोरी में पढ़ना चाहते हैं और उन्हें पंक्तियों की सूची में विभाजित करना चाहते हैं। जब हम इस पर होंगे, हम प्रत्येक फ़ाइल में पंक्तियों की संख्या गिनेंगे।
lines_by_file = {} for fn in os.listdir('training_text'): if not fn.endswith('.txt'): continue with open(os.path.join('training_text', fn)) as fp_file: lines_by_file[fn.split('.')[0]] = '\n'.join(fp_file.readlines()) print(fn, len(lines_by_file[fn.split('.')[0]]))
आपको नीचे जैसा आउटपुट देखना चाहिए:
shakespeare_midsummer.txt 120198 shakespeare_romeo_juliet.txt 179726 shakespeare_macbeth.txt 140022 shakespeare_hamlet.txt 204169 chekhov.txt 419063 chekhov_2.txt 148324
अब मज़े वाला हिस्सा आया। हम पंक्तियों को वास्तविक प्रशिक्षण डेटा में विभाजित करना चाहते हैं। ऐसा करने के लिए, हम पहले पहली और आखिरी 1000 पंक्तियाँ हटाते हैं, जो परिचय, शीर्ष लेख और पाद लेख सामग्री द्वारा ली जाती हैं। फिर, हम शेष पाठ की 50 पंक्तियों को एक बार में लेंगे। फिर हम 50 पंक्तियों को शीघ्र-और-पूरा करने वाली जोड़ी में बदल देंगे।
train_data = [] for k in lines_by_file: is_chekhov = 'chekhov' in k useful_lines = lines_by_file[k].split('\n')[1000:-1000] prompt_fmt = "Which playwright wrote the following passage? \n ==== \n %s \n ====" for i in range(0, len(useful_lines), 50): training_set = useful_lines[i: i+50] train_data.append({ 'prompt': prompt_fmt % '\n'.join(training_set), 'completion': 'Anton Chekhov' if is_chekhov else 'William Shakespeare' })
तो अब हमने समस्या को स्पष्ट रूप से परिभाषित कर दिया है - एक नाटक से पाठ की 50 पंक्तियाँ दी गई हैं, यह निर्धारित करें कि क्या नाटककार एंटोन चेकोव या विलियम शेक्सपियर हैं। अभी हमारा काम पूरा नहीं हुआ है. हमें प्रशिक्षण के लिए डेटा को jsonl (JSON लाइन्स) प्रारूप में लिखने की आवश्यकता है, और हम परीक्षण उद्देश्यों के लिए कुछ नमूने भी आरक्षित करना चाहते हैं। निम्नलिखित कोड को इस प्रकार चलाएँ:
df = pd.DataFrame(train_data) df_chekhov = df[df['completion'] == 'Anton Chekhov'] df_shakespeare = df[df['completion'] == 'William Shakespeare'] chekhov_test_indices = random.sample(df_chekhov.index.tolist(), 15) shakespeare_test_indices = random.sample(df_shakespeare.index.tolist(), 15) df_chekhov_test = df_chekhov.loc[chekhov_test_indices] df_shakespeare_test = df_shakespeare.loc[shakespeare_test_indices] df_chekhov_train = df_chekhov.loc[[i for i in df_chekhov.index if i not in chekhov_test_indices]] df_shakespeare_train = df_shakespeare.loc[[i for i in df_shakespeare.index if i not in shakespeare_test_indices]] pd.concat([df_chekhov_train, df_shakespeare_train]).to_json('chekhov_shakespeare_train.jsonl', orient='records', lines=True) pd.concat([df_chekhov_test, df_shakespeare_test]).to_json('chekhov_shakespeare_test.jsonl', orient='records', lines=True)
बेशक, यदि आप प्रशिक्षण के लिए संपूर्ण कोष का उपयोग करना चाहते हैं, तो आप आसानी से दौड़ सकते हैं
pd.DataFrame(train_data).to_json('output.jsonl', orient='records', lines=True)
प्रशिक्षण शुरू करने से पहले हमें दो काम करने होंगे - पहला, हमें प्रशिक्षण डेटा को प्रतिलिपि द्वारा सुलभ किसी स्थान पर अपलोड करना होगा। ऐसा करने का एक बहुत आसान तरीका यह होगा कि फ़ाइल को Google क्लाउड बकेट पर अपलोड किया जाए, बकेट और फ़ाइल को सार्वजनिक किया जाए, और https://storage.googleapis.com/<bucket_name>/<file_name>
के प्रारूप में यूआरएल प्रदान किया जाए। https://storage.googleapis.com/<bucket_name>/<file_name>
.
इसके बाद, हमें एक गंतव्य बनाना होगा। ऐसा करने के लिए, बस रेप्लिकेट में लॉग इन करें (जो आप Github OAuth के माध्यम से कर सकते हैं), और एक नया मॉडल बनाएं। एक बार जब मॉडल बन जाता है और उसे नाम दे दिया जाता है, तो आप अपने मॉडल को इस स्थान पर धकेल सकेंगे।
एक बार सब कुछ सेट हो जाने पर, आप प्रशिक्षण को इस प्रकार शुरू कर सकते हैं:
training = replicate.trainings.create( version="[flant5-large location]", input={ "train_data": "[Data Location]", }, destination="[Destination]" ) print(training)
आपको कुछ आउटपुट देखना चाहिए जो आपको बताता है कि प्रशिक्षण शुरू हो रहा है। कुछ मिनट प्रतीक्षा करें और निम्नलिखित कोड चलाकर प्रशिक्षण की दोबारा जाँच करें:
training.reload() print(training)
आप रेप्लिकेट वेबसाइट पर प्रशिक्षण प्रगति की निगरानी भी कर सकते हैं। एक बार प्रशिक्षण पूरा हो जाने पर, आप आउटपुट नाम प्राप्त करने के लिए प्रशिक्षण ऑब्जेक्ट को पुनः लोड कर सकते हैं और अगले चरण पर आगे बढ़ सकते हैं।
सावधान रहें कि ऐसे समय अवधि होते हैं जब GPU संसाधन दुर्लभ होते हैं, और आपको "प्रशिक्षण विफल" त्रुटि मिल सकती है। यदि आपके साथ ऐसा होता है, तो बस कुछ घंटे प्रतीक्षा करें और पुनः प्रयास करें। GPU की कमी है, और PaaS प्रदाता इससे अछूते नहीं हैं!
ठीक है! अब जब हमारे पास अपना सुव्यवस्थित मॉडल है, तो हमें इसका परीक्षण करने की आवश्यकता है। याद रखें कि हमने परीक्षण के लिए चेखव और शेक्सपियर के 15 अंश आरक्षित रखे थे। हम उन्हें यहाँ इस प्रकार उपयोग कर सकते हैं:
for _, row in df_chekhov_test.iterrows(): output = replicate.run( training.output["version"], input={"prompt": row['prompt']} ) for s in output: print(s, end="", flush=True) print('')
एक छोटी स्टार्ट-अप अवधि के बाद, आपको आउटपुट को कंसोल पर प्रिंट होते हुए देखना चाहिए। मॉडल बेहद सटीक होना चाहिए और हर बार "एंटोन चेखव" लौटाना चाहिए। आइए इसे शेक्सपियर के साथ आज़माएँ:
for _, row in df_shakespeare_test.iterrows(): output = replicate.run( training.output["version"], input={"prompt": row['prompt']} ) for s in output: print(s, end="", flush=True) print('')
चेखव उदाहरण के समान, आपको यह देखना चाहिए कि मॉडल हर बार शेक्सपियर की पहचान करने में सक्षम है।
अच्छे उपाय के लिए, आइए देखें कि क्या आधार मॉडल शेक्सपियर या चेखव की पहचान करने में सक्षम है:
for _, row in df_shakespeare_test.iterrows(): output = replicate.run( "[base flant5-large location]", input={"prompt": row['prompt']} ) for s in output: print(s, end="", flush=True) print('') for _, row in df_chekhov_test.iterrows(): output = replicate.run( "[base flant5-large location]", input={"prompt": row['prompt']} ) for s in output: print(s, end="", flush=True) print('')
आपको देखना चाहिए कि आधार मॉडल समान अंशों के लिए नाटककार की विश्वसनीय रूप से पहचान करने में असमर्थ है। इससे पता चलता है कि हमारी बढ़िया ट्यूनिंग ने मॉडल को विश्वसनीय रूप से नई जानकारी दी, और हमने खुद को एक प्राकृतिक भाषा नाटककार क्लासिफायरियर बनाया है!
आज के लेख में, हमने Google द्वारा प्रदान किए गए एक बड़े भाषा मॉडल फ़्लान-टी5 पर आधारित एक सरल प्राकृतिक भाषा क्लासिफायरियर का प्रशिक्षण लिया। अपने कॉम्पैक्ट आकार और अनुमेय लाइसेंस के कारण, फ़्लान-टी5 को निजी बुनियादी ढांचे पर प्रशिक्षित और तैनात किया जा सकता है, जो इसे चैटजीपीटी जैसे बाज़ार के कई अन्य लोकप्रिय मॉडलों से अलग करता है।
हालाँकि आज का उदाहरण सार्वजनिक डेटा पर आधारित था और निश्चित रूप से गैर-व्यावसायिक था, अवधारणा के इस प्रमाण को ऊपर बताए अनुसार कई अन्य व्यावसायिक अनुप्रयोगों में आसानी से अपनाया जा सकता है। यदि आपके पास एलएलएम के बारे में कोई विचार है जिसे आप वास्तविकता में बदलना चाहते हैं, तो बेझिझक मेरे GitHub या LinkedIn पेज पर जाकर बातचीत शुरू करें। इसके अलावा, मेरे पिछले एलएलएम लेखों को बेझिझक पढ़ें, जिनमें चैटजीपीटी का उपयोग करके एक दस्तावेज़ विश्लेषक बनाना और ओपनएआई के फाइन ट्यूनिंग एपीआई का उपयोग करके एक डोमेन विशेषज्ञ एलएलएम बनाना शामिल है।
हैप्पी हैकिंग!