دليل التعرّف على اللغة في نظام التشغيل Android

تتيح لك مهمة MediaPipe Language Detector التعرّف على لغة النص. توضّح لك هذه التعليمات كيفية استخدام "أداة رصد اللغة" مع تطبيقات Android. يتوفر عينة التعليمات البرمجية الموضحة في هذه التعليمات على GitHub.

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

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

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

للحصول على تعليمات حول كيفية إعداد نموذج من "استوديو Android" وتشغيله، يمكنك الاطّلاع على مثال تعليمات إعداد الرمز في دليل الإعداد لنظام التشغيل Android.

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

تحتوي الملفات التالية على الرمز الأساسي لتطبيق تصنيف النص مثال:

  • LanguageDetectorHelper.kt - يضبط أداة رصد اللغة ويعالج اختيار النموذج.
  • ResultsAdapter.kt - تعالج نتائج الرصد وتنسقها.
  • MainActivity.kt - لتنفيذ التطبيق، بما في ذلك استدعاء LanguageDetectorHelper وResultsAdapter.

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

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

التبعيات

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

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

الطراز

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

حدد النموذج ونزّله ثم قم بتخزينه في دليل المشروع:

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

حدِّد مسار النموذج ضمن المَعلمة ModelName.

إنشاء المهمة

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

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

// For creating a language detector instance:
LanguageDetectorOptions options =
       LanguageDetectorOptions.builder()
       .setBaseOptions(
          BaseOptions.builder()
            .setModelAssetPath(modelPath)
            .build()
          )
       .build();
LanguageDetector languageDetector = LanguageDetector.createFromOptions(context, options);

يمكنك مشاهدة مثال حول كيفية إنشاء مهمة في مثال الرمز LanguageDetectorHelper الخاص بالفئة initDetector().

خيارات الضبط

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

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

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

تعمل "أداة التعرّف على اللغة" مع البيانات النصية (String). تتعامل المهمة مع المعالجة المسبقة لإدخال البيانات، بما في ذلك إنشاء الرموز المميزة والمعالجة المسبقة للتوتر. وتتم معالجة كل عمليات المعالجة المسبقة ضمن دالة detect(). ليست هناك حاجة لمزيد من المعالجة المسبقة لنص الإدخال مسبقًا.

String inputText = "Some input text for the language detector";

تنفيذ المهمة

تستخدم "أداة التعرّف على اللغة" طريقة LanguageDetector.detect() لمعالجة نص الإدخال وتوقُّع لغة النص. يجب استخدام سلسلة تعليمات تنفيذ منفصلة لتنفيذ عملية الرصد لتجنّب حظر سلسلة محادثات واجهة مستخدم Android مع تطبيقك.

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

// Predict the language of the input text.
fun classify(text: String) {
    executor = ScheduledThreadPoolExecutor(1)

    executor.execute {
        val results = languageDetector.detect(text)
        listener.onResult(results)
    }
}

يمكنك مشاهدة مثال حول كيفية تشغيل مهمة في مثال الرمز LanguageDetectorHelper الخاص بالفئة detect().

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

تقدِّم أداة رصد اللغة LanguageDetectorResult قائمة من عبارات البحث المقترَحة باللغة بالإضافة إلى الاحتمالات المتَّبعة على هذه عبارات البحث. يتم تحديد فئات اللغة في النموذج، ويمكنك الاطّلاع على النظرة العامة على المهمة في قسم النماذج للحصول على تفاصيل حول النموذج الذي تستخدمه.

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

LanguageDetectorResult:
  LanguagePrediction #0:
    language_code: "fr"
    probability: 0.999781

تم الحصول على هذه النتيجة من خلال تشغيل النموذج على نص الإدخال: "Il y a beaucoup de bouches qui parlent et fort peu de têtes qui pensent.".

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