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

1. परिचय

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

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

आपको क्या बनाना होगा

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

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

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

  • Chrome या Firefox जैसा ब्राउज़र
  • आपके पास ऐसा Google Cloud प्रोजेक्ट होना चाहिए जिसमें बिलिंग की सुविधा चालू हो

3. लागत

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

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. ऐसा प्रॉम्प्ट टेंप्लेट बनाएं जिसका इस्तेमाल बाद में notebook में किया जा सके.
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

खास जानकारी

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

फ़ायदे

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

नुकसान

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

6. MapStorage का तरीका

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

इस तरीके को लागू करने की जानकारी के लिए, इस GitHub लिंक पर जाएं.

7. बधाई हो

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

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

इन तरीकों से, एलएलएम के साथ इंटरैक्ट किया जा सकता है और लंबे दस्तावेज़ों की खास जानकारी अपने हिसाब से बनाई जा सकती है. हालांकि, कभी-कभी बूटस्ट्रैप करने या पहले से मौजूद तरीकों का इस्तेमाल करके, इस प्रोसेस को तेज़ किया जा सकता है. यहां पर LangChain जैसी लाइब्रेरी का इस्तेमाल होता है. Vertex AI पर LangChain सहायता के बारे में ज़्यादा जानें.