Vertex AI PaLM API का इस्तेमाल करके, खास जानकारी देने के तरीके

1. परिचय

टेक्स्ट को छोटा करने की प्रोसेस में, किसी टेक्स्ट दस्तावेज़ का छोटा वर्शन बनाया जाता है. हालांकि, इसमें अहम जानकारी को सुरक्षित रखा जाता है. इस प्रोसेस का इस्तेमाल, किसी लंबे दस्तावेज़ को जल्दी से पढ़ने, किसी लेख के मुख्य विचार को समझने या उपयोगकर्ताओं के साथ खास जानकारी शेयर करने के लिए किया जा सकता है. किसी छोटे पैराग्राफ़ की खास जानकारी देना आसान काम नहीं है. हालांकि, किसी बड़े दस्तावेज़ की खास जानकारी देने के लिए, आपको कुछ चुनौतियों का सामना करना पड़ सकता है. उदाहरण के लिए, कई पेजों वाली पीडीएफ़ फ़ाइल.

इस कोडलैब में, बड़े दस्तावेज़ों की खास जानकारी पाने के लिए, जनरेटिव मॉडल का इस्तेमाल करने का तरीका बताया गया है.

आपको क्या बनाने को मिलेगा

इस ट्यूटोरियल में, जनरेटिव मॉडल का इस्तेमाल करके टेक्स्ट से जानकारी को छोटा करने का तरीका जानें. इसके लिए, यहां दिए गए तरीकों का इस्तेमाल करें:

  • स्टफ़िंग
  • MapReduce
  • ओवरलैप करने वाले चंक के साथ MapReduce
  • रोलिंग समरी के साथ MapReduce

2. ज़रूरी शर्तें

  • कोई ब्राउज़र, जैसे कि Chrome या Firefox
  • बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट

3. लागत

इस ट्यूटोरियल में, Vertex AI Generative AI Studio को Google Cloud के बिलिंग वाले कॉम्पोनेंट के तौर पर इस्तेमाल किया गया है.

Vertex AI की कीमत और जनरेटिव एआई की कीमत के बारे में जानें. साथ ही, प्राइसिंग कैलकुलेटर का इस्तेमाल करके, अपने अनुमानित इस्तेमाल के आधार पर लागत का अनुमान जनरेट करें.

4. शुरू करना

  1. नीचे दी गई कमांड का इस्तेमाल करके, Vertex AI SDK, अन्य पैकेज, और उनकी डिपेंडेंसी इंस्टॉल करें:
!pip install google-cloud-aiplatform PyPDF2 ratelimit backoff --upgrade --quiet --user
  • Colab के लिए, कर्नल को फिर से शुरू करने के लिए, यहां दी गई सेल से टिप्पणी हटाएं.
# # Automatically restart kernel after installs so that your environment can access the new packages
 import IPython

 app = IPython.Application.instance()
 app.kernel.do_shutdown(True)
  • Vertex AI Workbench के लिए, सबसे ऊपर मौजूद बटन का इस्तेमाल करके टर्मिनल को रीस्टार्ट किया जा सकता है.
  1. इनमें से किसी एक तरीके का इस्तेमाल करके, अपने नोटबुक एनवायरमेंट की पुष्टि करें:
  • Colab के लिए, इस सेल से टिप्पणी हटाएं.
from google.colab import auth
auth.authenticate_user()
  1. Vertex AI SDK टूल को शुरू करने के लिए, लाइब्रेरी इंपोर्ट करें.
  • Colab के लिए, यहां दी गई सेल से टिप्पणी हटाने पर लाइब्रेरी इंपोर्ट हो जाएंगी.
import vertexai

 PROJECT_ID = "[your-project-id]"  # @param {type:"string"}
 vertexai.init(project=PROJECT_ID, location="us-central1")
import re
import urllib
import warnings
from pathlib import Path

import backoff
import pandas as pd
import PyPDF2
import ratelimit
from google.api_core import exceptions
from tqdm import tqdm
from vertexai.language_models import TextGenerationModel

warnings.filterwarnings("ignore")
  1. उन मॉडल को इंपोर्ट करें जहां टेक्स्ट जनरेट करने वाले पहले से ट्रेन किए गए मॉडल को लोड किया जाता है. इस मॉडल का नाम text-bison@001 है.
generation_model = TextGenerationModel.from_pretrained("text-bison@001")
  1. डेटा फ़ाइलें तैयार करें, जहां आपको खास जानकारी जनरेट करने के लिए PDF फ़ाइल डाउनलोड करनी हो.
# Define a folder to store the files
data_folder = "data"
Path(data_folder).mkdir(parents=True, exist_ok=True)

# Define a pdf link to download and place to store the download file
pdf_url = "https://services.google.com/fh/files/misc/practitioners_guide_to_mlops_whitepaper.pdf"
pdf_file = Path(data_folder, pdf_url.split("/")[-1])

# Download the file using `urllib` library
urllib.request.urlretrieve(pdf_url, pdf_file)

डाउनलोड की गई PDF फ़ाइल के कुछ पेजों को देखने का तरीका यहां बताया गया है.

# Read the PDF file and create a list of pages
reader = PyPDF2.PdfReader(pdf_file)
pages = reader.pages

# Print three pages from the pdf
for i in range(3):
    text = pages[i].extract_text().strip()

print(f"Page {i}: {text} \n\n")

#text contains only the text from page 2

5. स्टफ़िंग का तरीका

किसी भाषा मॉडल को डेटा देने का सबसे आसान तरीका यह है कि उसे कॉन्टेक्स्ट के तौर पर प्रॉम्प्ट में "भर" दिया जाए. इसमें प्रॉम्प्ट में मौजूद सभी ज़रूरी जानकारी शामिल होती है. साथ ही, इसमें वह क्रम भी शामिल होता है जिसमें आपको मॉडल से जानकारी प्रोसेस करानी है.

  1. PDF फ़ाइल के सिर्फ़ दूसरे पेज से टेक्स्ट निकालो.
# Entry string that contains the extacted text from page 2
print(f"There are {len(text)} characters in the second page of the pdf")
  1. एक प्रॉम्प्ट टेंप्लेट बनाएं, जिसका इस्तेमाल बाद में नोटबुक में किया जा सकता है.
prompt_template = """
    Write a concise summary of the following text.
    Return your response in bullet points which covers the key points of the text.

    ```{text}```

    BULLET POINT SUMMARY:
"""
  1. एपीआई के ज़रिए एलएलएम का इस्तेमाल करके, निकाले गए टेक्स्ट की खास जानकारी जनरेट करें. ध्यान दें कि फ़िलहाल एलएलएम में इनपुट टेक्स्ट की सीमा तय है. इसलिए, बहुत ज़्यादा इनपुट टेक्स्ट डालने पर, उसे स्वीकार नहीं किया जा सकता. कोटा और सीमाओं के बारे में ज़्यादा जानने के लिए, कोटा और सीमाएं लेख पढ़ें.

नीचे दिए गए कोड से अपवाद होता है.

# Define the prompt using the prompt template
prompt = prompt_template.format(text=text)

# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024).text

print(summary)
  1. मॉडल ने गड़बड़ी का यह मैसेज दिखाया: 400 अनुरोध में अमान्य तर्क शामिल है. ऐसा इसलिए हुआ, क्योंकि निकाले गए टेक्स्ट की लंबाई इतनी ज़्यादा है कि जनरेटिव मॉडल उसे प्रोसेस नहीं कर सकता.

इस समस्या से बचने के लिए, आपको निकाले गए टेक्स्ट का कुछ हिस्सा डालना होगा. उदाहरण के लिए, पहले 30,000 शब्द.

# Define the prompt using the prompt template
prompt = prompt_template.format(text=text[:30000])

# Use the model to summarize the text using the prompt
summary = generation_model.predict(prompt=prompt, max_output_tokens=1024)

summary

आपको स्क्रीनशॉट में यह नतीजा दिखेगा:

710efedd9f6dbc6d.png

खास जानकारी

पूरा टेक्स्ट मॉडल के लिए बहुत बड़ा है. हालांकि, आपने मॉडल का इस्तेमाल करके, पीडीएफ़ के कुछ हिस्से से सबसे ज़रूरी जानकारी की एक छोटी सूची बनाई है.

फ़ायदे

  • इस तरीके से, मॉडल को सिर्फ़ एक कॉल किया जाता है.
  • टेक्स्ट की खास जानकारी जनरेट करते समय, मॉडल के पास एक साथ पूरे डेटा का ऐक्सेस होता है. इससे बेहतर नतीजे मिलते हैं.

नुकसान

  • ज़्यादातर मॉडल में कॉन्टेक्स्ट की लंबाई होती है. बड़े दस्तावेज़ों (या कई दस्तावेज़ों) के लिए, यह तरीका काम नहीं करता. ऐसा इसलिए, क्योंकि इससे प्रॉम्प्ट का साइज़, कॉन्टेक्स्ट की लंबाई से ज़्यादा हो जाता है.
  • यह तरीका सिर्फ़ छोटे डेटा पर काम करता है. यह बड़े दस्तावेज़ों के लिए सही नहीं है.

6. MapReduce तरीका

बड़े दस्तावेज़ों के लिए इस समस्या को हल करने के लिए, हम MapReduce तरीके का इस्तेमाल करेंगे. इस तरीके में, सबसे पहले बड़े डेटा को छोटे-छोटे हिस्सों में बांटा जाता है. इसके बाद, हर हिस्से पर प्रॉम्प्ट चलाया जाता है. जवाब को छोटा करने से जुड़े टास्क के लिए, पहले प्रॉम्प्ट का आउटपुट उस हिस्से की खास जानकारी होती है. शुरुआती सभी आउटपुट जनरेट होने के बाद, उन्हें एक साथ लाने के लिए एक अलग प्रॉम्प्ट का इस्तेमाल किया जाता है.

इस तरीके को लागू करने के बारे में ज़्यादा जानने के लिए, इस GitHub लिंक पर जाएं.

7. बधाई हो

बधाई हो! आपने किसी लंबे दस्तावेज़ की खास जानकारी जनरेट कर ली है. आपने लंबे दस्तावेज़ों की खास जानकारी बनाने के दो तरीके सीख लिए हैं. साथ ही, आपने उनके फ़ायदों और कमियों के बारे में भी जान लिया है. बड़े दस्तावेज़ों की खास जानकारी पाने के कुछ तरीके हैं. दो अन्य तरीकों के बारे में जानने के लिए, इस कोडलैब को देखें: ओवरलैपिंग चंक के साथ MapReduce और रोलिंग समरी के साथ MapReduce.

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

इन तरीकों से, एलएलएम के साथ इंटरैक्ट किया जा सकता है और लंबे दस्तावेज़ों को आसानी से छोटा किया जा सकता है. हालांकि, कभी-कभी आपको बूटस्ट्रैपिंग या पहले से बनाए गए तरीकों का इस्तेमाल करके, प्रोसेस को तेज़ करना पड़ सकता है. यहां LangChain जैसी लाइब्रेरी काम आती हैं. Vertex AI पर LangChain के साथ काम करने की सुविधा के बारे में ज़्यादा जानें.