paint-brush
दिन का एक प्रेरक उद्धरण उत्पन्न करने के लिए कूरियर और GPT2 का उपयोग करनाद्वारा@courier
559 रीडिंग
559 रीडिंग

दिन का एक प्रेरक उद्धरण उत्पन्न करने के लिए कूरियर और GPT2 का उपयोग करना

द्वारा Courier8m2023/02/13
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

प्रेरक उद्धरण उन दिनों काफी लोकप्रिय थे जब एमएमएस और ईमेल अग्रेषण लोकप्रिय थे। प्रेरक उद्धरणों की सूची को हार्डकोड करने के बजाय, हम मांग पर उद्धरण उत्पन्न करने के लिए मशीन लर्निंग मॉडल का उपयोग करने जा रहे हैं। हम एमएल मॉडल को लोड और सर्व करने के लिए हगिंग फेस लाइब्रेरी का उपयोग करेंगे जो हमारे लिए उद्धरण उत्पन्न करेगा।
featured image - दिन का एक प्रेरक उद्धरण उत्पन्न करने के लिए कूरियर और GPT2 का उपयोग करना
Courier HackerNoon profile picture
0-item


प्रेरक उद्धरण उन दिनों काफी लोकप्रिय थे जब एमएमएस और ईमेल अग्रेषण लोकप्रिय थे। मुझे याद है कि मेरे माता-पिता हर सुबह की शुरुआत में मुझे फॉरवर्ड करते थे। आज के लिए तेजी से आगे बढ़ें, यदि आप भाग्यशाली हैं, तो आप अपनी पसंद के मैसेजिंग ऐप (व्हाट्सएप, टेलीग्राम, आदि) पर कुछ फॉरवर्ड ग्रुप का हिस्सा हैं।


उसी विचार से प्रेरित होकर, आज हम एक ऐसी सेवा का निर्माण करने जा रहे हैं जो हमारे मित्रों और परिवार को दिन का एआई-जनित प्रेरक उद्धरण भेजती है। प्रेरक उद्धरणों की एक सूची को हार्डकोड करने के बजाय, हम मांग पर एक उद्धरण उत्पन्न करने के लिए एक मशीन लर्निंग मॉडल का उपयोग करने जा रहे हैं ताकि हम साझा करने के लिए कभी भी उद्धरणों से बाहर न हों!

निर्देश

भाग 1: प्रेरक उद्धरण उत्पन्न करने के लिए AI का उपयोग करना

OpenGPT2 और भाषा मॉडल

OpenAI GPT-2 मॉडल को एलेक रेडफोर्ड, जेफरी वू, रेवॉन चाइल्ड, डेविड लुआन, डारियो अमोडी और इल्या सुतस्केवर द्वारा लैंग्वेज मॉडल्स अनसुपरवाइज्ड मल्टीटास्क लर्नर्स में प्रस्तावित किया गया था। यह ~ 40 जीबी टेक्स्ट डेटा के एक बहुत बड़े कोष पर भाषा मॉडलिंग का उपयोग करके पूर्व-प्रशिक्षित एक कारण ट्रांसफार्मर है।

इसे सरल बनाने के लिए, उच्च-स्तरीय OpenAI GPT2 एक बड़ा भाषा मॉडल है जिसे भारी मात्रा में डेटा पर प्रशिक्षित किया गया है। इस मॉडल का उपयोग दिए गए क्रम में अगले टोकन की भविष्यवाणी करने के लिए किया जा सकता है।

यदि यह बहुत जटिल लगता है, तो चिंता न करें, इस परियोजना के साथ पालन करने के लिए आपको किसी मशीन लर्निंग या एआई को जानने की आवश्यकता नहीं है। पुस्तकालय जैसे गले लगाने वाला चेहरा हमारे ऐप में इस मॉडल का उपयोग करना बहुत आसान बनाएं।

गले लगाने वाला चेहरा

हम उपयोग करेंगे गले लगाने वाला चेहरा पुस्तकालय एमएल मॉडल को लोड और सेवा करने के लिए जो हमारे लिए उद्धरण उत्पन्न करेगा। गले लगाने वाला चेहरा एमएल या एआई के किसी भी ज्ञान के बिना हमारी परियोजनाओं में ट्रांसफॉर्मर मॉडल (जिनमें से जीपीटी2 एक प्रकार है) का उपयोग करना बहुत आसान बनाता है। जैसा कि पहले उल्लेख किया गया है, GPT2 एक सामान्य-उद्देश्य वाला भाषा मॉडल है, जिसका अर्थ है कि यह इनपुट अनुक्रम दिए जाने पर सामान्य पाठ की भविष्यवाणी करने में अच्छा है। हमारे मामले में, हमें उद्धरण उत्पन्न करने के लिए अधिक उपयुक्त मॉडल की आवश्यकता है। ऐसा करने के लिए, हमारे पास दो विकल्प हैं:

  1. हम अपने स्वयं के पाठ का उपयोग करके GPT2 मॉडल को ठीक कर सकते हैं जिसके लिए हमें उद्धरणों के अच्छे डेटासेट की आवश्यकता होगी।
  2. या हम पहले से मौजूद मॉडल को ढूंढ सकते हैं जिसे कुछ उद्धरणों के साथ ठीक किया गया है।

सौभाग्य से, हमारे मामले में एक ठीक-ठाक मॉडल है जिसे 500k कोट्स डेटासेट पर प्रशिक्षित किया गया है - https://huggingface.co/nandinib1999/quote-generator

हगिंग फेस के साथ, इस मॉडल का उपयोग करना उतना ही आसान है जितना कि एक टोकन बनाना


 from transformers import AutoTokenizer, AutoModelWithLMHead, pipeline tokenizer = AutoTokenizer.from_pretrained("nandinib1999/quote-generator")


फिर पूर्व प्रशिक्षित मॉडल से एक मॉडल का निर्माण करना


 model = AutoModelWithLMHead.from_pretrained("nandinib1999/quote-generator")


और अंत में, जनरेटर का निर्माण करना जिसका उपयोग हम उद्धरण उत्पन्न करने के लिए कर सकते हैं

 generator = pipeline("text-generation", model=model, tokenizer=tokenizer) # use a starting prompt generator("Keep an open mind and") [{'generated_text': 'Keep an open mind and a deep love for others'}]

मॉडल की सेवा के लिए एक एपीआई का निर्माण

अब जब हमारे पास हमारे लिए उद्धरण उत्पन्न करने का एक तरीका है, तो हमें यह सोचना होगा कि हम इसे अपने ऐप में कैसे उपयोग कर सकते हैं। इसे बनाने के कई तरीके हैं।

  1. मॉडल को हर बार लोड करें जब हम स्क्रिप्ट भेजने के लिए स्क्रिप्ट चलाना चाहते हैं।
  2. एक एपीआई या सेवा बनाएं जो हमारे लिए मांग पर उद्धरण उत्पन्न करने के लिए इस GPT2 मॉडल की सेवा करे।

दूसरे विकल्प का एक महत्वपूर्ण प्लस पॉइंट यह है कि एक बार मॉडल लोड हो जाने के बाद एपीआई हमें जल्दी से प्रतिक्रिया दे सकता है और अन्य अनुप्रयोगों में भी इसका उपयोग किया जा सकता है। एफडब्ल्यूआईडब्ल्यू, पहला विकल्प भी पूरी तरह से वैध दृष्टिकोण है।

हम एक त्वरित सेवारत एपीआई बनाने के लिए __ फास्ट एपीआई __ का उपयोग कर सकते हैं। यहाँ ऐसा दिखता है

 # in file api.py from pydantic import BaseModel from fastapi import FastAPI, HTTPException from transformers import AutoTokenizer, AutoModelWithLMHead, pipeline ## create the pipeline tokenizer = AutoTokenizer.from_pretrained("nandinib1999/quote-generator") model = AutoModelWithLMHead.from_pretrained("nandinib1999/quote-generator") generator = pipeline("text-generation", model=model, tokenizer=tokenizer) app = FastAPI() class QuoteRequest(BaseModel): text: str class QuoteResponse(BaseModel): text: str ### Serves the Model API to generate quote @app.post("/generate", response_model=QuoteResponse) async def generate(request: QuoteRequest): resp = generator(request.text) if not resp[0] and not resp[0]["generated_text"]: raise HTTPException(status_code=500, detail='Error in generation') return QuoteResponse(text=resp[0]["generated_text"])


आइए इसका परीक्षण करें


 $ uvicorn api:app INFO: Started server process [40767] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)


अब हम /generate एंडपॉइंट के लिए अनुरोध भेजना शुरू कर सकते हैं जो हमारे लिए एक उद्धरण उत्पन्न करेगा।

भाग 2: कोट जेनरेटर का निर्माण

अब जब हमारे पास मांग पर भाव उत्पन्न करने का एक तरीका है, तो हम यहां रुक सकते हैं और इसके माध्यम से इसे भेजने पर काम करना शुरू कर सकते हैं संदेशवाहक . लेकिन हम किससे मजाक कर रहे हैं, अब कोई भी टेक्स्ट नहीं पढ़ता है! हम इसे एक अच्छी छवि का उपयोग करके और पोस्टर की तरह दिखने के लिए उस पर अपनी बोली लगाकर इसे दिलचस्प बना सकते हैं।

उद्धरण उत्पन्न करें

हमारे एपीआई को देखते हुए, अब हम एक उद्धरण उत्पन्न करने के लिए निम्न कार्य कर सकते हैं

 from random import choice # feel free to add more starting prompts for more variety canned_seeds = ["Always remember to", "Start today with", "It is okay to"] seed = choice(canned_seeds) resp = requests.post('http://127.0.0.1:8000/generate', data=json.dumps({"text": seed})) return resp.json()["text"]

पृष्ठभूमि छवि डाउनलोड कर रहा है

पहली चुनौती हमारे उद्धरण के लिए एक सुंदर पृष्ठभूमि छवि प्राप्त करना है। उसके लिए, हम Unsplash API का उपयोग करेंगे जो एक क्वेरी से मेल खाती एक यादृच्छिक छवि को वापस करने के लिए एक अच्छा समापन बिंदु प्रदान करता है। प्रारंभिक https://source.unsplash.com/random/800×800/?nature हमारे ब्राउज़र में एक अच्छी प्रकृति की छवि देता है।

चीजों को रोचक बनाए रखने के लिए, हम अलग-अलग क्वेरी टर्म्स जैसे स्टार्स आदि का उपयोग कर सकते हैं। यहां बताया गया है कि हमारी बैकग्राउंड इमेज को डाउनलोड करने के लिए कोड कैसा दिखता है -

 from random import choice image_backgdrops = ['nature', 'stars', 'mountains', 'landscape'] backdrop = choice(image_backdrops) response = requests.get("https://source.unsplash.com/random/800×800/?"+ backdrop, stream=True) # write the output the img.png on our filesystem with open('img.png', 'wb') as out_file: shutil.copyfileobj(response.raw, out_file) del response

उद्धरण के साथ छवि बनाना

ठीक है, अब हमारे पास हमारी पृष्ठभूमि छवि और एक उद्धरण है जिसका अर्थ है कि हम प्राप्तकर्ताओं को भेजी जाने वाली अंतिम छवि को जोड़ने पर काम कर सकते हैं। उच्च स्तर पर हम छवि पर कुछ पाठ रखना चाहते हैं लेकिन यह सरल कार्य भी चुनौतीपूर्ण हो सकता है। शुरुआत के लिए, हमारे पास उत्तर देने के लिए कई प्रश्न हैं

  1. छवि पर पाठ कैसे रखा जाएगा?
  2. पाठ लपेटने के बारे में क्या?
  3. टेक्स्ट किस रंग का होना चाहिए ताकि वह बैकग्राउंड इमेज पर दिखाई दे?
  4. अलग-अलग चौड़ाई और ऊंचाई वाली छवियों के लिए हम यह कैसे करते हैं?

इनमें से कुछ सवालों के जवाब दूसरों की तुलना में अधिक जटिल हैं। इसे सरल रखने के लिए, हम टेक्स्ट को बीच में रखेंगे, और कुछ रैपिंग करेंगे ताकि यह अच्छा लगे। अंत में, अभी के लिए हम हल्के रंग के टेक्स्ट का उपयोग करेंगे। सभी छवि हेरफेर के लिए, हम इसे आसान बनाने के लिए पायथन इमेज लाइब्रेरी (PIL) का उपयोग करेंगे।

 # use the image we downloaded in the above step img = Image.open("img.png") width, height = img.size image_editable = ImageDraw.Draw(img) # wrap text lines = textwrap.wrap(text, width=40) # get the line count and generate a starting offset on y-axis line_count = len(lines) y_offset = height/2 - (line_count/2 * title_font.getbbox(lines[0])[3]) # for each line of text, we generate a (x,y) to calculate the positioning for line in lines: (_, _, line_w, line_h) = title_font.getbbox(line) x = (width - line_w)/2 image_editable.text((x,y_offset), line, (237, 230, 211), font=title_font) y_offset += line_h img.save("result.jpg") print("generated " + filename) return filename


यह result.jpg नामक अंतिम छवि उत्पन्न करता है

छवि अपलोड कर रहा है

अंतिम चरण के लिए, हमें छवि अपलोड करने की आवश्यकता है ताकि हम कूरियर के साथ उसका उपयोग कर सकें। इस मामले में, मैं फायरबेस स्टोरेज का उपयोग कर रहा हूं, लेकिन आप जो चाहें उपयोग करने के लिए स्वतंत्र महसूस कर सकते हैं।


 import firebase_admin from firebase_admin import credentials from firebase_admin import storage cred = credentials.Certificate('serviceaccount.json') firebase_admin.initialize_app(cred, {...}) bucket = storage.bucket() blob = bucket.blob(filename) blob.upload_from_filename(filename) blob.make_public() return blob.public_url


चरण 3: कूरियर के साथ एकीकरण

अंत में, हमारे पास वह सब कुछ है जो हमें अपने मित्रों और परिवार को अपने भयानक उद्धरण भेजने के लिए चाहिए। एक अच्छा दिखने वाला ईमेल टेम्प्लेट बनाने के लिए हम कूरियर का उपयोग कर सकते हैं।

खाता बनाकर प्रारंभ करें।

कूरियर में टेम्पलेट बनाना

संदेश भेज रहा हूँ

कूरियर से संदेश भेजना जितना आसान है उतना ही आसान है। जबकि कूरियर के अपने एसडीके हैं जो एकीकरण को आसान बना सकते हैं, मैं चीजों को सरल रखने के लिए इसके एपीआई एंडपॉइंट का उपयोग करना पसंद करता हूं। मेरे AUTH_TOKEN और TEMPLATE_ID के साथ, हम अपनी छवि भेजने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं


 import requests headers = { "Accept": "application/json", "Content-Type": "application/json", "Authorization": "Bearer {}".format(os.environ['COURIER_AUTH_TOKEN']) } message={ "to": { "email": os.environ["COURIER_RECIPIENT"] }, "data": { "date": datetime.today().strftime("%B %d, %Y"), "img": image_url ## this is image url we generated earlier }, "routing": { "method": "single", "channels": [ "email" ] }, "template": os.environ["COURIER_TEMPLATE"] } requests.post("https://api.courier.com/send", json={"message": message}, headers=headers)


एपीआई कुंजी में पाया जा सकता है समायोजन और टेम्प्लेट आईडी में पाया जा सकता है टेम्पलेट डिजाइन समायोजन। और बस!

निष्कर्ष

इस ट्यूटोरियल ने दिखाया कि मशीन लर्निंग और कूरियर के साथ शुरुआत करना कितना आसान है।

यदि आप आगे बढ़ना चाहते हैं और इस परियोजना में सुधार करना चाहते हैं, तो यहां कुछ दिलचस्प विचार आजमाए जा सकते हैं

  • बेहतर पृष्ठभूमि छवि: एक छवि खोजने के लिए उत्पन्न उद्धरण से एक शब्द का उपयोग करें?
  • टेक्स्ट के लिए बेहतर बैकग्राउंड कलर: टेक्स्ट के लिए बेहतर रंगों का इस्तेमाल करें। छवि के मुख्य रंग से मानार्थ रंग का उपयोग करना एक अच्छा विचार है। आप इसका पता लगाने के लिए k-means क्लस्टरिंग का उपयोग कर सकते हैं।
  • अधिक चैनल जोड़ना : इसे मैसेजिंग क्लाइंट और एसएमएस पर संदेशों तक विस्तारित करता है!

लेखक के बारे में

प्रखर Google में एक वरिष्ठ सॉफ़्टवेयर इंजीनियर हैं जहां वे डेवलपर टूल बनाने पर काम करते हैं. वह एक भावुक ओपन-सोर्स डेवलपर है और अपने खाली समय में गिटार बजाना पसंद करता है।

त्वरित सम्पक

🔗 कूरियर डॉक्स

🔗 गले लगाने वाला चेहरा

🔗 फास्ट एपीआई

🔗 अनप्लैश एपीआई