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

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

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: مايو 24, 2024
account_circleتأليف: Author: Abirami Sukumaran, Editor: Shweta Shetye

1. نظرة عامة

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

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

الهدف

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

ما الذي ستقوم ببنائه

كجزء من هذا التمرين المعملي، سوف:

  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، افتح صفحة Spanner.
  2. اختَر المثيل spanner-vertex من القائمة.
  3. ضمن "قواعد البيانات"، انقر على إنشاء قاعدة بيانات.
  4. تعيين اسم قاعدة البيانات على براءات الاختراع.
  5. انقر على إنشاء لإنشاء قاعدة البيانات.

إنشاء جدول

  1. في وحدة تحكُّم Google Cloud، افتح صفحة 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، افتح صفحة Spanner.
  2. اختَر المثيل spanner-vertex من القائمة.
  3. اختَر قاعدة بيانات "patents".
  4. في قائمة التنقّل، انقر على Spanner Studio. يعرض جزء Explorer قائمة بالكائنات في قاعدة البيانات.
  5. افتح علامة تبويب جديدة بالنقر على علامة تبويب محرر SQL الجديد.
  6. انسخ عبارة طلب البحث insert من النص البرمجي insert_into_patents_data.sql في المحرِّر. يمكنك نسخ 50-100 جملة Insert لعرض عرض توضيحي سريع لحالة الاستخدام هذه.
  7. انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.

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

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

شغّل أمر DDL التالي في Spanner Studio Editor (محرِّر Spanner Studio):

  1. في قائمة التنقّل، انقر على Spanner Studio. يعرض جزء Explorer قائمة بالكائنات في قاعدة البيانات.
  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. يعرض جزء Explorer قائمة بالكائنات في قاعدة البيانات.
  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. يعرض جزء Explorer قائمة بالكائنات في قاعدة البيانات.
  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. يعرض جزء Explorer قائمة بالكائنات في قاعدة البيانات.
  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. يعرض جزء Explorer قائمة بالكائنات في قاعدة البيانات.
  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، انتقِل إلى صفحة إدارة الموارد.
  2. في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف. وإذا كنت لا تريد حذف المشروع، ما عليك سوى حذف المثيل الذي أنشأته في Spanner.
  3. في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف التشغيل لحذف المشروع.

11. تهانينا

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

ما هي الخطوات التالية؟

تعرَّف على مزيد من المعلومات حول ميزة الجار الأقرب لـ Spanner هنا: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors

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