تتيح لك مهمة "إدراج النص" إنشاء تمثيل رقمي لبيانات النص بهدف التقاط معناها الدلالي. توضح لك هذه التعليمات كيفية استخدام أداة تضمين النص في تطبيقات 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.
التبعيات
تستخدم "أداة تضمين النص" مكتبة 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];
ملاحظة: تحظر المهمة سلسلة المحادثات الحالية إلى أن تنتهي من تنفيذ الاستنتاج على النص. لتجنُّب حظر سلسلة المهام الحالية، نفِّذ المعالجة في سلسلت مهام في الخلفية باستخدام إطارَي عمل iOS Dispatch أو 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.