دليل تصنيف النصوص على Android

تتيح لك مهمة مصنف نص MediaPipe تصنيف النص إلى مجموعة من الفئات المحددة، مثل الآراء الإيجابية أو السلبية. يتم تحديد الفئات النموذج التي تستخدمها وكيف يتم تطبيق هذا النموذج. توضّح لك هذه التعليمات كيفية استخدام "مصنف النص" مع تطبيقات Android.

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

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

يقدم مثال الرمز لمصنِّف النص طريقة تنفيذ بسيطة لهذه الطريقة المهمة كمرجع لك. يساعدك هذا الرمز في اختبار هذه المهمة والبدء في إنشاء تطبيقك الخاص لتصنيف النصوص. يمكنك تصفح مثال على رمز مصنِّف النص على 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/android
    

للحصول على تعليمات حول كيفية إعداد وتشغيل مثال باستخدام "استوديو Android" يمكنك الاطّلاع على تعليمات إعداد الرمز البرمجي في القسم دليل إعداد Android

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

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

  • TextClassifierHelper.kt - يقوم بتهيئة مصنف النص والتعامل مع تحديد النموذج.
  • MainActivity.kt - لتنفيذ التطبيق، بما في ذلك طلب الرقم TextClassifierHelper ResultsAdapter
  • ResultsAdapter.kt - تتعامل مع النتائج وتنسقها.

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

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

التبعيات

يستخدم مصنِّف النص مكتبات com.google.mediapipe:tasks-text. إضافة هذا تعتمد على ملف build.gradle الخاص بمشروع تطوير تطبيق Android. يمكنك استيراد الموارد التابعة المطلوبة باستخدام الرمز التالي:

dependencies {
    implementation 'com.google.mediapipe:tasks-text:latest.release'
}

الطراز

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

يُرجى اختيار نموذج وتنزيله ثم تخزينه ضمن مشروعك "assets". الدليل:

<dev-project-root>/src/main/assets

استخدام الطريقة BaseOptions.Builder.setModelAssetPath() لتحديد المسار للنموذج المراد استخدامه. للاطّلاع على مثال على الرمز البرمجي، يُرجى مراجعة القسم التالي.

إنشاء المهمة

يمكنك استخدام إحدى دوال مصنِّف النص TextClassifier.createFrom...() من أجل وتجهز المهمة لتشغيل الاستنتاجات. يمكنك استخدام createFromFile(). مع مسار نسبي أو مطلق لملف النموذج المدرَّب. الرمز يوضح المثال أدناه استخدام السمة TextClassifier.createFromOptions() الأخرى. لمزيد من المعلومات حول خيارات الضبط المتاحة، يُرجى الاطّلاع على خيارات الإعداد:

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

// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";

fun initClassifier() {
    val baseOptionsBuilder = BaseOptions.builder()
        .setModelAssetPath(currentModel)
    try {
        val baseOptions = baseOptionsBuilder.build()
        val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
            .setBaseOptions(baseOptions)
        val options = optionsBuilder.build()
        textClassifier = TextClassifier.createFromOptions(context, options)
    } catch (e: IllegalStateException) { // exception handling
    }
}

يمكنك الاطّلاع على مثال على كيفية إنشاء مهمة في مثال الرمز البرمجي. TextClassifierHelper الفئة initClassifier().

خيارات الإعداد

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

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

تجهيز البيانات

يعمل "مصنِّف النص" مع البيانات النصية (String). تتعامل المهمة مع إدخال البيانات المعالجة المسبقة، بما في ذلك الترميز والمعالجة المسبقة لـ Tenor.

تتم معالجة جميع عمليات المعالجة المسبقة ضمن الدالة classify(). لا توجد حاجة لإجراء مزيد من المعالجة المسبقة لنص الإدخال مسبقًا.

String inputText = "The input text to be classified.";

تنفيذ المهمة

يستخدم "مصنِّف النص" الدالة TextClassifier.classify() لتنفيذ والاستنتاجات. استخدام سلسلة محادثات منفصلة لتنفيذ عملية التصنيف لتجنُّب حظر سلسلة محادثات واجهة مستخدم Android مع تطبيقك.

يوضح الرمز التالي كيفية تنفيذ المعالجة باستخدام المهمة باستخدام سلسلة محادثات منفصلة.

    fun classify(text: String) {
        executor = ScheduledThreadPoolExecutor(1)

        executor.execute {
            val results = textClassifier.classify(text)
            listener.onResult(results)
        }
    }

يمكنك الاطّلاع على مثال على كيفية تنفيذ مهمة في مثال الرمز البرمجي TextClassifierHelper الفئة classify().

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

يُنتج "مصنِّف النص" 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"

يمكنك الاطّلاع على مثال على كيفية عرض النتائج في مثال الرمز البرمجي ResultsAdapter الفئة وفئة ViewHolder الداخلية.