स्पैनर, वेक्टर खोज & के साथ एक पेटेंट खोज ऐप्लिकेशन बनाएं Gemini 1.0 Pro!

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

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

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

मकसद

इस कोडलैब में, हम Spanner, Gemini 1.0 Pro, Embeddings, और Vector Search का इस्तेमाल करके, पेटेंट खोजने की प्रोसेस को ज़्यादा तेज़, आसान, और सटीक बनाने के लिए काम करेंगे.

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

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

  1. Spanner इंस्टेंस बनाना
  2. Google Patents के सार्वजनिक डेटासेट लोड करना
  3. Gemini 1.0 Pro मॉडल की मदद से, टेक्स्ट एम्बेडिंग के लिए रिमोट मॉडल बनाना
  4. लोड किए गए डेटासेट से जनरेटिव इनसाइट बनाना
  5. अहम जानकारी से एम्बेडिंग जनरेट करना
  6. डेटासेट के ख़िलाफ़ मिलती-जुलती खोज क्वेरी जारी करना

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

14cfdde5e24258a.png

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

  • कोई ब्राउज़र, जैसे कि 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. पक्का करें कि Vertex AI और Spanner API चालू हों. इसके लिए, कंसोल में जाकर इन्हें खोजें. इसके अलावा, Cloud Shell टर्मिनल में इस कमांड का भी इस्तेमाल किया जा सकता है:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>

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

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

3. अपना Spanner डेटाबेस तैयार करना

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

Spanner इंस्टेंस बनाना

  1. spanner-vertex नाम का Spanner इंस्टेंस बनाएं.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1

डेटाबेस बनाना

  1. Google Cloud Console में, Spanner पेज खोलें.
  2. सूची से spanner-vertex इंस्टेंस चुनें.
  3. डेटाबेस में जाकर, डेटाबेस बनाएं पर क्लिक करें.
  4. डेटाबेस का नाम patents पर सेट करें.
  5. डेटाबेस बनाने के लिए, बनाएं पर क्लिक करें.

टेबल बनाना

  1. Google Cloud Console में, Spanner पेज खोलें.
  2. सूची से spanner-vertex इंस्टेंस चुनें.
  3. patents डेटाबेस चुनें.
  4. टेबल टैब में जाकर, टेबल बनाएं पर क्लिक करें. Spanner Studio पेज खुलता है.
  5. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  6. यह क्वेरी चलाएं:
CREATE TABLE patents_data (
   id string(25), type string(25), number string(20), country string(2), date string(20), abstract string(300000), title string(100000),kind string(5), num_claims numeric, filename string(100), withdrawn numeric, 
) PRIMARY KEY (id);

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

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

  1. Google Cloud Console में, Spanner पेज खोलें.
  2. सूची से spanner-vertex इंस्टेंस चुनें.
  3. patents डेटाबेस चुनें.
  4. नेविगेशन मेन्यू में, Spanner Studio पर क्लिक करें. एक्सप्लोरर पैनल में, आपके डेटाबेस में मौजूद ऑब्जेक्ट की सूची दिखती है.
  5. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  6. एडिटर में मौजूद insert_into_patents_data.sql स्क्रिप्ट से insert क्वेरी स्टेटमेंट कॉपी करें. इस सुविधा का डेमो देने के लिए, 50 से 100 इंसर्ट स्टेटमेंट कॉपी किए जा सकते हैं.
  7. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

5. Gemini 1.0 Pro के लिए रिमोट मॉडल बनाना

पेटेंट का डेटा डेटाबेस में लोड होने के बाद, हम एक रिमोट मॉडल बनाएंगे. यह मॉडल, Gemini 1.0 Pro Vertex AI मॉडल का इस्तेमाल करके, टाइटल और कीवर्ड का खास जानकारी वाला सेट जनरेट करेगा.

Spanner Studio Editor में, यहां दी गई डीडीएल कमांड चलाएं:

  1. नेविगेशन मेन्यू में, Spanner Studio पर क्लिक करें. एक्सप्लोरर पैनल में, आपके डेटाबेस में मौजूद ऑब्जेक्ट की सूची दिखती है.
  2. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  3. यह क्वेरी चलाएं:
CREATE MODEL gemini_pro_model INPUT(
prompt STRING(MAX),
) OUTPUT(
content STRING(MAX),
) REMOTE OPTIONS (
endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/gemini-pro',
default_batch_size = 1
);
  1. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

6. टेक्स्ट एम्बेडिंग के लिए रिमोट मॉडल बनाना

पिछले चरण के नतीजे में, टाइटल और कीवर्ड वाली एक खास जानकारी शामिल होती है. हम इस जवाब को एम्बेडिंग में बदल देंगे. इससे क्वेरी चलाने पर, हमें सही मैच जनरेट करने में मदद मिलेगी. हम Spanner से दूर से ही Vertex AI का Text Embedding Gecko 003 model इस्तेमाल करेंगे.

  1. नेविगेशन मेन्यू में, Spanner Studio पर क्लिक करें. एक्सप्लोरर पैनल में, आपके डेटाबेस में मौजूद ऑब्जेक्ट की सूची दिखती है.
  2. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  3. यह क्वेरी चलाएं:
CREATE MODEL text_embeddings INPUT(content STRING(MAX))
OUTPUT(
 embeddings
   STRUCT<
     statistics STRUCT<truncated BOOL, token_count FLOAT64>,
     values ARRAY<FLOAT64>>
)
REMOTE OPTIONS (
 endpoint = '//aiplatform.googleapis.com/projects/<<YOUR_PROJECT_ID>>/locations/us-central1/publishers/google/models/textembedding-gecko@003');
  1. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

7. पेटेंट के ऐब्स्ट्रैक्ट से जनरेटिव इनसाइट बनाना

हम patents_data_gemini टेबल बनाएंगे, ताकि जनरेटिव इनसाइट को सेव किया जा सके. हम इस टेबल को जनरेट करने के लिए, Gemini 1.5 Pro मॉडल का इस्तेमाल करेंगे.

टेबल बनाना

  1. नेविगेशन मेन्यू में, Spanner Studio पर क्लिक करें. एक्सप्लोरर पैनल में, आपके डेटाबेस में मौजूद ऑब्जेक्ट की सूची दिखती है.
  2. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  3. यह क्वेरी चलाएं:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
  1. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

अहम जानकारी जनरेट करें

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

INSERT INTO patents_data_gemini (id, gemini_response)
SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b where id not in (select id from patents_data_gemini) limit 50
));

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

समाधान वाला सेक्शन:

SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))

इनसाइट देखना

इस टेबल में, क्वेरी में मौजूद 'Identify the areas of work or keywords in this abstract', प्रॉम्प्ट के लिए जनरेट की गई अहम जानकारी शामिल होती है.

ध्यान दें: अगर आपने INSERT DDL के बजाय, ऊपर दिए गए वर्कअराउंड सेक्शन की क्वेरी चलाई है, तो इस हिस्से को छोड़ दें. इसके बजाय, इस पेज पर मौजूद आखिरी SELECT क्वेरी चलाएं.

इनसाइट के नतीजों की पुष्टि करने के लिए, यहां दी गई क्वेरी चलाएं:

select title, abstract, gemini_response from patents_data a inner join patents_data_gemini b
on a.id = b.id;

ये नतीजे दिखते हैं:

6041fab164aaab93.png

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

select title, abstract, gemini_response from patents_data a inner join (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
))) b
on a.id = b.id;

नतीजा, ऊपर दिए गए स्क्रीनशॉट में दिखाए गए नतीजे जैसा ही होना चाहिए.

8. जनरेट की गई अहम जानकारी के लिए, एम्बेडिंग जनरेट करना

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

ध्यान दें: अगर आपने पिछले चरण में, समस्या हल करने से जुड़ी क्वेरी चलाई थी, तो इस चरण में भी समस्या हल करने से जुड़ी क्वेरी चलाने के लिए, इसे छोड़ा जा सकता है.

एम्बेडिंग जनरेट करने के लिए, यह क्वेरी चलाएं:

  1. नेविगेशन मेन्यू में, Spanner Studio पर क्लिक करें. एक्सप्लोरर पैनल में, आपके डेटाबेस में मौजूद ऑब्जेक्ट की सूची दिखती है.
  2. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  3. patents_data_embeddings टेबल बनाने के लिए, यह क्वेरी चलाएं.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
  1. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.
  2. एम्बेडिंग जनरेट करने के लिए, यह क्वेरी चलाएं.
INSERT INTO patents_data_embeddings (id, patents_embeddings)
SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM patents_data_gemini));
  1. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

नतीजे देखना

इस टेबल में, टाइटल और खास जानकारी वाले टेक्स्ट के लिए जनरेट की गई एम्बेडिंग शामिल हैं.

नतीजों की पुष्टि करने के लिए, यह क्वेरी चलाएं:

select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;

ये नतीजे दिखते हैं:

a1e968bac4ab1cb.png

समाधान वाला सेक्शन:

अगर आपने अन्य चरणों में समस्या हल करने का तरीका इस्तेमाल किया है, तो इस क्वेरी का इस्तेमाल करें:

select title, abstract, b.patents_embeddings from patents_data a inner join 
(SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b limit 50
)))))) b
on a.id = b.id;

इससे आपको वही नतीजे मिलेंगे जो ऊपर दिए गए स्क्रीनशॉट में दिखाए गए हैं.

9. वेक्टर सर्च की सुविधा के लिए तैयारी करना

टेक्स्ट एम्बेडिंग जनरेट करने के बाद, अब हम अपने वेब ऐप्लिकेशन को सिमिलैरिटी वेक्टर सर्च करने के लिए तैयार कर सकते हैं. इस कोडलैब में, हम एक ऐसा वेब ऐप्लिकेशन बना रहे हैं जिसमें K-Nearest Neighbors की समानता के आधार पर खोज के नतीजे दिखाने की सुविधा शामिल है. तैयार किए गए इस डेटासेट का इस्तेमाल, सर्च ऐप्लिकेशन के साथ किया जा सकता है. इससे यह देखा जा सकता है कि खोज के नतीजे कैसे दिखते हैं.

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

यह क्वेरी चलाएं:

  1. नेविगेशन मेन्यू में, Spanner Studio पर क्लिक करें. एक्सप्लोरर पैनल में, आपके डेटाबेस में मौजूद ऑब्जेक्ट की सूची दिखती है.
  2. नया SQL एडिटर टैब पर क्लिक करके, नया टैब खोलें.
  3. patents_data_embeddings टेबल बनाने के लिए, यह क्वेरी चलाएं.
SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join patents_data_gemini b on a.id = b.id
inner join patents_data_embeddings c on a.id = c.id
ORDER BY distance
LIMIT 10;
  1. चलाएं पर क्लिक करें. आपकी क्वेरी के नतीजे, नतीजे टेबल में दिखते हैं.

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

SELECT a.id, a.title, a.abstract, 'A new Natural Language Processing related Machine Learning Model' search_text, COSINE_DISTANCE(c.patents_embeddings,
(SELECT embeddings.values
FROM ML.PREDICT(
MODEL text_embeddings,
(SELECT 'A new Natural Language Processing related Machine Learning Model' as content)))) as distance
FROM patents_data a inner join (SELECT id, embeddings.values as patents_embeddings
FROM ML.PREDICT(MODEL text_embeddings,
(SELECT id, gemini_response as content FROM (SELECT id, content as gemini_response
FROM ML.PREDICT(MODEL gemini_pro_model,
(select id, concat ('Identify the areas of work or keywords in this abstract', abstract) as prompt from patents_data b 
)))))) c on a.id = c.id
ORDER BY distance
LIMIT 2;

नतीजे देखना

पहली क्वेरी में, COSINE_DISTANCE तरीके का इस्तेमाल किया गया है. इससे हमारे प्रॉम्प्ट से मिलते-जुलते 10 जवाब मिले हैं.

ये नतीजे दिखते हैं:

d26ca8b8238bdf25.png

जनरेट किए गए नतीजे, क्वेरी में शामिल प्रॉम्प्ट के संदर्भ से काफ़ी मिलते-जुलते हैं.

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

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

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

11. बधाई हो

बधाई हो! आपने Spanner में पहले से मौजूद वेक्टर सर्च का इस्तेमाल करके, मिलती-जुलती इमेज खोजने की सुविधा का इस्तेमाल कर लिया है. इसके अलावा, आपने देखा कि SQL का इस्तेमाल करके, सीधे तौर पर जनरेटिव एआई की सुविधा देने के लिए, एम्बेडिंग और एलएलएम मॉडल के साथ काम करना कितना आसान है.

आगे क्या करना है?

Spanner की केएनएन वेक्टर सर्च (के-नियरेस्ट नेबर) सुविधा के बारे में ज़्यादा जानने के लिए, यहां जाएं: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

Spanner के VertexAI इंटिग्रेशन का इस्तेमाल करके, SQL की मदद से ऑनलाइन अनुमान लगाने के तरीके के बारे में यहां ज़्यादा जानें: https://cloud.google.com/spanner/docs/ml