1. بررسی اجمالی
در صنایع مختلف، تحقیقات پتنت ابزاری حیاتی برای درک فضای رقابتی، شناسایی فرصتهای بالقوه مجوز یا کسب، و اجتناب از نقض حق ثبت اختراعات موجود است.
تحقیقات ثبت اختراع گسترده و پیچیده است. غربال کردن چکیدههای فنی بیشماری برای یافتن نوآوریهای مرتبط، کاری دلهرهآور است. جستجوهای سنتی مبتنی بر کلمات کلیدی اغلب نادرست و وقت گیر هستند. چکیده ها طولانی و فنی هستند و درک سریع ایده اصلی را دشوار می کند. این می تواند منجر به از دست دادن پتنت های کلیدی توسط محققان یا اتلاف وقت برای نتایج نامربوط شود.
هدف
در این نرمافزار، ما با استفاده از Spanner و Gemini 1.0 Pro، Embeddings و Vector Search، روند جستجوی پتنتها را سریعتر، شهودیتر و فوقالعاده دقیقتر کنیم.
چیزی که خواهی ساخت
به عنوان بخشی از این آزمایشگاه، شما:
- یک نمونه Spanner ایجاد کنید
- مجموعه داده های عمومی Google Patents را بارگیری کنید
- با مدل Gemini 1.0 Pro یک مدل از راه دور برای جاسازی متن ایجاد کنید
- بینش تولیدی را از مجموعه داده های بارگذاری شده ایجاد کنید
- جاسازیهایی را از بینشها ایجاد کنید
- پرس و جوهای جستجوی شباهت را در برابر مجموعه داده صادر کنید
نمودار زیر جریان داده ها و مراحل مربوط به پیاده سازی را نشان می دهد.
الزامات
2. قبل از شروع
یک پروژه ایجاد کنید
- در Google Cloud Console ، در صفحه انتخاب پروژه، یک پروژه Google Cloud را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه Cloud شما فعال است. با نحوه بررسی فعال بودن صورتحساب در پروژه آشنا شوید.
- شما از Cloud Shell استفاده خواهید کرد، یک محیط خط فرمان در حال اجرا در Google Cloud که با bq از قبل بارگذاری شده است. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.
- پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی میکنید که قبلاً احراز هویت شدهاید و پروژه به ID پروژه شما تنظیم شده است:
gcloud auth list
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید کنید که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
- اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
- مطمئن شوید که 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 ایجاد کنید
- یک نمونه Spanner با نام
spanner-vertex
ایجاد کنید.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
یک پایگاه داده ایجاد کنید
- در کنسول Google Cloud، صفحه Spanner را باز کنید.
- نمونه
spanner-vertex
را از لیست انتخاب کنید. - در زیر پایگاههای داده، روی ایجاد پایگاه داده کلیک کنید.
- نام پایگاه داده را روی اختراعات تنظیم کنید.
- برای ایجاد پایگاه داده روی Create کلیک کنید.
یک جدول ایجاد کنید
- در کنسول Google Cloud، صفحه Spanner را باز کنید.
- نمونه
spanner-vertex
را از لیست انتخاب کنید. - پایگاه داده
patents
را انتخاب کنید. - در زیر برگه جداول ، روی ایجاد جدول کلیک کنید. صفحه Spanner Studio باز می شود.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- کوئری زیر را اجرا کنید:
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. داده های ثبت اختراع را در پایگاه داده بارگذاری کنید
مجموعه داده های عمومی پتنت های Google در BigQuery به عنوان مجموعه داده ما استفاده خواهد شد. ما از Spanner Studio برای اجرای پرس و جوهای خود استفاده خواهیم کرد. مخزن spanner-gemini-search شامل اسکریپت insert_into_patents_data.sql
است که برای بارگیری داده های حق اختراع اجرا خواهیم کرد.
- در کنسول Google Cloud، صفحه Spanner را باز کنید.
- نمونه
spanner-vertex
را از لیست انتخاب کنید. - پایگاه داده
patents
را انتخاب کنید. - در منوی پیمایش، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش می دهد.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- عبارت
insert
query را از اسکریپتinsert_into_patents_data.sql
در ویرایشگر کپی کنید. شما می توانید 50-100 عبارت درج را برای نمایش سریع این مورد استفاده کپی کنید. - روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
5. ایجاد مدل از راه دور برای Gemini 1.0 Pro
پس از بارگیری داده های حق ثبت اختراع در پایگاه داده، ما یک مدل راه دور ایجاد خواهیم کرد که از مدل Gemini 1.0 Pro Vertex AI برای تولید مجموعه ای خلاصه از عنوان و کلمات کلیدی استفاده می کند.
دستور DDL زیر را در ویرایشگر Spanner Studio اجرا کنید:
- در منوی پیمایش، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش می دهد.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- کوئری زیر را اجرا کنید:
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
);
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
6. ایجاد مدل از راه دور برای جاسازی متن
نتیجه مرحله قبل شامل یک خلاصه تلفیقی است که از یک عنوان و کلمات کلیدی تشکیل شده است. ما این پاسخ را به جاسازیهایی تبدیل میکنیم که به ما کمک میکنند هنگام اجرای یک پرس و جو، مطابقتهای مناسب را ایجاد کنیم. ما از Text Embedding Gecko 003 model
از Vertex AI از راه دور از Spanner استفاده خواهیم کرد.
- در منوی پیمایش، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش می دهد.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- کوئری زیر را اجرا کنید:
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');
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
7. ایجاد بینش تولیدی از چکیده پتنت
ما یک جدول patents_data_gemini
برای ذخیره بینشهای تولیدی ایجاد میکنیم که با استفاده از مدل Gemini 1.5 Pro که قبلا ایجاد کردیم، ایجاد میکنیم.
جدول را ایجاد کنید
- در منوی پیمایش، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش می دهد.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- کوئری زیر را اجرا کنید:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
بینش ایجاد کنید
برای پر کردن جدول با بینشهای تولیدی، توصیه میشود از برنامهای استفاده کنید که از روش نوشتن دستهای یا جهش استفاده میکند. برای این کد لبه، Query DDL زیر را حداکثر تا 4 بار اجرا می کنیم تا جدول پر شود.
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
));
توجه: اگر در این مرحله با خطای Quota Exceeded مواجه میشوید (ممکن است در مورد اعتبارات بدون حاشیه کوچک)، سعی کنید از درج صرفنظر کنید و فقط درخواست انتخاب را در بخش راهحل زیر اجرا کنید.
بخش راه حل:
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;
نتایج زیر مشاهده می شود:
توجه: اگر پرس و جو بخش راه حل را اجرا کردید، نام جدول در پرس و جو انتخاب بالا را با پرس و جو در بخش راه حل جایگزین کنید. بنابراین به جای آن برنامه زیر را اجرا کنید:
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. جاسازیهایی را برای بینشهای تولید شده ایجاد کنید
پس از پر کردن اطلاعات بینش در جدول ما، اکنون میتوانیم از این بینشها برای ایجاد جاسازیها استفاده کنیم. این تعبیهها به ما کمک میکنند تا به تطابق دقیق کلمات کلیدی اعتماد نکنیم، بلکه به ایجاد نتایج بر اساس شباهتهای مفهومی کمک میکنند.
توجه: اگر پرس و جو بخش راه حل را در مرحله قبل اجرا کردید، می توانید از این رد شده و در این مرحله نیز به پرس و جو بخش راه حل بروید.
برای ایجاد تعبیهها کوئری زیر را اجرا کنید:
- در منوی پیمایش، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش می دهد.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- برای ایجاد جدول
patents_data_embeddings
کوئری زیر را اجرا کنید.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
- کوئری زیر را برای ایجاد جاسازی ها اجرا کنید.
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));
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
نتایج را مشاهده کنید
جدول شامل جاسازی های ایجاد شده برای عنوان و متن چکیده شده است.
برای تأیید نتایج، کوئری زیر را اجرا می کنیم:
select title, abstract, b.patents_embeddings from patents_data a inner join patents_data_embeddings b
on a.id = b.id;
نتایج زیر مشاهده می شود:
بخش راه حل :
اگر بخش راه حل را در مراحل دیگر انجام داده اید، از این پرس و جو استفاده کنید:
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 ورودی محدود می کند.
کوئری زیر را اجرا کنید:
- در منوی پیمایش، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش می دهد.
- با کلیک بر روی برگه ویرایشگر SQL جدید، یک برگه جدید باز کنید.
- برای ایجاد جدول
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;
- روی Run کلیک کنید. نتایج جستجوی شما در جدول نتایج ظاهر می شود.
توجه: اگر از پرسوجوها در بخش راهحل استفاده کردهاید، به دلیل خطاهای سهمیه در یکی از اولین عبارات درج، میتوانید تمام مراحل دیگر را رد کنید و مستقیماً عبارت زیر را اجرا کنید تا نتایج انجام جستجوی نزدیکترین همسایه را روی جاسازیهای برداری مشاهده کنید. پایگاه داده آچار:
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 مورد منطبق برای درخواست ما استفاده می کند.
نتایج زیر مشاهده می شود:
نتایجی که تولید میشوند از نظر متنی کاملاً به درخواستی که بخشی از پرس و جو بود نزدیک هستند.
10. پاکسازی کنید
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:
- در کنسول Google Cloud، به صفحه مدیریت منابع بروید.
- در لیست پروژه، پروژه ای را که می خواهید حذف کنید انتخاب کنید و سپس روی Delete کلیک کنید. اگر نمیخواهید پروژه را حذف کنید، فقط نمونهای را که در Spanner ایجاد کردهاید حذف کنید.
- در محاوره، شناسه پروژه را تایپ کنید و سپس روی Shut down کلیک کنید تا پروژه حذف شود.
11. تبریک می گویم
تبریک میگوییم! شما با موفقیت جستجوی مشابهی را با استفاده از جستجوی برداری داخلی Spanner انجام دادید. علاوه بر این، دیدید که کار با مدلهای embedding و LLM برای ارائه قابلیتهای هوش مصنوعی مستقیماً با استفاده از SQL چقدر آسان است.
بعدش چی؟
درباره ویژگی دقیق نزدیکترین همسایه Spanner (جستجوی برداری KNN) در اینجا بیشتر بیاموزید: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
همچنین میتوانید درباره نحوه انجام پیشبینیهای آنلاین با SQL با استفاده از ادغام VertexAI Spanner در اینجا بیشتر بخوانید: https://cloud.google.com/spanner/docs/ml