دليل تضمين النصوص لأجهزة iOS

تتيح لك مهمة "إدراج النص" إنشاء تمثيل رقمي لبيانات النص بهدف التقاط معناها الدلالي. توضّح لك هذه التعليمات كيفية استخدام أداة إدراج النصوص في تطبيقات iOS.

يمكنك الاطّلاع على هذه المهمة أثناء تنفيذها من خلال مشاهدة هذا العرض التمهيدي لتطبيق الويب . لمزيد من المعلومات عن الإمكانات والنماذج وخيارات الضبط لهذه المهمة، اطّلِع على نظرة عامة.

مثال على الرمز البرمجي

يوفر مثال التعليمة البرمجية لأداة تضمين النص تنفيذًا أساسيًا لتطبيق iOS الذي يدمج هذه المهمة. يقيّم المثال أوجه التشابه الدلالية بين جزأين من النص، ويتطلب إما جهاز iOS ماديًا أو محاكي iOS.

يمكنك استخدام التطبيق كنقطة بداية لتطبيقك الخاص على iOS، أو الرجوع إليه عند تعديل تطبيق حالي. يمكنك الرجوع إلى مثال رمز "أداة تضمين النصوص" على GitHub.

تنزيل الرمز

توضّح لك التعليمات التالية كيفية إنشاء نسخة محلية من نموذج الرمز باستخدام أداة سطر الأوامر git.

لتنزيل نموذج الرمز البرمجي:

  1. استنسِخ مستودع git باستخدام الأمر التالي:

    git clone https://github.com/google-ai-edge/mediapipe-samples
    
  2. يمكنك اختياريًا ضبط مثيل 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.