دليل تضمين النص لنظام التشغيل Android

تتيح لك مهمة MediaPipe Text inlineer إنشاء تمثيل رقمي للبيانات النصية لالتقاط معناها الدلالي. توضح لك هذه التعليمات كيفية استخدام أداة تضمين النص مع تطبيقات Android.

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

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

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

يمكنك استخدام التطبيق كنقطة بداية لتطبيق 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_embedder/android
    

بعد إنشاء نسخة محلية من الرمز النموذجي، يمكنك استيراد المشروع إلى "استوديو Android" وتشغيل التطبيق. للحصول على التعليمات، يمكنك مراجعة دليل الإعداد لنظام التشغيل Android.

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

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

  • TextEmbedderHelper.kt: يضبط أداة تضمين النص وتعالج النموذج وتفويض التحديد.
  • MainActivity.kt: تنفّذ التطبيق وتجمع مكوّنات واجهة المستخدم.

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

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

التبعيات

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

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

الطراز

تحتاج مهمة أداة تضمين النص MediaPipe إلى نموذج مدرب متوافق مع هذه المهمة. للحصول على مزيد من المعلومات حول النماذج المدربة المتاحة لأداة تضمين النص، راجع النظرة العامة على المهمة إلى قسم النماذج.

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

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

حدِّد مسار النموذج ضمن المَعلمة ModelAssetPath. في المثال البرمجي، يتم تحديد النموذج في الدالة setupTextEmbedder() في ملف TextEmbedderHelper.kt:

استخدِم الدالة BaseOptions.Builder.setModelAssetPath() لتحديد المسار الذي يستخدمه النموذج. وتتم الإشارة إلى هذه الطريقة في مثال الرمز البرمجي في القسم التالي.

إنشاء المهمة

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

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

val baseOptions = baseOptionsBuilder.build()
val optionsBuilder =
    TextEmbedderOptions.builder().setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textEmbedder = TextEmbedder.createFromOptions(context, options)

يضبط نموذج تنفيذ الرمز خيارات أداة تضمين النص في الدالة setupTextEmbedder() في الملف TextEmbedderHelper.kt.

خيارات الضبط

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

اسم الخيار الوصف نطاق القيمة القيمة التلقائية
l2_normalize ما إذا كان سيتم تسوية الخط المتجه للميزة الذي تم إرجاعه باستخدام معيار L2. لا تستخدم هذا الخيار إلا إذا لم يكن النموذج يحتوي على L2_NORMALIZATION TFLite Op أصلي. في معظم الحالات، يتم تسوية L2 من خلال استنتاج TFLite بدون الحاجة إلى هذا الخيار. Boolean False
quantize ما إذا كان يجب تحديد قيمة التضمين التي تم إرجاعها إلى وحدات البايت من خلال تحديد كمّية عددية ومن المفترض ضمنيًا أن تكون عمليات التضمين عبارة عن معيار وحدة، وبالتالي يمكن أن يكون لأي سمة قيمة في [ -1.0, 1.0]. واستخدِم الخيار l2_normalize إذا لم يكن الأمر كذلك. Boolean False

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

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

val inputText = "The input text to be embedded."

تنفيذ المهمة

تستخدم "أداة تضمين النص" الدالة embed لعرض الاستنتاجات. بالنسبة إلى تضمين النص، يعني هذا عرض متجهات التضمين لنص الإدخال.

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

textEmbedder?.let {
    val firstEmbed =
        it.embed(firstText).embeddingResult().embeddings().first()
    val secondEmbed =
        it.embed(secondText).embeddingResult().embeddings().first()
    ...
}

في نموذج الرمز البرمجي، يتم استدعاء الدالة embed في ملف TextEmbedderHelper.kt.

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

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

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

TextEmbedderResult:
  Embedding #0 (sole embedding head):
    float_embedding: {0.2345f, 0.1234f, ..., 0.6789f}
    head_index: 0

يمكنك مقارنة التشابه الدلالي بين تضمينين باستخدام الدالة TextEmbedder.cosineSimilarity. انظر التعليمة البرمجية التالية للحصول على مثال.

val similarity = TextEmbedder.cosineSimilarity(firstEmbed, secondEmbed)

في نموذج الرمز البرمجي، يتم استدعاء الدالة TextEmbedder.cosineSimilarity() في ملف TextEmbedderHelper.kt.