۱. مرور کلی
در صنایع مختلف، تحقیقات ثبت اختراع ابزاری حیاتی برای درک چشمانداز رقابتی، شناسایی فرصتهای بالقوه صدور مجوز یا خرید و جلوگیری از نقض حق ثبت اختراعات موجود است.
تحقیقات ثبت اختراع گسترده و پیچیده است. بررسی چکیدههای فنی بیشمار برای یافتن نوآوریهای مرتبط، کاری دلهرهآور است. جستجوهای سنتی مبتنی بر کلمات کلیدی اغلب نادرست و زمانبر هستند. چکیدهها طولانی و فنی هستند و درک سریع ایده اصلی را دشوار میکنند. این امر میتواند منجر به از دست رفتن پتنتهای کلیدی توسط محققان یا اتلاف وقت برای نتایج نامربوط شود.
هدف
در این آزمایشگاه کد، ما با بهرهگیری از Spanner و Gemini 1.0 Pro داخلی، Embeddings و Vector Search، تلاش خواهیم کرد تا فرآیند جستجوی پتنت را سریعتر، شهودیتر و فوقالعاده دقیقتر کنیم.
آنچه خواهید ساخت
به عنوان بخشی از این آزمایشگاه، شما:
- یک نمونه Spanner ایجاد کنید
- بارگذاری مجموعه دادههای عمومی پتنتهای گوگل
- ایجاد یک مدل از راه دور برای جاسازی متن با مدل Gemini 1.0 Pro
- ایجاد بینشهای مولد از مجموعه دادههای بارگذاری شده
- ایجاد جاسازیها از بینشها
- درخواستهای جستجوی شباهت را در مجموعه دادهها اعمال کنید
نمودار زیر جریان دادهها و مراحل پیادهسازی را نشان میدهد.

الزامات
۲. قبل از شروع
ایجاد یک پروژه
- در کنسول گوگل کلود ، در صفحه انتخاب پروژه، یک پروژه گوگل کلود را انتخاب یا ایجاد کنید.
- مطمئن شوید که صورتحساب برای پروژه ابری شما فعال است. یاد بگیرید که چگونه بررسی کنید که آیا صورتحساب در یک پروژه فعال است یا خیر .
- شما از Cloud Shell ، یک محیط خط فرمان که در Google Cloud اجرا میشود و bq از قبل روی آن بارگذاری شده است، استفاده خواهید کرد. روی Activate Cloud Shell در بالای کنسول Google Cloud کلیک کنید.

- پس از اتصال به Cloud Shell، با استفاده از دستور زیر بررسی میکنید که آیا از قبل احراز هویت شدهاید و پروژه روی شناسه پروژه شما تنظیم شده است یا خیر:
gcloud auth list
- دستور زیر را در Cloud Shell اجرا کنید تا تأیید شود که دستور gcloud از پروژه شما اطلاع دارد.
gcloud config list project
- اگر پروژه شما تنظیم نشده است، از دستور زیر برای تنظیم آن استفاده کنید:
gcloud config set project <YOUR_PROJECT_ID>
- با جستجوی APIهای Vertex AI و Spanner در کنسول، مطمئن شوید که آنها فعال هستند. همچنین میتوانید از دستور زیر در ترمینال Cloud Shell استفاده کنید:
gcloud services enable spanner.googleapis.com --project <<YOUR_PROJECT_ID>>
gcloud services enable aiplatform.googleapis.com --project <<YOUR_PROJECT_ID>>
راه حل دیگه استفاده از این لینک هست.
برای دستورات و نحوهی استفاده از gcloud به مستندات مراجعه کنید.
۳. پایگاه داده Spanner خود را آماده کنید
بیایید یک نمونه، پایگاه داده و جدول Spanner ایجاد کنیم که مجموعه دادههای ثبت اختراع در آن بارگذاری شود.
یک نمونه Spanner ایجاد کنید
- یک نمونه Spanner با نام
spanner-vertexایجاد کنید.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
ایجاد پایگاه داده
- در کنسول گوگل کلود، صفحه Spanner را باز کنید.
- نمونه
spanner-vertexرا از لیست انتخاب کنید. - در قسمت پایگاههای داده، روی ایجاد پایگاه داده کلیک کنید.
- نام پایگاه داده را روی patents تنظیم کنید.
- برای ایجاد پایگاه داده، روی Create کلیک کنید.
ایجاد یک جدول
- در کنسول گوگل کلود، صفحه Spanner را باز کنید.
- نمونه
spanner-vertexرا از لیست انتخاب کنید. - پایگاه داده
patentsرا انتخاب کنید. - در زیر برگه جداول ، روی ایجاد جدول کلیک کنید. صفحه Spanner Studio باز میشود.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- کوئری زیر را اجرا کنید:
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);
۴. بارگذاری دادههای ثبت اختراع در پایگاه داده
مجموعه دادههای عمومی ثبت اختراعات گوگل در BigQuery به عنوان مجموعه داده ما استفاده خواهد شد. ما از Spanner Studio برای اجرای کوئریهای خود استفاده خواهیم کرد. مخزن spanner-gemini-search شامل اسکریپت insert_into_patents_data.sql است که ما برای بارگذاری دادههای ثبت اختراع اجرا خواهیم کرد.
- در کنسول گوگل کلود، صفحه Spanner را باز کنید.
- نمونه
spanner-vertexرا از لیست انتخاب کنید. - پایگاه داده
patentsرا انتخاب کنید. - در منوی ناوبری، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش میدهد.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- عبارت پرسوجوی
insertرا از اسکریپتinsert_into_patents_data.sqlدر ویرایشگر کپی کنید. میتوانید ۵۰ تا ۱۰۰ عبارت درج را برای نمایش سریع این مورد استفاده کپی کنید. - روی Run کلیک کنید. نتایج پرسوجوی شما در جدول نتایج ظاهر میشود.
۵. ایجاد مدل از راه دور برای Gemini 1.0 Pro
پس از بارگذاری دادههای ثبت اختراع در پایگاه داده، یک مدل از راه دور ایجاد خواهیم کرد که از مدل هوش مصنوعی Gemini 1.0 Pro Vertex برای تولید مجموعهای خلاصه از عنوان و کلمات کلیدی استفاده میکند.
دستور DDL زیر را در ویرایشگر Spanner Studio اجرا کنید:
- در منوی ناوبری، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش میدهد.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- کوئری زیر را اجرا کنید:
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 کلیک کنید. نتایج پرسوجوی شما در جدول نتایج ظاهر میشود.
۶. ایجاد مدل از راه دور برای جاسازی متن
نتیجه مرحله قبل شامل یک خلاصه تلفیقی متشکل از یک عنوان و کلمات کلیدی است. ما این پاسخ را به جاسازیهایی تبدیل خواهیم کرد که به ما در ایجاد تطابقهای مناسب هنگام اجرای یک پرسوجو کمک میکنند. ما Text Embedding Gecko 003 model از Vertex AI به صورت از راه دور از Spanner استفاده خواهیم کرد.
- در منوی ناوبری، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش میدهد.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- کوئری زیر را اجرا کنید:
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 کلیک کنید. نتایج پرسوجوی شما در جدول نتایج ظاهر میشود.
۷. ایجاد بینشهای مولد از چکیدههای اختراعات
ما یک جدول patents_data_gemini ایجاد خواهیم کرد تا بینشهای تولیدی که با استفاده از مدل Gemini 1.5 Pro که قبلاً ایجاد کردیم، تولید خواهیم کرد را ذخیره کند.
جدول را ایجاد کنید
- در منوی ناوبری، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش میدهد.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- کوئری زیر را اجرا کنید:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- روی Run کلیک کنید. نتایج پرسوجوی شما در جدول نتایج ظاهر میشود.
بینش ایجاد کنید
برای پر کردن جدول با بینشهای مولد، توصیه میشود از برنامهای استفاده کنید که از روش نوشتن دستهای یا جهش استفاده میکند. برای این آزمایشگاه کد، کوئری 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
));
توجه: اگر در این مرحله با خطای Quota Exceeded مواجه شدید (که در مورد اعتبارهای بدون حاشیه کوچک محتمل است)، سعی کنید از درج صرف نظر کنید و فقط کوئری select را در بخش راهحل زیر اجرا کنید.
بخش راهکارهای مقابله:
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;
نتیجه باید مشابه تصویر بالا باشد.
۸. ایجاد جاسازیها برای بینشهای تولید شده
پس از پر کردن بینشها در جدول خود، اکنون میتوانیم از این بینشها برای تولید جاسازیها استفاده کنیم. این جاسازیها به ما کمک میکنند تا به تطابق دقیق کلمات کلیدی تکیه نکنیم، بلکه به تولید نتایج بر اساس شباهتهای مفهومی کمک میکنند.
توجه: اگر در مرحله قبل کوئری بخش راه حل را اجرا کردید، میتوانید از این مرحله صرف نظر کرده و در این مرحله نیز به کوئری بخش راه حل بروید.
برای تولید جاسازیها، کوئری زیر را اجرا کنید:
- در منوی ناوبری، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش میدهد.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- برای ایجاد جدول
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;
این باید همان نتایجی را که در تصویر بالا نشان داده شده است، به همراه داشته باشد.
۹. برای جستجوی برداری آماده شوید
اکنون که جاسازیهای متنی را ایجاد کردهایم، میتوانیم برنامه وب خود را برای انجام جستجوهای بردار شباهت آماده کنیم. در این آزمایشگاه کد، ما در حال ایجاد یک برنامه وب هستیم که شامل منطق ارائه نتایج جستجو بر اساس قابلیت جستجوی شباهت K-نزدیکترین همسایه است. میتوانید از این مجموعه داده آماده شده با یک برنامه جستجو برای تجسم نحوه نمایش نتایج جستجو استفاده کنید.
برای آزمایشگاه کد خود، یک پرسوجوی نمونه اجرا خواهیم کرد که به دنبال یک اعلان میگردد، نتایج را بر اساس زمینه تولید میکند و نتایج را به 10 ورودی محدود میکند.
کوئری زیر را اجرا کنید:
- در منوی ناوبری، روی Spanner Studio کلیک کنید. پنجره Explorer لیستی از اشیاء موجود در پایگاه داده شما را نمایش میدهد.
- با کلیک روی تب New SQL editor، یک تب جدید باز کنید.
- برای ایجاد جدول
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 کلیک کنید. نتایج پرسوجوی شما در جدول نتایج ظاهر میشود.
توجه: اگر به دلیل خطاهای سهمیهبندی در یکی از دستورات درج اولیه، از کوئریهای بخش راهحل استفاده کردهاید، میتوانید از تمام مراحل دیگر صرف نظر کنید و کوئری زیر را مستقیماً اجرا کنید تا نتایج انجام جستجوی نزدیکترین همسایه روی جاسازیهای برداری در پایگاه داده 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 مورد منطبق با prompt ما استفاده میکند.
نتایج زیر مشاهده میشود:

نتایجی که تولید میشوند از نظر محتوایی کاملاً به عبارتی که بخشی از پرسوجو بوده است، نزدیک هستند.
۱۰. تمیز کردن
برای جلوگیری از تحمیل هزینه به حساب Google Cloud خود برای منابع استفاده شده در این پست، این مراحل را دنبال کنید:
- در کنسول گوگل کلود، به صفحه مدیریت منابع بروید.
- در لیست پروژهها، پروژهای را که میخواهید حذف کنید انتخاب کنید و سپس روی حذف کلیک کنید. اگر نمیخواهید پروژه را حذف کنید، کافیست نمونهای را که در Spanner ایجاد کردهاید، حذف کنید.
- در کادر محاورهای، شناسه پروژه را تایپ کنید و سپس برای حذف پروژه، روی خاموش کردن کلیک کنید.
۱۱. تبریک
تبریک! شما با موفقیت جستجوی شباهت را با استفاده از جستجوی برداری داخلی Spanner انجام دادید. علاوه بر این، دیدید که کار با مدلهای جاسازی و LLM برای ارائه قابلیت هوش مصنوعی مولد به طور مستقیم با استفاده از SQL چقدر آسان است.
بعدش چی؟
برای کسب اطلاعات بیشتر در مورد ویژگی نزدیکترین همسایه دقیق (جستجوی برداری KNN) در Spanner، به آدرس زیر مراجعه کنید: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors
همچنین میتوانید اطلاعات بیشتری در مورد نحوه انجام پیشبینیهای آنلاین با SQL با استفاده از ادغام VertexAI Spanner را در اینجا بخوانید: https://cloud.google.com/spanner/docs/ml