1. نظرة عامة
في مختلف المجالات، تشكّل أبحاث براءات الاختراع أداة أساسية لفهم المشهد التنافسي وتحديد فرص الترخيص أو الاستحواذ المحتملة وتجنُّب انتهاك براءات الاختراع الحالية.
أبحاث براءات الاختراع واسعة ومعقدة. إنّ البحث في ملخّصات فنية لا حصر لها للعثور على الابتكارات ذات الصلة هو مهمة شاقة. غالبًا ما تكون عمليات البحث التقليدية المعتمدة على الكلمات الرئيسية غير دقيقة وتستغرق وقتًا طويلاً. الملخصات طويلة وتقنية، مما يجعل من الصعب استيعاب الفكرة الأساسية بسرعة. وهذا قد يؤدي إلى فقدان الباحثين لبراءات اختراع رئيسية أو إهدار الوقت في نتائج غير ذات صلة.
تكمن الطريقة السرية وراء هذه الثورة في بحث Vector. بدلاً من الاعتماد على مطابقة الكلمات الرئيسية البسيطة، يحوّل البحث بالاستناد إلى المتجهات النص إلى تمثيلات رقمية (إدراج). ويسمح لنا ذلك بالبحث بناءً على معنى طلب البحث، وليس فقط الكلمات المحدَّدة المستخدَمة. في عالم البحث عن الأدب، يُعد هذا نقطة تحوّل. لنفترض أنّك عثرت على براءة اختراع "لجهاز مراقبة معدل ضربات القلب قابل للارتداء" حتى إذا لم يتم استخدام العبارة نفسها في المستند.
الهدف
في هذا الدرس التطبيقي حول الترميز، سنعمل على جعل عملية البحث عن براءات الاختراع أسرع وأسهل وأكثر دقة إلى حد كبير، وذلك من خلال الاستفادة من تطبيق AlloyDB، وإضافة ملفات pgect، والإصدار 1.5 Pro من Gemini، وميزات التضمين وميزة "بحث المتجهات" المتوفّرة.
ما ستُنشئه
كجزء من هذا الدرس التطبيقي، عليك تنفيذ ما يلي:
- إنشاء مثيل AlloyDB وتحميل بيانات مجموعة بيانات Patents Public
- تفعيل الإضافات الخاصة بنموذج الذكاء الاصطناعي التوليدي وpgvector في AlloyDB
- إنشاء إدراجات من الإحصاءات
- إجراء بحث في الوقت الفعلي عن تشابه جيب التمام لنص بحث المستخدِم
- نشر الحلّ في دوالّ Cloud بدون خادم
يمثل الرسم البياني التالي تدفق البيانات والخطوات المتضمنة في التنفيذ.
High level diagram representing the flow of the Patent Search Application with AlloyDB
المتطلبات
2. قبل البدء
إنشاء مشروع
- في Google Cloud Console، في صفحة أداة اختيار المشاريع، اختَر مشروعًا على Google 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>
- تفعيل واجهات برمجة التطبيقات المطلوبة يمكنك استخدام الأمر gcloud في الوحدة الطرفية في Cloud Shell:
gcloud services enable alloydb.googleapis.com \
compute.googleapis.com \
cloudresourcemanager.googleapis.com \
servicenetworking.googleapis.com \
run.googleapis.com \
cloudbuild.googleapis.com \
cloudfunctions.googleapis.com \
aiplatform.googleapis.com
يمكنك استخدام وحدة التحكّم للبحث عن كل منتج أو استخدام هذا الرابط كبديل لأمر gcloud.
يمكنك الرجوع إلى المستندات حول أوامر gcloud واستخدامها.
3- إعداد قاعدة بيانات AlloyDB
لننشئ مجموعة ومثيلًا وجدولًا في AlloyDB حيث سيتم تحميل مجموعة بيانات براءات الاختراع.
إنشاء عناصر AlloyDB
أنشئ مجموعة ومثيلًا بمعرّف المجموعة "patent-cluster
" وكلمة المرور "alloydb
" ومتوافقًا مع PostgreSQL 15 والمنطقة "us-central1
"، مع ضبط الشبكة على "default
". اضبط معرّف المثيل على "patent-instance
". انقر على "إنشاء مجموعة". يمكنك الاطّلاع على تفاصيل إنشاء مجموعة في هذا الرابط: https://cloud.google.com/alloydb/docs/cluster-create.
إنشاء جدول
يمكنك إنشاء جدول باستخدام جملة DDL أدناه في AlloyDB Studio:
CREATE TABLE patents_data ( id VARCHAR(25), type VARCHAR(25), number VARCHAR(20), country VARCHAR(2), date VARCHAR(20), abstract VARCHAR(300000), title VARCHAR(100000), kind VARCHAR(5), num_claims BIGINT, filename VARCHAR(100), withdrawn BIGINT) ;
تفعيل الإضافات
لإنشاء تطبيق بحث براءات الاختراع، سنستخدم الامتدادين pgvector وgoogle_ml_integration. تتيح لك إضافة pgvector تخزين عمليات تضمين المتجهات والبحث عنها. توفّر إضافة google_ml_integration الدوالّ التي تستخدمها للوصول إلى نقاط نهاية التوقّعات في Vertex AI للحصول على توقّعات في SQL. فعِّل هذه الإضافات عن طريق تشغيل الروابط المؤدّية إلى محتوى (DDL) التالية:
CREATE EXTENSION vector;
CREATE EXTENSION google_ml_integration;
منح الإذن
شغِّل العبارة أدناه لمنح الإذن بتنفيذ الدالة "embedding":
GRANT EXECUTE ON FUNCTION embedding TO postgres;
منح مستخدم Vertex AI دور في حساب خدمة AlloyDB
من وحدة تحكّم إدارة الهوية وإمكانية الوصول في Google Cloud، امنح حساب خدمة AlloyDB (الذي يبدو على النحو التالي: service-<<PROJECT_NUMBER>>@gcp-sa-alloydb.iam.gserviceaccount.com) إذن الوصول إلى الدور "مستخدم Vertex AI". سيتضمن PROJECT_NUMBER رقم مشروعك.
بدلاً من ذلك، يمكنك أيضًا منح الإذن بالوصول باستخدام الأمر gcloud:
PROJECT_ID=$(gcloud config get-value project)
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member="serviceAccount:service-$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)")@gcp-sa-alloydb.iam.gserviceaccount.com" \
--role="roles/aiplatform.user"
اضبط الجدول لإضافة عمود متجه لتخزين عمليات التضمين
قم بتشغيل DDL أدناه لإضافة الحقل abstract_embeddings إلى الجدول الذي أنشأناه للتو. سيسمح هذا العمود بتخزين قيم المتجه للنص:
ALTER TABLE patents_data ADD column abstract_embeddings vector(768);
4. تحميل بيانات براءات الاختراع إلى قاعدة البيانات
سيتم استخدام مجموعات البيانات العامة لبراءات اختراع Google على BigQuery كمجموعة بياناتنا. سنستخدم تطبيق AlloyDB Studio لإجراء طلبات البحث. يشتمل مستودع alloydb-pgvector على النص البرمجي insert_into_patents_data.sql
الذي سنشغّله لتحميل بيانات براءة الاختراع.
- في وحدة تحكُّم Google Cloud، افتح صفحة AlloyDB.
- اختَر المجموعة التي تم إنشاؤها حديثًا وانقر على المثيل.
- في قائمة التنقّل في AlloyDB، انقر على AlloyDB Studio. سجِّل الدخول باستخدام بيانات الاعتماد.
- افتح علامة تبويب جديدة من خلال النقر على رمز علامة تبويب جديدة على يسار الصفحة.
- انسخ عبارة طلب البحث
insert
من النص البرمجيinsert_into_patents_data.sql
المذكور أعلاه إلى المحرِّر. يمكنك نسخ 50 إلى 100 عبارة إدراج لإجراء عرض توضيحي سريع لهذه الحالة. - انقر على تشغيل. تظهر نتائج طلب البحث في جدول النتائج.
5- إنشاء عمليات تضمين لبيانات براءات الاختراع
لنختبر أولاً دالة التضمين عن طريق تشغيل نموذج الاستعلام التالي:
SELECT embedding( 'textembedding-gecko@003', 'AlloyDB is a managed, cloud-hosted SQL database service.');
من المفترض أن يعرض هذا المتجه المُدمَج، الذي يبدو مثل صفيف من الأعداد العشرية، لعينة النص في طلب البحث. يبدو كالتالي:
تحديث حقل abstract_embeddings Vector
شغِّل طلب البحث المحدَّد ببيانات نموذجية (DML) أدناه لتعديل ملخّصات براءات الاختراع في الجدول باستخدام عمليات التضمين المقابلة:
UPDATE patents_data set abstract_embeddings = embedding( 'textembedding-gecko@003', abstract);
6- إجراء بحث في Vector
بعد أن أصبح الجدول والبيانات والعناصر المضمّنة جاهزة، لننفِّذ "البحث بالاستناد إلى المتجهات" في الوقت الفعلي عن نص بحث المستخدم. يمكنك اختبار ذلك من خلال تنفيذ الاستعلام أدناه:
SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', 'A new Natural Language Processing related Machine Learning Model')::vector LIMIT 10;
في هذا الطلب،
- نص بحث المستخدم هو: "نموذج جديد لتعلُّم الآلة ذي صلة لمعالجة اللغات الطبيعية".
- ونعمل على تحويلها إلى تضمينات في طريقة التضمين() باستخدام النموذج: textembedding-gecko@003.
- يشير "<=>" إلى استخدام طريقة المسافة "تشابه جيب التمام".
- نقوم بتحويل نتيجة طريقة التضمين إلى نوع متجه لجعلها متوافقة مع المتجهات المخزنة في قاعدة البيانات.
- يشير LIMIT 10 إلى أنّنا نختار أقرب 10 نتائج تتطابق مع نص البحث.
وفي ما يلي النتيجة:
كما يمكنك ملاحظة ذلك في النتائج، فإنّ المطابقات قريبة جدًا من نص البحث.
7- نقل التطبيق إلى الويب
هل أنت مستعد لنقل هذا التطبيق إلى الويب؟ يُرجى اتّباع الخطوات التالية:
- انتقِل إلى "محرِّر Cloud Shell"، وانقر على "Cloud Code - تسجيل الدخول" في أسفل يمين (شريط الحالة) في المحرر. اختَر مشروعك الحالي على Google Cloud الذي تم فيه تفعيل الفوترة، وتأكَّد من تسجيل الدخول إلى المشروع نفسه من Gemini أيضًا (في أعلى يسار شريط الحالة).
- انقر على رمز Cloud Code وانتظِر إلى أن يظهر مربّع حوار Cloud Code. حدد تطبيق جديد وفي النافذة المنبثقة "Create New Application" (إنشاء تطبيق جديد)، حدد تطبيق Cloud Functions:
في الصفحة 2/2 من النافذة المنبثقة "Create New Application" (إنشاء تطبيق جديد)، حدد Java: Hello World وأدخل اسم مشروعك باسم "alloydb-pgvector" في موقعك المفضل وانقر على "حسنًا":
- في بنية المشروع الناتجة، ابحث عن pom.xml واستبدِله بمحتوى من ملف المستودع. يجب أن تتضمّن هذه التبعيات بالإضافة إلى بضعة عناصر أخرى:
- استبدِل ملف HelloWorld.java بالمحتوى من ملف repo.
لاحظ أنه يجب عليك استبدال القيم التالية بالقيم الفعلية:
String ALLOYDB_DB = "postgres";
String ALLOYDB_USER = "postgres";
String ALLOYDB_PASS = "*****";
String ALLOYDB_INSTANCE_NAME = "projects/<<YOUR_PROJECT_ID>>/locations/us-central1/clusters/<<YOUR_CLUSTER>>/instances/<<YOUR_INSTANCE>>";
//Replace YOUR_PROJECT_ID, YOUR_CLUSTER, YOUR_INSTANCE with your actual values
تجدر الإشارة إلى أنّ الدالة تتوقّع أن يكون نص البحث مَعلمة إدخال بالمفتاح "بحث"، وفي عملية التنفيذ هذه، سنعرض مطابقة واحدة فقط أقرب من قاعدة البيانات:
// Get the request body as a JSON object.
JsonObject requestJson = new Gson().fromJson(request.getReader(), JsonObject.class);
String searchText = requestJson.get("search").getAsString();
//Sample searchText: "A new Natural Language Processing related Machine Learning Model";
BufferedWriter writer = response.getWriter();
String result = "";
HikariDataSource dataSource = AlloyDbJdbcConnector();
try (Connection connection = dataSource.getConnection()) {
//Retrieve Vector Search by text (converted to embeddings) using "Cosine Similarity" method
try (PreparedStatement statement = connection.prepareStatement("SELECT id || ' - ' || title as literature FROM patents_data ORDER BY abstract_embeddings <=> embedding('textembedding-gecko@003', '" + searchText + "' )::vector LIMIT 1")) {
ResultSet resultSet = statement.executeQuery();
resultSet.next();
String lit = resultSet.getString("literature");
result = result + lit + "\n";
System.out.println("Matching Literature: " + lit);
}
writer.write("Here is the closest match: " + result);
}
- لتفعيل "دالة Cloud" التي أنشأتها للتو، شغِّل الأمر التالي من الوحدة الطرفية Cloud Shell. تذكَّر الانتقال إلى مجلد المشروع المقابل أولاً باستخدام الأمر:
cd alloydb-pgvector
بعد ذلك، نفِّذ الأمر التالي:
gcloud functions deploy patent-search --gen2 --region=us-central1 --runtime=java11 --source=. --entry-point=cloudcode.helloworld.HelloWorld --trigger-http
خطوة مهمة:
بعد البدء في النشر، من المفترض أن تتمكّن من الاطّلاع على الدوال في وحدة تحكّم وظائف Cloud Runs على Google. ابحث عن الدالة التي تم إنشاؤها حديثًا وافتحها، وعدِّل الإعدادات وغيِّر ما يلي:
- الانتقال إلى "وقت التشغيل" و"الإصدار" و"عمليات الربط" وإعدادات الأمان
- زيادة مهلة الانتظار إلى 180 ثانية
- الانتقال إلى علامة التبويب "الروابط":
- ضمن إعدادات الدخول، تأكَّد من "السماح بجميع الزيارات" .
- ضمن إعدادات "الخروج"، انقر على القائمة المنسدلة "الشبكة" واختَر "إضافة موصل VPC جديد" واتّبِع التعليمات التي تظهر في مربّع الحوار المنبثق:
- أدخِل اسمًا لموصِّل VPC وتأكَّد من أنّ المنطقة هي نفسها التي تستخدمها في المثيل. اترك قيمة "الشبكة" على الإعداد التلقائي واضبط "الشبكة الفرعية" على "نطاق IP مخصّص" باستخدام نطاق IP 10.8.0.0 أو أي نطاق مشابه متاح.
- وسِّع عرض إعدادات الرصد وتأكَّد من ضبط الإعدادات على ما يلي بالضبط:
- انقر على "إنشاء" وسيتم إدراج هذا الموصِّل في إعدادات الخروج الآن.
- تحديد الموصل الذي تم إنشاؤه حديثًا
- اختَر توجيه جميع الزيارات من خلال موصِّل VPC هذا.
8. اختبار التطبيق
بعد نشرها، من المفترض أن تظهر لك نقطة النهاية بالتنسيق التالي:
https://us-central1-YOUR_PROJECT_ID.cloudfunctions.net/patent-search
يمكنك اختباره من وحدة Cloud Shell الطرفية عن طريق تنفيذ الأمر التالي:
gcloud functions call patent-search --region=us-central1 --gen2 --data '{"search": "A new Natural Language Processing related Machine Learning Model"}'
النتيجة:
يمكنك أيضًا اختبارها من قائمة Cloud Functions. اختَر الدالة المنشورة وانتقِل إلى علامة التبويب "اختبار". في مربّع نص قسم "ضبط الحدث المشغِّل" لطلب json، أدخِل ما يلي:
{"search": "A new Natural Language Processing related Machine Learning Model"}
انقر على زر اختبار الوظيفة ويمكنك مشاهدة النتيجة على الجانب الأيسر من الصفحة:
هذا كل شيء! يمكنك بسهولة إجراء بحث متّجه التشابه باستخدام نموذج التضمينات على بيانات AlloyDB.
9. تَنظيم
لتجنُّب تحصيل رسوم من حسابك على Google Cloud مقابل الموارد المُستخدَمة في هذه المشاركة، يُرجى اتّباع الخطوات التالية:
10. تهانينا
تهانينا! لقد أجريت بنجاح عملية بحث عن التشابه باستخدام AlloyDB وpgvector وVector search. من خلال الجمع بين إمكانات AlloyDB وVertex AI وVector Search، حققنا قفزة عملاقة في جعل عمليات البحث عن المؤلفين متاحة وفعالة ومستندة إلى المعنى الفعلي.