1. نظرة عامة
في مختلف المجالات، تشكّل أبحاث براءات الاختراع أداة أساسية لفهم المشهد التنافسي وتحديد فرص الترخيص أو الاستحواذ المحتملة وتجنُّب انتهاك براءات الاختراع الحالية.
إنّ البحث عن براءات الاختراع واسع ومعقد. إنّ البحث في عدد لا يحصى من الملخصات الفنية للعثور على الابتكارات ذات الصلة هو مهمة شاقة. غالبًا ما تكون عمليات البحث التقليدية المستندة إلى الكلمات الرئيسية غير دقيقة وتستغرق وقتًا طويلاً. النُبذ الطويلة والمعقدة، ما يجعل من الصعب فهم الفكرة الأساسية بسرعة ويمكن أن يؤدي ذلك إلى عدم عثور الباحثين على براءات اختراع رئيسية أو إضاعة الوقت في نتائج غير ملائمة.
الهدف
في هذا الإصدار التجريبي من أداة الترميز، سنعمل على تسريع عملية البحث عن براءات الاختراع وجعلها أكثر سهولة ودقة من خلال الاستفادة من Spanner وGemini 1.0 Pro و"العناصر المضمّنة" و"بحث المتجهات".
ما ستُنشئه
كجزء من هذا الدرس التطبيقي، عليك تنفيذ ما يلي:
- إنشاء مثيل Spanner
- تحميل مجموعات بيانات براءات الاختراع المتاحة للجميع من Google
- إنشاء نموذج عن بُعد لملفات نصية تم تضمينها باستخدام نموذج Gemini 1.0 Pro
- إنشاء إحصاءات توليدية من مجموعة البيانات المحمَّلة
- إنشاء عمليات تضمين من الإحصاءات
- إصدار طلبات بحث تستند إلى التشابه في مجموعة البيانات
يمثّل الرسم البياني التالي تدفّق البيانات والخطوات المُتعلّقة بالتنفيذ.
المتطلبات
2. قبل البدء
إنشاء مشروع
- في Google Cloud Console، في صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google Cloud أو أنشِئه.
- تأكَّد من تفعيل الفوترة لمشروعك على Cloud. تعرَّف على كيفية التحقّق مما إذا كانت الفوترة مفعَّلة في مشروع .
- ستستخدم Cloud Shell، وهي بيئة سطر أوامر تعمل في Google Cloud ومزوّدة مسبقًا بـ bq. انقر على "تفعيل Cloud Shell" في أعلى "وحدة تحكّم Google Cloud".
- بعد الاتصال بخدمة Cloud Shell، تأكَّد من أنّك سبق أن تم مصادقة حسابك وأنّه تم ضبط المشروع على معرّف مشروعك باستخدام الأمر التالي:
gcloud auth list
- شغِّل الأمر التالي في Cloud Shell للتأكّد من أنّ الأمر gcloud يعرف مشروعك.
gcloud config list project
- إذا لم يتم ضبط مشروعك، استخدِم الأمر التالي لضبطه:
gcloud config set project <YOUR_PROJECT_ID>
- تأكَّد من تفعيل واجهات برمجة التطبيقات 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
- أنشئ مثيل Spanner باسم
spanner-vertex
.
gcloud spanner instances create spanner-vertex \
--config=regional-us-central1 \
--description=spanner-vertex \
--nodes=1
إنشاء قاعدة بيانات
- في Google Cloud Console، افتح صفحة Spanner.
- اختَر مثيل
spanner-vertex
من القائمة. - ضمن "قواعد البيانات"، انقر على إنشاء قاعدة بيانات.
- اضبط اسم قاعدة البيانات على patents.
- انقر على إنشاء لإنشاء قاعدة البيانات.
إنشاء جدول
- في Google Cloud Console، افتح صفحة 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 Console، افتح صفحة Spanner.
- اختَر مثيل
spanner-vertex
من القائمة. - اختَر قاعدة بيانات
patents
. - في قائمة التنقّل، انقر على Spanner Studio. تعرِض لوحة المستكشف قائمة بالكائنات في قاعدة بياناتك.
- افتح علامة تبويب جديدة بالنقر على علامة تبويب "محرر SQL" جديدة.
- انسخ عبارة طلب البحث
insert
من النص البرمجيinsert_into_patents_data.sql
في المحرِّر. يمكنك نسخ 50 إلى 100 عبارة إدراج لإجراء عرض توضيحي سريع لهذه الحالة. - انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
5- إنشاء نموذج جهاز تحكّم عن بُعد لجهاز Gemini 1.0 Pro
بعد تحميل بيانات براءات الاختراع إلى قاعدة البيانات، سننشئ نموذجًا عن بُعد يستخدم نموذج Gemini 1.0 Pro Vertex AI لإنشاء مجموعة ملخّصة من العناوين والكلمات الرئيسية.
نفِّذ الأمر DDL التالي في محرِّر Spanner Studio:
- في قائمة التنقّل، انقر على Spanner Studio. تعرِض لوحة المستكشف قائمة بالكائنات في قاعدة بياناتك.
- افتح علامة تبويب جديدة بالنقر على علامة تبويب "محرر 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
);
- انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
6- إنشاء نموذج عن بُعد لعمليات تضمين النصوص
تتضمّن نتيجة الخطوة السابقة ملخّصًا موحّدًا يتألّف من عنوان وكلمات رئيسية. سنحوّل هذا الردّ إلى عناصر إدراج ستساعدنا في إنشاء مطابقات مناسبة عند تنفيذ طلب بحث. سنستخدم Text Embedding Gecko 003 model
من Vertex AI عن بُعد من Spanner.
- في قائمة التنقّل، انقر على Spanner Studio. تعرِض لوحة المستكشف قائمة بالكائنات في قاعدة بياناتك.
- افتح علامة تبويب جديدة بالنقر على علامة تبويب "محرر 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');
- انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
7- إنشاء إحصاءات توليدية من ملخّصات براءات الاختراع
سننشئ جدول patents_data_gemini
لتخزين الإحصاءات التوليدية التي سننشئها باستخدام نموذج Gemini 1.5 Pro الذي أنشأناه سابقًا.
أنشئ الجدول.
- في قائمة التنقّل، انقر على Spanner Studio. تعرِض لوحة المستكشف قائمة بالكائنات في قاعدة بياناتك.
- افتح علامة تبويب جديدة بالنقر على علامة تبويب "محرر SQL" جديدة.
- نفِّذ الاستعلام التالي:
CREATE TABLE patents_data_gemini (id string(100), gemini_response STRING(MAX)) PRIMARY KEY (id);
- انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
إنشاء إحصاءات
لملء الجدول بإحصاءات إبداعية، ننصحك باستخدام تطبيق يستخدم طريقة الكتابة المجمّعة أو طريقة التعديلات. في هذا الدليل التعليمي، سنُجري استعلام 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;
تظهر النتائج التالية:
ملاحظة: إذا أجريت طلب البحث في قسم الحلّ البديل، استبدِل اسم الجدول في طلب البحث أعلاه بطلب البحث في قسم الحلّ البديل. لذلك، عليك تنفيذ ما يلي بدلاً من ذلك:
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. تعرِض لوحة المستكشف قائمة بالكائنات في قاعدة بياناتك.
- افتح علامة تبويب جديدة بالنقر على علامة تبويب "محرر SQL" جديدة.
- شغِّل طلب البحث التالي لإنشاء جدول
patents_data_embeddings
.
CREATE TABLE patents_data_embeddings (id string(100), patents_embeddings ARRAY<FLOAT64>) PRIMARY KEY (id);
- انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
- نفِّذ طلب البحث التالي لإنشاء النماذج المصغّرة.
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));
- انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
مراقبة النتائج
يتضمّن الجدول عمليات إدراج تم إنشاؤها للعنوان والنص الملخّص.
لننفِّذ الاستعلام التالي للتحقّق من النتائج:
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. الاستعداد للبحث عن المتجهات
بعد أن أنشأنا نماذج إدراج نصية، يمكننا إعداد تطبيق الويب ليكون جاهزًا لإجراء عمليات بحث باستخدام متجهات التشابه. في هذا الدليل التعليمي حول رموز البرامج، سننشئ تطبيق ويب يتضمّن منطق تقديم نتائج البحث استنادًا إلى ميزة "البحث عن التشابه" باستخدام خوارزمية الجار الأقرب. يمكنك استخدام مجموعة البيانات هذه المُعدّة مع تطبيق بحث لعرض كيفية ظهور نتائج البحث.
في ورشة رموزنا البرمجية، سننفّذ نموذج طلب بحث يبحث عن طلب وينشئ نتائج استنادًا إلى السياق ويحدّ من النتائج إلى 10 إدخالات.
نفِّذ الاستعلام التالي:
- في قائمة التنقّل، انقر على Spanner Studio. تعرِض لوحة المستكشف قائمة بالكائنات في قاعدة بياناتك.
- افتح علامة تبويب جديدة بالنقر على علامة تبويب "محرر 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;
- انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
ملاحظة: إذا استخدمت طلبات البحث في قسم الحلّ البديل بسبب أخطاء الحصة في أحد أوائل عبارات الإدراج، يمكنك تخطّي جميع الخطوات الأخرى وتنفيذ طلب البحث أدناه مباشرةً لمراقبة نتائج إجراء بحث أقرب العناصر المتشابهة على عمليات إدراج المتجهات في قاعدة بيانات 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 مطابقات لطلب البحث.
تظهر النتائج التالية:
تكون النتائج التي يتم إنشاؤها قريبة جدًا من الطلب الذي كان جزءًا من طلب البحث من حيث السياق.
10. تَنظيم
لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المستخدَمة في هذه المشاركة، اتّبِع الخطوات التالية:
- في وحدة تحكّم Google Cloud، انتقِل إلى صفحة إدارة الموارد.
- في قائمة المشاريع، اختَر المشروع الذي تريد حذفه، ثم انقر على حذف. إذا كنت لا تريد حذف المشروع، ما عليك سوى حذف المثيل الذي أنشأته في Spanner.
- في مربّع الحوار، اكتب رقم تعريف المشروع، ثم انقر على إيقاف لحذف المشروع.
11. تهانينا
مبروك، لقد أجريت بنجاح عملية بحث عن التشابه باستخدام ميزة البحث المتجه المضمّنة في Spanner. بالإضافة إلى ذلك، تعرّفت على مدى سهولة العمل مع نماذج التضمين والنماذج اللغوية الكبيرة لتوفير وظائف الذكاء الاصطناعي التوليدي مباشرةً باستخدام SQL.
ما هي الخطوات التالية؟
يمكنك الاطّلاع على مزيد من المعلومات عن ميزة "أقرب العناصر المتشابهة" الدقيقة في Spanner (بحث متجهات KNN) على الرابط التالي: https://cloud.google.com/spanner/docs/find-k-nearest-neighbors.
يمكنك أيضًا الاطّلاع على مزيد من المعلومات حول كيفية إجراء توقّعات على الإنترنت باستخدام لغة الاستعلامات البنيوية (SQL) من خلال دمج VertexAI في Spanner على هذا الرابط: https://cloud.google.com/spanner/docs/ml