تتيح لك مهمة "إدراج النص" إنشاء تمثيل رقمي لبيانات النص بهدف التقاط معناها الدلالي. توضّح لك هذه التعليمات كيفية استخدام أداة إدراج النصوص في تطبيقات iOS.
يمكنك الاطّلاع على هذه المهمة أثناء تنفيذها من خلال مشاهدة هذا العرض التمهيدي لتطبيق الويب . لمزيد من المعلومات عن الإمكانات والنماذج وخيارات الضبط لهذه المهمة، اطّلِع على نظرة عامة.
مثال على الرمز البرمجي
يوفر مثال التعليمة البرمجية لأداة تضمين النص تنفيذًا أساسيًا لتطبيق iOS الذي يدمج هذه المهمة. يقيّم المثال أوجه التشابه الدلالية بين جزأين من النص، ويتطلب إما جهاز iOS ماديًا أو محاكي iOS.
يمكنك استخدام التطبيق كنقطة بداية لتطبيقك الخاص على iOS، أو الرجوع إليه عند تعديل تطبيق حالي. يمكنك الرجوع إلى مثال رمز "أداة تضمين النصوص" على GitHub.
تنزيل الرمز
توضّح لك التعليمات التالية كيفية إنشاء نسخة محلية من نموذج الرمز باستخدام أداة سطر الأوامر git.
لتنزيل نموذج الرمز البرمجي:
استنسِخ مستودع git باستخدام الأمر التالي:
git clone https://github.com/google-ai-edge/mediapipe-samples
يمكنك اختياريًا ضبط مثيل git لاستخدام ميزة "الفحص الخفيف"، بحيث تتوفّر لديك فقط ملفات مثال تطبيق "أداة تضمين النصوص":
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_embedder/ios/
بعد إنشاء نسخة محلية من رمز المثال، يمكنك تثبيت مكتبة مهام MediaPipe وفتح المشروع باستخدام Xcode وتشغيل التطبيق. للاطّلاع على التعليمات، يمكنك الاطّلاع على دليل الإعداد لنظام التشغيل iOS.
المكونات الرئيسية
تحتوي الملفات التالية على الرمز البرمجي المهم لمثال تطبيق "أداة تضمين النصوص":
- TextEmbedderService.swift: تُستخدَم هذه الوظيفة لإعداد أداة تضمين النصوص وتنفيذ الاستنتاج على بيانات الإدخال.
- ViewController.swift: تُنفِّذ واجهة المستخدم وتُعدِّل النتائج.
ضبط إعدادات الجهاز
يصف هذا القسم الخطوات الرئيسية لإعداد بيئة التطوير و مشاريع الرموز البرمجية لاستخدام أداة "إدراج النصوص". للحصول على معلومات عامة عن إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، يُرجى الاطّلاع على دليل الإعداد لنظام التشغيل iOS.
التبعيات
يستخدم Text Embedder مكتبة MediaPipeTasksText
التي يجب تثبيتها
باستخدام CocoaPods. تتوافق المكتبة مع تطبيقات Swift وObjective-C
ولا تتطلّب أي إعدادات إضافية خاصة باللغة.
للحصول على تعليمات لتثبيت CocoaPods على نظام التشغيل macOS، يُرجى الرجوع إلى دليل تثبيت CocoaPods
.
للحصول على تعليمات حول كيفية إنشاء Podfile
باستخدام المجموعات المتسلسلة اللازمة لتطبيقك، يمكنك الرجوع إلى استخدام
CocoaPods.
أضِف مجموعة MediaPipeTasksText
في Podfile
باستخدام الرمز التالي:
target 'MyTextEmbedderApp' do
use_frameworks!
pod 'MediaPipeTasksText'
end
إذا كان تطبيقك يتضمّن أهداف اختبار الوحدات، يمكنك الرجوع إلى دليل الإعداد لنظام التشغيل
iOS للحصول على معلومات إضافية عن إعداد
Podfile
.
الطراز
تتطلّب مهمة "إدراج النص" من MediaPipe نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. لمزيد من المعلومات عن النماذج المدربة المتاحة لميزة "إدراج النصوص"، اطّلِع على قسم نماذج ضمن النظرة العامة على المهمة.
اختَر نموذجًا ونزِّله وأضِفه إلى دليل مشروعك باستخدام Xcode. للحصول على تعليمات حول كيفية إضافة الملفات إلى مشروع Xcode، يُرجى الاطّلاع على إدارة الملفات والمجلدات في مشروع Xcode.
استخدِم السمة BaseOptions.modelAssetPath
لتحديد مسار الوصول إلى النموذج
في حِزمة تطبيقك. للاطّلاع على مثال على الرمز، يُرجى الاطّلاع على القسم التالي.
إنشاء المهمة
يمكنك إنشاء مهمة "إدراج النص" من خلال استدعاء أحد مُنشئِيها. يقبل مُنشئ
TextEmbedder(options:)
قيمًا لخيارات الضبط
.
إذا لم تكن بحاجة إلى أداة "إدراج نص" تم إعدادها باستخدام خيارات إعداد مخصّصة، يمكنك استخدام أداة إعداد TextEmbedder(modelPath:)
لإنشاء أداة "إدراج نص" باستخدام الخيارات التلقائية. لمزيد من المعلومات حول خيارات الضبط،
يمكنك الاطّلاع على نظرة عامة على الضبط
يوضّح الرمز البرمجي التالي كيفية إنشاء هذه المهمة وضبطها.
Swift
import MediaPipeTasksText
let modelPath = Bundle.main.path(forResource: "model",
ofType: "tflite")
let options = TextEmbedderOptions()
options.baseOptions.modelAssetPath = modelPath
options.quantize = true
let textEmbedder = try TextEmbedder(options: options)
Objective-C
@import MediaPipeTasksText;
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
ofType:@"tflite"];
MPPTextEmbedderOptions *options = [[MPPTextEmbedderOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.quantize = YES;
MPPTextEmbedder *textEmbedder =
[[MPPTextEmbedder alloc] initWithOptions:options error:nil];
خيارات الإعداد
تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات iOS:
اسم الخيار | الوصف | نطاق القيمة | القيمة التلقائية |
---|---|---|---|
l2_normalize |
ما إذا كان يجب تطبيع متجه السمات المعروض باستخدام معيار L2 لا تستخدِم هذا الخيار إلا إذا كان النموذج لا يحتوي على دالّة معالجة برمجية أساسية L2_NORMALIZATION من TFLite. وفي معظم الحالات، يكون هذا هو الحال، وبالتالي يتم تحقيق تسويّة L2 من خلال الاستنتاج باستخدام TFLite بدون الحاجة إلى هذا الخيار. | Boolean |
False |
quantize |
ما إذا كان يجب تجزئة البيانات المضمّنة التي تم إرجاعها إلى وحدات بايت من خلال التجزئة على مستوى مقياس واحد يُفترض ضمنيًا أن تكون عمليات التضمين ذات معيار وحدة، وبالتالي يمكن ضمان أن تكون قيمة أي سمة هي [ -1.0, 1.0]. استخدِم الخيار l2_normalize إذا لم يكن الأمر كذلك. | Boolean |
False |
تنفيذ المهمة
لتضمين نص الإدخال والحصول على متجهات التضمين الخاصة به، يمكنك استخدام embed(text:)
TextEmbedder
.
Swift
let result = try textEmbedder.embed(text: text)
Objective-C
MPPTextEmbedderResult *result = [textEmbedder embedText:text
error:nil];
ملاحظة: تحظر المهمة سلسلة المحادثات الحالية إلى أن تنتهي من تنفيذ الاستنتاج على النص. لتجنُّب حظر سلسلة المحادثات الحالية، نفِّذ المعالجة في سلسلة محادثات في الخلفية باستخدام أطر عمل iOSDispatch أو NSOperation. إذا تم إنشاء تطبيقك باستخدام Swift، يمكنك أيضًا استخدام Swift Concurrency لتشغيل مؤشر التسلسل في الخلفية.
في نموذج الرمز البرمجي، يتم استدعاء الطريقة embed(text:)
في ملف
TextEmbedderService.swift
.
معالجة النتائج وعرضها
عند تنفيذ الاستنتاج، تُرجع مهمة "إدراج النصوص" TextEmbedderResult
عنصرًا يحتوي على قائمة بإدراجات (إما بنقطة عائمة أو
مقدارًا كميًا مُشفَّرًا) للنص الذي تم إدخاله.
في ما يلي مثال على بيانات الإخراج من هذه المهمة:
TextEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
head_index: 0
يمكنك مقارنة التشابه الدلالي بين عنصرَي إدراج باستخدام طريقة
TextEmbedder.cosineSimilarity
.
Swift
let similarity = try TextEmbedder.cosineSimilarity( embedding1: result.embeddingResult.embeddings[0], embedding2: otherResult.embeddingResult.embeddings[0])
Objective-C
NSNumber *similarity = [MPPTextEmbedder cosineSimilarityBetweenEmbedding1:result.embeddingResult.embeddings[0] andEmbedding2:otherResult.embeddingResult.embeddings[0] error:nil];
في نموذج الرمز البرمجي، يتم استدعاء الطريقة TextEmbedder.cosineSimilarity
في ملف
TextEmbedderService.swift.