AlloyDB, वेक्टर खोज और Vertex AI की मदद से पेटेंट खोज ऐप्लिकेशन बनाने का मौका!

1. खास जानकारी

अलग-अलग इंडस्ट्री में, पेटेंट रिसर्च एक ज़रूरी टूल है. इससे प्रतिस्पर्धी माहौल को समझने, लाइसेंसिंग या अधिग्रहण के संभावित अवसरों की पहचान करने, और मौजूदा पेटेंट का उल्लंघन करने से बचने में मदद मिलती है.

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

इस क्रांति के पीछे का मुख्य कारण, वेक्टर सर्च है. वेक्टर सर्च, कीवर्ड मैचिंग पर भरोसा करने के बजाय, टेक्स्ट को संख्यात्मक प्रजेंटेशन (एम्बेडिंग) में बदल देती है. इससे हमें क्वेरी में इस्तेमाल किए गए शब्दों के बजाय, क्वेरी के मतलब के आधार पर खोज करने में मदद मिलती है. साहित्य से जुड़ी खोजों के लिए, यह एक गेम-चेंजर है. मान लीजिए कि आपको "धड़कन की दर मापने वाले पहनने योग्य डिवाइस" के लिए पेटेंट मिलता है, भले ही दस्तावेज़ में इस वाक्यांश का इस्तेमाल न किया गया हो.

मकसद

इस कोडलैब में, हम पेटेंट खोजने की प्रोसेस को तेज़, ज़्यादा आसान, और बेहद सटीक बनाने के लिए काम करेंगे. इसके लिए, हम AlloyDB, pgvector एक्सटेंशन, और Gemini 1.5 Pro, एम्बेडिंग, और वेक्टर सर्च का इस्तेमाल करेंगे.

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

इस लैब में, आपको ये काम करने होंगे:

  1. AlloyDB इंस्टेंस बनाना और Patents Public Dataset का डेटा लोड करना
  2. AlloyDB में pgvector और जनरेटिव एआई मॉडल एक्सटेंशन चालू करना
  3. अहम जानकारी से एम्बेडिंग जनरेट करना
  4. उपयोगकर्ता के खोज टेक्स्ट के लिए, कोसाइन सिमिलैरिटी सर्च को रीयल टाइम में लागू करना
  5. सर्वरलेस क्लाउड फ़ंक्शन में समाधान डिप्लॉय करना

इस डायग्राम में, डेटा के फ़्लो और इसे लागू करने के चरणों के बारे में बताया गया है.

8b73c40a0d12e194.png

 High level diagram representing the flow of the Patent Search Application with AlloyDB

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

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

2. शुरू करने से पहले

प्रोजेक्ट बनाना

  1. Google Cloud Console में, प्रोजेक्ट चुनने वाले पेज पर, Google Cloud प्रोजेक्ट चुनें या बनाएं.
  2. पक्का करें कि आपके Cloud प्रोजेक्ट के लिए बिलिंग चालू हो. किसी प्रोजेक्ट के लिए बिलिंग चालू है या नहीं, यह देखने का तरीका जानें .
  3. आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है. इसमें bq पहले से लोड होता है. Google Cloud Console में सबसे ऊपर मौजूद, Cloud Shell चालू करें पर क्लिक करें.

Cloud Shell बटन की इमेज चालू करें

  1. Cloud Shell से कनेक्ट होने के बाद, यह देखने के लिए कि आपकी पुष्टि हो चुकी है और प्रोजेक्ट को आपके प्रोजेक्ट आईडी पर सेट किया गया है, इस कमांड का इस्तेमाल करें:
gcloud auth list
  1. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं.
gcloud config list project
  1. अगर आपका प्रोजेक्ट सेट नहीं है, तो इसे सेट करने के लिए इस निर्देश का इस्तेमाल करें:
gcloud config set project <YOUR_PROJECT_ID>
  1. ज़रूरी एपीआई चालू करें. Cloud Shell टर्मिनल में gcloud कमांड का इस्तेमाल किया जा सकता है:
gcloud services enable alloydb.googleapis.com \ 
                       compute.googleapis.com \
                       cloudresourcemanager.googleapis.com \
                       servicenetworking.googleapis.com \
                       run.googleapis.com \
                       cloudbuild.googleapis.com \
                       cloudfunctions.googleapis.com \
                       aiplatform.googleapis.com

gcloud कमांड के बजाय, कंसोल का इस्तेमाल करके भी ऐसा किया जा सकता है. इसके लिए, हर प्रॉडक्ट को खोजें या इस लिंक का इस्तेमाल करें.

gcloud कमांड और उनके इस्तेमाल के बारे में जानने के लिए, दस्तावेज़ देखें.

3. AlloyDB डेटाबेस तैयार करना

आइए, एक AlloyDB क्लस्टर, इंस्टेंस, और टेबल बनाएं. इसमें पेटेंट का डेटासेट लोड किया जाएगा.

AlloyDB ऑब्जेक्ट बनाना

क्लस्टर आईडी "patent-cluster", पासवर्ड "alloydb", PostgreSQL 15 के साथ काम करने वाला, और क्षेत्र "us-central1" के तौर पर क्लस्टर और इंस्टेंस बनाएं. नेटवर्किंग को "default" पर सेट करें. इंस्टेंस आईडी को "patent-instance" पर सेट करें. क्लस्टर बनाएं पर क्लिक करें. क्लस्टर बनाने के बारे में जानकारी इस लिंक में दी गई है: https://cloud.google.com/alloydb/docs/cluster-create.

टेबल बनाना

AlloyDB Studio में, नीचे दिए गए डीडीएल स्टेटमेंट का इस्तेमाल करके टेबल बनाई जा सकती है:

CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;

एक्सटेंशन चालू करना

पेटेंट सर्च ऐप्लिकेशन बनाने के लिए, हम pgvector और google_ml_integration एक्सटेंशन का इस्तेमाल करेंगे. pgvector एक्सटेंशन की मदद से, वेक्टर एम्बेडिंग को सेव किया जा सकता है और उन्हें खोजा जा सकता है. google_ml_integration एक्सटेंशन, ऐसे फ़ंक्शन उपलब्ध कराता है जिनका इस्तेमाल करके, Vertex AI के अनुमान लगाने वाले एंडपॉइंट को ऐक्सेस किया जा सकता है. इससे एसक्यूएल में अनुमान मिलते हैं. इन एक्सटेंशन को चालू करें. इसके लिए, ये DDL चलाएं:

CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;

अनुमति दें

"embedding" फ़ंक्शन को लागू करने की अनुमति देने के लिए, नीचे दिए गए स्टेटमेंट को चलाएं:

GRANT EXECUTE ON FUNCTION embedding TO postgres;

AlloyDB सेवा खाते को Vertex AI User की भूमिका असाइन करना

Google Cloud IAM कंसोल में जाकर, AlloyDB सेवा खाते (जो इस तरह दिखता है: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) को "Vertex AI User" की भूमिका का ऐक्सेस दें. PROJECT_NUMBER में आपका प्रोजेक्ट नंबर होगा.

इसके अलावा, gcloud कमांड का इस्तेमाल करके भी ऐक्सेस दिया जा सकता है:

PROJECT_ID=$(gcloud config get-value project)


gcloud projects add-iam-policy-binding $PROJECT_ID \
  --member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"

टेबल में बदलाव करके, एम्बेडिंग सेव करने के लिए एक वेक्टर कॉलम जोड़ें

अभी बनाई गई टेबल में abstract_embeddings फ़ील्ड जोड़ने के लिए, नीचे दिया गया डीडीएल चलाएं. इस कॉलम में, टेक्स्ट की वेक्टर वैल्यू सेव की जा सकेंगी:

ALTER TABLE patents_data ADD column abstract_embeddings vector(3072);

4. डेटाबेस में पेटेंट का डेटा लोड करना

हमारा डेटासेट, BigQuery पर मौजूद Google Patents के सार्वजनिक डेटासेट का इस्तेमाल करेगा. हम क्वेरी चलाने के लिए, AlloyDB Studio का इस्तेमाल करेंगे. alloydb-pgvector रिपॉज़िटरी में, insert_into_patents_data.sql स्क्रिप्ट शामिल है. हम इस स्क्रिप्ट को पेटेंट डेटा लोड करने के लिए चलाएंगे.

  1. Google Cloud Console में, AlloyDB पेज खोलें.
  2. बनाया गया नया क्लस्टर चुनें और इंस्टेंस पर क्लिक करें.
  3. AlloyDB के नेविगेशन मेन्यू में, AlloyDB Studio पर क्लिक करें. अपने क्रेडेंशियल से साइन इन करें.
  4. दाईं ओर मौजूद, नया टैब आइकॉन पर क्लिक करके, एक नया टैब खोलें.
  5. ऊपर दी गई insert_into_patents_data.sql स्क्रिप्ट से insert क्वेरी स्टेटमेंट को कॉपी करके एडिटर में चिपकाएं. इस सुविधा का डेमो देने के लिए, 50 से 100 इंसर्ट स्टेटमेंट कॉपी किए जा सकते हैं.
  6. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

5. पेटेंट के डेटा के लिए एम्बेडिंग बनाना

सबसे पहले, एम्बेडिंग फ़ंक्शन की जांच करते हैं. इसके लिए, यहां दी गई सैंपल क्वेरी चलाएं:

SELECT embedding( 'gemini-embedding-001', 'AlloyDB is a managed, cloud-hosted SQL database service.');

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

25a1d7ef0e49e91e.png

abstract_embeddings वेक्टर फ़ील्ड को अपडेट करना

टेबल में पेटेंट के ऐब्स्ट्रैक्ट को उनसे जुड़ी एम्बेडिंग के साथ अपडेट करने के लिए, नीचे दिए गए डीएमएल को चलाएं:

UPDATE patents_data set abstract_embeddings = embedding( 'gemini-embedding-001', abstract);

6. वेक्टर सर्च करना

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

SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('gemini-embedding-001', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;

इस क्वेरी में,

  1. उपयोगकर्ता ने यह खोज क्वेरी डाली है: "नैचुरल लैंग्वेज प्रोसेसिंग से जुड़ा नया मशीन लर्निंग मॉडल".
  2. हम इसे embedding() तरीके में एम्बेडिंग में बदल रहे हैं. इसके लिए, हम gemini-embedding-001 मॉडल का इस्तेमाल कर रहे हैं.
  3. "<=>" का मतलब, COSINE SIMILARITY दूरी के तरीके का इस्तेमाल करना है.
  4. हम एम्बेड करने के तरीके के नतीजे को वेक्टर टाइप में बदल रहे हैं, ताकि यह डेटाबेस में सेव किए गए वेक्टर के साथ काम कर सके.
  5. LIMIT 10 का मतलब है कि हम खोजे गए टेक्स्ट से सबसे ज़्यादा मिलते-जुलते 10 नतीजे चुन रहे हैं.

नतीजा यहां दिया गया है:

8e77af965fc787ae.png

नतीजों में देखा जा सकता है कि खोज के लिए इस्तेमाल किए गए टेक्स्ट से मिलते-जुलते नतीजे मिले हैं.

7. ऐप्लिकेशन को वेब पर ले जाना

क्या आपको इस ऐप्लिकेशन को वेब पर उपलब्ध कराना है? नीचे दिए गए चरणों का पालन करें:

  1. Cloud Shell Editor पर जाएं. इसके बाद, एडिटर के सबसे नीचे बाईं ओर (स्टेटस बार) मौजूद, "Cloud Code — Sign in" आइकॉन पर क्लिक करें. बिलिंग की सुविधा वाला अपना मौजूदा Google Cloud प्रोजेक्ट चुनें. साथ ही, पक्का करें कि आपने Gemini में भी उसी प्रोजेक्ट से साइन इन किया हो. इसके लिए, स्टेटस बार के दाईं ओर जाएं.
  2. Cloud Code आइकॉन पर क्लिक करें और Cloud Code डायलॉग बॉक्स के पॉप-अप होने तक इंतज़ार करें. 'नया ऐप्लिकेशन' चुनें. इसके बाद, 'नया ऐप्लिकेशन बनाएं' पॉप-अप में जाकर, 'Cloud Functions ऐप्लिकेशन' चुनें:

a800ee1eb6cb8a5b.png

Create New Application पॉप-अप के दूसरे पेज पर, Java: Hello World चुनें. इसके बाद, अपनी पसंद की जगह पर अपने प्रोजेक्ट का नाम "alloydb-pgvector" डालें और OK पर क्लिक करें:

5b09446ecf7d4f8d.png

  1. प्रोजेक्ट स्ट्रक्चर में, pom.xml खोजें और उसे repo फ़ाइल के कॉन्टेंट से बदलें. इसमें कुछ और के साथ-साथ ये डिपेंडेंसी भी होनी चाहिए:

2b3a3cdd75a57711.png

  1. HelloWorld.java फ़ाइल को repo फ़ाइल के कॉन्टेंट से बदलें.

ध्यान दें कि आपको यहां दी गई वैल्यू को अपनी असल वैल्यू से बदलना होगा:

String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values

ध्यान दें कि फ़ंक्शन, खोज के लिए इस्तेमाल किए गए टेक्स्ट को इनपुट पैरामीटर के तौर पर लेता है. इसके लिए, "search" कुंजी का इस्तेमाल किया जाता है. इस तरीके में, हम डेटाबेस से सिर्फ़ एक सबसे मिलता-जुलता जवाब दिखा रहे हैं:

// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();

//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();

try (Connection connection = dataSource.getConnection()) {
   //Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
   try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('tgemini-embedding-001', '" + searchText + "' )::vector LIMIT 1")) {
     ResultSet resultSet = statement.executeQuery();
     resultSet.next();
     String lit = resultSet.getString("literature");
     result = result + lit + "\n";
     System.out.println("Matching Literature: " + lit);
 }
writer.write("Here is the closest match: " + result);
}
  1. अभी बनाई गई Cloud फ़ंक्शन को डिप्लॉय करने के लिए, Cloud Shell टर्मिनल में यह कमांड चलाएं. कमांड का इस्तेमाल करके, सबसे पहले उससे जुड़े प्रोजेक्ट फ़ोल्डर में जाएं:
cd alloydb-pgvector

इसके बाद, यह कमांड चलाएं:

gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http

अहम चरण:

डिप्लॉयमेंट के लिए सेट करने के बाद, आपको Google Cloud Run Functions कंसोल में फ़ंक्शन दिखने चाहिए. नया फ़ंक्शन खोजें और उसे खोलें. इसके बाद, कॉन्फ़िगरेशन में बदलाव करें और इनमें बदलाव करें:

  1. रनटाइम, बिल्ड, कनेक्शन, और सुरक्षा सेटिंग पर जाएं
  2. टाइम आउट की अवधि को 180 सेकंड तक बढ़ाओ
  3. कनेक्शन टैब पर जाएं:

4e83ec8a339cda08.png

  1. Ingress सेटिंग में जाकर, पक्का करें कि "Allow all traffic" चुना गया हो.
  2. ईग्रैस सेटिंग में जाकर, नेटवर्क ड्रॉपडाउन पर क्लिक करें. इसके बाद, "नया वीपीसी कनेक्टर जोड़ें" विकल्प चुनें. इसके बाद, पॉप-अप होने वाले डायलॉग बॉक्स में दिए गए निर्देशों का पालन करें:

8126ec78c343f199.png

  1. VPC कनेक्टर को कोई नाम दें. साथ ही, पक्का करें कि क्षेत्र वही हो जो आपके इंस्टेंस का है. नेटवर्क की वैल्यू को डिफ़ॉल्ट के तौर पर छोड़ दें. साथ ही, सबनेट को कस्टम आईपी रेंज के तौर पर सेट करें. इसके लिए, 10.8.0.0 या इसके जैसा कोई अन्य आईपी रेंज इस्तेमाल करें.
  2. 'स्केलिंग सेटिंग दिखाएं' को बड़ा करें और पक्का करें कि आपने कॉन्फ़िगरेशन को ठीक इस तरह सेट किया हो:

7baf980463a86a5c.png

  1. CREATE पर क्लिक करें. अब यह कनेक्टर, इग्रेस सेटिंग में दिखना चाहिए.
  2. नया कनेक्टर चुनें
  3. इस वीपीसी कनेक्टर के ज़रिए सभी ट्रैफ़िक को रूट करने का विकल्प चुनें.

8. ऐप्लिकेशन को टेस्ट करना

डेटा सोर्स डिप्लॉय होने के बाद, आपको एंडपॉइंट इस फ़ॉर्मैट में दिखेगा:

https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search

Cloud Shell टर्मिनल से, इस कमांड को चलाकर इसकी जांच की जा सकती है:

gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'

नतीजा:

da3dcfac7d024031.png

इसे Cloud Functions की सूची से भी टेस्ट किया जा सकता है. डिप्लॉय किया गया फ़ंक्शन चुनें और "TESTING" टैब पर जाएं. 'अनुरोध JSON के लिए ट्रिगर करने वाले इवेंट को कॉन्फ़िगर करें' सेक्शन के टेक्स्ट बॉक्स में, यह डालें:

{"search": "A new Natural Language Processing related Machine Learning Model"}

'फ़ंक्शन की जांच करें' बटन पर क्लिक करें. इसके बाद, आपको पेज के दाईं ओर नतीजा दिखेगा:

e21f806d661996ff.png

हो गया! AlloyDB डेटा पर Embeddings मॉडल का इस्तेमाल करके, Similarity Vector Search करना इतना ही आसान है.

9. व्यवस्थित करें

इस पोस्ट में इस्तेमाल की गई संसाधनों के लिए, अपने Google Cloud खाते से शुल्क न लिए जाने के लिए, यह तरीका अपनाएं:

  1. Google Cloud Console में, मैनेज करें
  2. संसाधन पेज पर जाएं.
  3. प्रोजेक्ट की सूची में, वह प्रोजेक्ट चुनें जिसे आपको मिटाना है. इसके बाद, मिटाएं पर क्लिक करें.
  4. डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए बंद करें पर क्लिक करें.

10. बधाई हो

बधाई हो! आपने AlloyDB, pgvector, और वेक्टर सर्च का इस्तेमाल करके, मिलती-जुलती इमेज खोजने की सुविधा का इस्तेमाल कर लिया है. AlloyDB, Vertex AI, और Vector Search की क्षमताओं को मिलाकर, हमने साहित्य से जुड़ी खोजों को ज़्यादा ऐक्सेसिबल, असरदार, और काम की जानकारी देने वाला बना दिया है.