دليل تصنيف النصوص لنظام التشغيل iOS

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

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

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

يُعد مثال الرمز البرمجي لمهام MediaPipe تطبيقًا أساسيًا لتطبيق Text Classifier لنظام التشغيل iOS.

يمكنك استخدام التطبيق كنقطة بداية لتطبيق iOS الخاص بك، أو الرجوع إليه عند تعديل تطبيق حالي. يمكنك الرجوع إلى الرمز البرمجي لنموذج "أداة تصنيف النص" (Text Classifier) على 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_classification/ios/
    

بعد إنشاء نسخة محلية من نموذج الرمز، يمكنك تثبيت مكتبة مهام MediaPipe، وفتح المشروع باستخدام Xcode، وتشغيل التطبيق. للحصول على التعليمات، يمكنك الاطّلاع على دليل الإعداد لنظام التشغيل iOS.

المكونات الرئيسية

تحتوي الملفات التالية على التعليمات البرمجية الهامة لتطبيق مثال Text Classifier:

ضبط إعدادات الجهاز

يصف هذا القسم الخطوات الأساسية لإعداد بيئة التطوير ومشاريع الرموز البرمجية لاستخدام "أداة تصنيف النص". للحصول على معلومات عامة حول إعداد بيئة التطوير لاستخدام مهام MediaPipe، بما في ذلك متطلبات إصدار النظام الأساسي، يُرجى الاطّلاع على دليل الإعداد لنظام التشغيل iOS.

التبعيات

يستخدم Text Classifier مكتبة MediaPipeTasksText التي يجب تثبيتها باستخدام CocoaPods. المكتبة متوافقة مع كل من تطبيقَي Swift وObjective-C ولا تتطلب أي إعداد إضافي خاص بلغة معيّنة.

للحصول على تعليمات حول تثبيت CocoaPods على نظام التشغيل macOS، يُرجى الرجوع إلى دليل تثبيت CocoaPods. للحصول على تعليمات حول كيفية إنشاء Podfile مع مجموعات الإعلانات المتسلسلة اللازمة لتطبيقك، يمكنك الاطّلاع على المقالة استخدام CocoaPods.

أضِف مجموعة MediaPipeTasksText في Podfile باستخدام الرمز التالي:

target 'MyTextClassifierApp' do
  use_frameworks!
  pod 'MediaPipeTasksText'
end

إذا كان تطبيقك يتضمّن أهداف اختبار الوحدات، يُرجى الرجوع إلى دليل الإعداد لنظام التشغيل iOS للحصول على معلومات إضافية حول إعداد Podfile.

الطراز

تتطلب مهمة MediaPipe Text Classife نموذجًا مدرَّبًا متوافقًا مع هذه المهمة. للحصول على مزيد من المعلومات حول النماذج المدربة المتاحة لأداة تصنيف النص، راجع قسم النظرة العامة على المهام قسم النماذج.

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

استخدِم السمة BaseOptions.modelAssetPath لتحديد المسار إلى النموذج في حِزمة التطبيق. للاطّلاع على مثال على الرمز البرمجي، راجِع القسم التالي.

إنشاء المهمة

يمكنك إنشاء مهمة "Text Classifier" (أداة تصنيف النص) عن طريق استدعاء أحد مهيئاتها. يضبط مبدئي TextClassifier(options:) قيمًا لخيارات الإعداد.

إذا لم تكن بحاجة إلى "مصنِّف نصي" تمّت تهيئته باستخدام خيارات ضبط مخصّصة، يمكنك استخدام أداة الإعداد "TextClassifier(modelPath:)" لإنشاء "مصنِّف نصي" باستخدام الخيارات التلقائية. لمزيد من المعلومات حول خيارات الضبط، يُرجى الاطّلاع على نظرة عامة على الإعدادات.

يوضح الرمز التالي كيفية إنشاء هذه المهمة وتكوينها.

Swift

import MediaPipeTasksText

let modelPath = Bundle.main.path(forResource: "model",
                                      ofType: "tflite")

let options = TextClassifierOptions()
options.baseOptions.modelAssetPath = modelPath
options.scoreThreshold = 0.6

let textClassifier = try TextClassifier(options: options)

Objective-C

@import MediaPipeTasksText;

NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"model"
                                                      ofType:@"tflite"];

MPPTextClassifierOptions *options = [[MPPTextClassifierOptions alloc] init];
options.baseOptions.modelAssetPath = modelPath;
options.scoreThreshold = 0.6;

MPPTextClassifier *textClassifier =
      [[MPPTextClassifier alloc] initWithOptions:options error:nil];

خيارات الضبط

تتضمّن هذه المهمة خيارات الضبط التالية لتطبيقات iOS:

اسم الخيار الوصف نطاق القيمة القيمة التلقائية
displayNamesLocale تحدِّد هذه السياسة لغة التصنيفات التي سيتم استخدامها للأسماء المعروضة في البيانات الوصفية لنموذج المهمة، إذا كان ذلك متاحًا. الإعداد التلقائي هو en للغة الإنجليزية. يمكنك إضافة تصنيفات مترجَمة إلى البيانات الوصفية لنموذج مخصّص باستخدام TensorFlow Lite Metadata Scriptr API. رمز اللغة en
maxResults يضبط الحد الأقصى الاختياري لعدد نتائج التصنيف ذات أعلى الدرجات التي تريد عرضها. وإذا كانت القيمة أقل من 0، سيتم عرض جميع النتائج المتاحة. أي أرقام موجبة -1
scoreThreshold لتعيين الحد الأدنى لدرجة التنبؤ الذي يتجاوز الحد المقدم في البيانات الوصفية للنموذج (إن يتوفر). يتم رفض النتائج التي تقلّ عن هذه القيمة. أي عائم لم يتم الضبط.
categoryAllowlist تُحدِّد القائمة الاختيارية لأسماء الفئات المسموح بها. وإذا لم يكن هذا الحقل فارغًا، ستتم فلترة نتائج التصنيف التي لا يكون اسم فئتها ضمن هذه المجموعة. ويتم تجاهل أسماء الفئات المكررة أو غير المعروفة. لا يمكن استخدام هذا الخيار مع categoryDenylist، ويؤدي استخدام كلاهما إلى حدوث خطأ. أي سلاسل لم يتم الضبط.
categoryDenylist تُحدِّد القائمة الاختيارية لأسماء الفئات غير المسموح بها. وإذا لم تكن نتائج التصنيف فارغة، فستتم تصفية نتائج التصنيف التي يوجد اسم فئتها في هذه المجموعة. ويتم تجاهل أسماء الفئات المكررة أو غير المعروفة. لا يمكن استخدام هذا الخيار إلّا مع categoryAllowlist، ويؤدي استخدام كلا الخيارين إلى حدوث خطأ. أي سلاسل لم يتم الضبط.

إعداد البيانات

تعمل أداة Text Classifier مع البيانات النصية. تتعامل المهمة مع المعالجة المسبقة لإدخال البيانات، بما في ذلك إنشاء الرموز المميزة والمعالجة المسبقة للتوتر.

وتتم معالجة كل عمليات المعالجة المسبقة ضمن دالة classify(text:). ليست هناك حاجة إلى معالجة مسبقة إضافية للنص المُدخل.

Swift

let text = "The input text to be classified."

Objective-C

NSString *text = @"The input text to be classified.";

تنفيذ المهمة

لتشغيل أداة تصنيف النص، استخدِم الطريقة classify(text:). يعرض "Text Classifier" الفئات المحتملة لنص الإدخال.

Swift

let result = try textClassifier.classify(text: text)

Objective-C

MPPTextClassifierResult *result = [textClassifier classifyText:text
                                                          error:nil];

ملاحظة: تحظر المهمة سلسلة التعليمات الحالية إلى أن تنتهي من تنفيذ الاستنتاج على النص. لتجنُّب حظر سلسلة التعليمات الحالية، نفِّذ عملية المعالجة في سلسلة محادثات في الخلفية باستخدام إطارَي عمل Dispatch أو NSOperation في نظام التشغيل iOS.

التعامل مع النتائج وعرضها

عند تنفيذ الاستنتاج، تعرض مهمة Text Classifier كائن TextClassifierResult يحتوي على قائمة بالفئات المحتمَلة لنص الإدخال. ويتم تحديد الفئات حسب النموذج الذي تستخدمه، لذا إذا كنت تريد فئات مختلفة، اختَر نموذجًا مختلفًا أو أعِد ضبط نموذج حالي.

ويوضح ما يلي مثالاً على بيانات المخرجات من هذه المهمة:

TextClassificationResult:
  Classification #0 (single classification head):
    ClassificationEntry #0:
      Category #0:
        category name: "positive"
        score: 0.8904
        index: 0
      Category #1:
        category name: "negative"
        score: 0.1096
        index: 1

تم الحصول على هذه النتيجة عن طريق تشغيل مصنِّف BERT على نص الإدخال: "an imperfect but overall entertaining mystery".

يوضح ملف ViewController.swift في نموذج الرمز كيفية عرض نتائج الاكتشاف التي تم إرجاعها من المهمة.