إنشاء تطبيق بحث براءات الاختراع باستخدام Spanner وVector Search & Gemini 1.0 Pro

1. نظرة عامة

في مختلف الصناعات، يُعدّ البحث عن براءات الاختراع أداة مهمة لفهم المشهد التنافسي وتحديد فرص الترخيص أو الاستحواذ المحتملة وتجنُّب انتهاك براءات الاختراع الحالية.

إنّ البحث عن براءات الاختراع واسع النطاق ومعقّد. إنّ البحث في عدد لا يحصى من الملخّصات الفنية للعثور على الابتكارات المناسبة هو مهمة شاقة. غالبًا ما تكون عمليات البحث التقليدية المستندة إلى الكلمات الرئيسية غير دقيقة وتستغرق وقتًا طويلاً. تكون الملخّصات طويلة وفنية، ما يجعل من الصعب فهم الفكرة الأساسية بسرعة. وقد يؤدي ذلك إلى عدم عثور الباحثين على براءات الاختراع الرئيسية أو إضاعة الوقت في نتائج غير ذات صلة.

الهدف

في هذا الدرس التطبيقي حول الترميز، سنعمل على جعل عملية البحث عن براءات الاختراع أسرع وأكثر سهولة ودقة من خلال الاستفادة من Spanner وGemini 1.0 Pro وEmbeddings وVector Search.

ما ستنشئه

في هذا الدرس التطبيقي، ستنفّذ ما يلي:

  1. إنشاء مثيل Spanner
  2. تحميل مجموعة بيانات متاحة للجميع من "براءات الاختراع من Google"
  3. إنشاء نموذج بعيد لتضمينات النص باستخدام نموذج Gemini 1.0 Pro
  4. إنشاء إحصاءات توليدية من مجموعة البيانات المحمَّلة
  5. إنشاء تضمينات من الإحصاءات
  6. إصدار طلبات بحث عن التشابه في المشاكل مقابل مجموعة البيانات

يمثّل المخطّط البياني التالي تدفّق البيانات والخطوات المتّبعة في عملية التنفيذ.

14cfdde5e24258a.png

المتطلبات

  • متصفّح، مثل Chrome أو Firefox
  • مشروع على السحابة الإلكترونية من Google Cloud تم تفعيل الفوترة فيه

2. قبل البدء

إنشاء مشروع

  1. في Google Cloud Console، في صفحة اختيار المشروع، اختَر أو أنشِئ مشروعًا على Google Cloud.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع .
  3. ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومحمّلة مسبقًا بأداة bq. انقر على "تفعيل Cloud Shell" في أعلى "وحدة تحكّم Google Cloud".

صورة زر تفعيل Cloud Shell

  1. بعد الاتصال بـ Cloud Shell، يمكنك التأكّد من أنّك قد تم التحقّق من هويتك وأنّه تم ضبط المشروع على رقم تعريف مشروعك باستخدام الأمر التالي:
gcloud auth list
  1. نفِّذ الأمر التالي في Cloud Shell للتأكّد من أنّ أمر gcloud يعرف مشروعك.
gcloud config list project
  1. إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>
  1. تأكَّد من تفعيل واجهتَي برمجة التطبيقات 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 وطريقة استخدامها.

3- إعداد قاعدة بيانات Spanner

لننشئ مثيلاً وقاعدة بيانات وجدولاً في Spanner سيتم تحميل مجموعة بيانات براءات الاختراع فيها.

إنشاء مثيل Spanner

  1. أنشئ مثيل Spanner باسم spanner-vertex.
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. تحميل بيانات براءات الاختراع إلى قاعدة البيانات

سيتم استخدام مجموعات البيانات العامة لبراءات الاختراع من Google على BigQuery كمجموعة البيانات الخاصة بنا. سنستخدم 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 من النص البرمجي insert_into_patents_data.sql في المحرّر. يمكنك نسخ 50 إلى 100 عبارة إدراج للحصول على عرض توضيحي سريع لحالة الاستخدام هذه.
  7. انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.

5- إنشاء نموذج عن بُعد لـ Gemini 1.0 Pro

بعد تحميل بيانات براءات الاختراع إلى قاعدة بيانات، سننشئ نموذجًا عن بُعد يستخدم نموذج Gemini 1.0 Pro Vertex AI لإنشاء مجموعة ملخّصة من العناوين والكلمات الرئيسية.

نفِّذ أمر DDL التالي في "محرّر Spanner Studio":

  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. إنشاء نموذج بعيد لتضمينات النص

تتضمّن نتيجة الخطوة السابقة ملخّصًا موحّدًا يتألف من عنوان وكلمات رئيسية. سنحوّل هذه الاستجابة إلى تضمينات تساعدنا في إنشاء نتائج مطابقة مناسبة عند تنفيذ طلب بحث. سنستخدم Text Embedding Gecko 003 model من Vertex AI عن بُعد من Spanner.

  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 التالي 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
));

ملاحظة: إذا ظهر لك الخطأ "تجاوزت الحصة" في هذه الخطوة (وهو أمر محتمل في حال توفّر رصيد مجاني بهامش صغير)، حاوِل تخطّي عملية الإدراج وتنفيذ طلب البحث "اختيار" فقط في قسم الحلّ البديل أدناه.

قسم الحلول البديلة:

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 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- الاستعداد للبحث المتّجه

بعد أن أنشأنا تضمينات نصية، يمكننا الآن إعداد تطبيق الويب ليكون جاهزًا لإجراء عمليات بحث عن المتجهات المتشابهة. في هذا الدرس التطبيقي حول الترميز، سننشئ تطبيق ويب يتضمّن منطقًا لعرض نتائج البحث استنادًا إلى إمكانية البحث عن التشابه باستخدام خوارزمية الجار الأقرب. يمكنك استخدام مجموعة البيانات المُعدّة هذه مع تطبيق بحث لتصوُّر طريقة ظهور نتائج البحث.

في هذا الدرس التطبيقي حول الترميز، سننفّذ طلب بحث نموذجيًا يبحث عن طلب، وينشئ نتائج استنادًا إلى السياق، ويحصر النتائج في 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

يمكنك أيضًا الاطّلاع على مزيد من المعلومات حول كيفية إجراء توقّعات على الإنترنت باستخدام SQL من خلال دمج VertexAI في Spanner هنا: https://cloud.google.com/spanner/docs/ml