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

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

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

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

مثال التعليمات البرمجية لـ MediaPipe Tasks هو تنفيذ بسيط لأداة تضمين النص تطبيق 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

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

تحتوي الملفات التالية على الرمز المهم لمثال أداة تضمين النص هذا. app:

  • 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. في معظم الحالات، يكون هذا هو الحال بالفعل يتم تحقيق تسوية المستوى 2 من خلال استنتاج TFLite بدون الحاجة إلى لهذا الخيار. Boolean False
quantize ما إذا كان يجب قياس التضمين الذي يتم عرضه بوحدات البايت عبر الكمية الكمّية. يتم الافتراض ضمنيًا أن التضمينات تستند إلى معيار وحدة وبالتالي، يمكن ضمان توفُّر قيمة لأي سمة في [ -1.0، 1.0]. استخدام الخيار l2_normalize إذا لم يكن الأمر كذلك. Boolean False

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

تعمل أداة تضمين النص مع بيانات النصوص (String). تتعامل المهمة مع إدخال البيانات المعالجة المسبقة، بما في ذلك الترميز والمعالجة المسبقة لـ Tenor. الكل تتم معالجة عمليات المعالجة المسبقة ضمن دالة 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 الملف.