يوضح لك هذا البرنامج التعليمي كيفية إنشاء تطبيق Android باستخدام TensorFlow Lite لتصنيف نص اللغة الطبيعية. تم تصميم هذا التطبيق لجهاز Android فعليًا ولكن يمكن تشغيله أيضًا على محاكي الجهاز.
يستخدم تطبيق المثال TensorFlow Lite لتصنيف النص على أنه إيجابي أو سلبي، باستخدام مكتبة المهام للغة الطبيعية (NL) لتمكين تنفيذ نماذج التعلم الآلي لتصنيف النص.
إذا كنت تقوم بتحديث مشروع موجود، فيمكنك استخدام التطبيق النموذجي كمرجع أو قالب. للحصول على إرشادات حول كيفية إضافة تصنيف نص إلى تطبيق موجود، راجع تحديث التطبيق الخاص بك وتعديله .
نظرة عامة على تصنيف النص
تصنيف النص هو مهمة التعلم الآلي المتمثلة في تعيين مجموعة من الفئات المحددة مسبقًا للنص المفتوح. يتم تدريب نموذج تصنيف النص على مجموعة من نصوص اللغة الطبيعية، حيث يتم تصنيف الكلمات أو العبارات يدويًا.
يتلقى النموذج المدرب النص كمدخل ويحاول تصنيف النص وفقًا لمجموعة الفئات المعروفة التي تم تدريبه على تصنيفها. على سبيل المثال، تقبل النماذج الموجودة في هذا المثال مقتطفًا من النص وتحدد ما إذا كان اتجاه النص إيجابيًا أم سلبيًا. بالنسبة لكل مقتطف من النص، يقوم نموذج تصنيف النص بإخراج درجة تشير إلى الثقة في تصنيف النص بشكل صحيح على أنه إيجابي أو سلبي.
لمزيد من المعلومات حول كيفية إنشاء النماذج في هذا البرنامج التعليمي، راجع تصنيف النص مع البرنامج التعليمي TensorFlow Lite Model Maker .
النماذج ومجموعة البيانات
يستخدم هذا البرنامج التعليمي النماذج التي تم تدريبها باستخدام مجموعة بيانات SST-2 (Stanford Sentiment Treebank). يحتوي SST-2 على 67,349 مراجعة للأفلام للتدريب و872 مراجعة للأفلام للاختبار، مع تصنيف كل مراجعة على أنها إيجابية أو سلبية. تم تدريب النماذج المستخدمة في هذا التطبيق باستخدام أداة TensorFlow Lite Model Maker .
يستخدم تطبيق المثال النماذج التالية المدربة مسبقًا:
متوسط ناقل الكلمات (
NLClassifier
) - يقومNLClassifier
بمكتبة المهام بتصنيف نص الإدخال إلى فئات مختلفة، ويمكنه التعامل مع معظم نماذج تصنيف النص.MobileBERT (
BertNLClassifier
) - يشبهBertNLClassifier
الخاص بمكتبة المهام NLClassifier ولكنه مصمم للحالات التي تتطلب رموزًا مميزة لقطع الكلمات وقطعة الجملة خارج الرسم البياني.
قم بإعداد وتشغيل التطبيق المثال
لإعداد تطبيق تصنيف النص، قم بتنزيل التطبيق النموذجي من GitHub وقم بتشغيله باستخدام Android Studio .
متطلبات النظام
- إصدار Android Studio 2021.1.1 (Bumblebee) أو أعلى.
- Android SDK الإصدار 31 أو أعلى
- جهاز Android مزود بإصدار نظام تشغيل أدنى SDK 21 (Android 7.0 - Nougat) مع تمكين وضع المطور ، أو محاكي Android.
احصل على رمز المثال
قم بإنشاء نسخة محلية من رمز المثال. ستستخدم هذا الرمز لإنشاء مشروع في Android Studio وتشغيل تطبيق المثال.
لاستنساخ رمز المثال وإعداده:
- استنساخ مستودع git
git clone https://github.com/tensorflow/examples.git
- بشكل اختياري، قم بتكوين مثيل git الخاص بك لاستخدام الدفع المتناثر، بحيث يكون لديك فقط الملفات الخاصة بتطبيق مثال تصنيف النص:
cd examples git sparse-checkout init --cone git sparse-checkout set lite/examples/text_classification/android
استيراد وتشغيل المشروع
قم بإنشاء مشروع من رمز المثال الذي تم تنزيله، وقم ببناء المشروع، ثم قم بتشغيله.
لاستيراد وإنشاء مشروع التعليمات البرمجية النموذجي:
- ابدأ تشغيل أندرويد ستوديو .
- من Android Studio، حدد File > New > Import Project .
- انتقل إلى دليل التعليمات البرمجية النموذجي الذي يحتوي على ملف build.gradle (
.../examples/lite/examples/text_classification/android/build.gradle
) وحدد هذا الدليل. - إذا طلب Android Studio إجراء Gradle Sync، فاختر "موافق".
- تأكد من أن جهاز Android الخاص بك متصل بجهاز الكمبيوتر الخاص بك وأن وضع المطور ممكّن. انقر فوق سهم
Run
الأخضر.
إذا قمت بتحديد الدليل الصحيح، فسيقوم Android Studio بإنشاء مشروع جديد وإنشائه. يمكن أن تستغرق هذه العملية بضع دقائق، اعتمادًا على سرعة جهاز الكمبيوتر الخاص بك وما إذا كنت قد استخدمت Android Studio لمشاريع أخرى. عند اكتمال البناء، يعرض Android Studio رسالة BUILD SUCCESSFUL
في لوحة حالة إخراج البناء .
لتشغيل المشروع:
- من Android Studio، قم بتشغيل المشروع عن طريق تحديد Run > Run… .
- حدد جهاز Android متصلًا (أو محاكيًا) لاختبار التطبيق.
باستخدام التطبيق
بعد تشغيل المشروع في Android Studio، سيتم فتح التطبيق تلقائيًا على الجهاز المتصل أو محاكي الجهاز.
لاستخدام مصنف النص:
- أدخل مقتطفًا من النص في مربع النص.
- من القائمة المنسدلة " التفويض"، اختر إما وحدة المعالجة
CPU
أوNNAPI
. - حدد نموذجًا عن طريق اختيار
AverageWordVec
أوMobileBERT
. - اختر تصنيف .
يقوم التطبيق بإخراج درجة إيجابية ودرجة سلبية . مجموع هاتين النتيجتين يساوي 1، ويقيسان احتمالية أن يكون شعور النص المُدخل إيجابيًا أو سلبيًا. يشير الرقم الأعلى إلى مستوى أعلى من الثقة.
لديك الآن تطبيق فعال لتصنيف النصوص. استخدم الأقسام التالية لفهم كيفية عمل تطبيق المثال بشكل أفضل، وكيفية تنفيذ ميزات تصنيف النص لتطبيقات الإنتاج الخاصة بك:
كيف يعمل التطبيق - شرح تفصيلي للبنية والملفات الرئيسية لتطبيق المثال.
تعديل التطبيق الخاص بك - إرشادات حول إضافة تصنيف النص إلى تطبيق موجود.
كيف يعمل التطبيق المثال
يستخدم التطبيق حزمة مكتبة المهام للغة الطبيعية (NL) لتنفيذ نماذج تصنيف النص. تم تدريب النموذجين، Average Word Vector وMobileBERT، باستخدام TensorFlow Lite Model Maker . يعمل التطبيق على وحدة المعالجة المركزية بشكل افتراضي، مع خيار تسريع الأجهزة باستخدام مندوب NNAPI.
تحتوي الملفات والأدلة التالية على الكود المهم لتطبيق تصنيف النص هذا:
- TextClassificationHelper.kt - يقوم بتهيئة مصنف النص ويتعامل مع اختيار النموذج والمفوض.
- MainActivity.kt - ينفذ التطبيق، بما في ذلك استدعاء
TextClassificationHelper
وResultsAdapter
. - ResultsAdapter.kt - يعالج النتائج وينسقها.
تعديل التطبيق الخاص بك
تشرح الأقسام التالية الخطوات الأساسية لتعديل تطبيق Android الخاص بك لتشغيل النموذج الموضح في نموذج التطبيق. تستخدم هذه التعليمات التطبيق النموذجي كنقطة مرجعية. قد تختلف التغييرات المحددة المطلوبة لتطبيقك عن التطبيق النموذجي.
افتح أو أنشئ مشروع Android
أنت بحاجة إلى مشروع تطوير Android في Android Studio لمتابعة بقية هذه التعليمات. اتبع الإرشادات أدناه لفتح مشروع موجود أو إنشاء مشروع جديد.
لفتح مشروع تطوير Android حالي:
- في Android Studio، حدد ملف > فتح وحدد مشروعًا موجودًا.
لإنشاء مشروع تطوير Android أساسي:
- اتبع الإرشادات الموجودة في Android Studio لإنشاء مشروع أساسي .
لمزيد من المعلومات حول استخدام Android Studio، راجع وثائق Android Studio .
إضافة تبعيات المشروع
في التطبيق الخاص بك، يجب عليك إضافة تبعيات مشروع محددة لتشغيل نماذج التعلم الآلي TensorFlow Lite، والوصول إلى وظائف الأداة المساعدة التي تحول البيانات مثل السلاسل، إلى تنسيق بيانات موتر يمكن معالجته بواسطة النموذج الذي تستخدمه.
تشرح الإرشادات التالية كيفية إضافة المشروع المطلوب وتبعيات الوحدة النمطية إلى مشروع تطبيق Android الخاص بك.
لإضافة تبعيات الوحدة النمطية:
في الوحدة التي تستخدم TensorFlow Lite، قم بتحديث ملف
build.gradle
الخاص بالوحدة ليشمل التبعيات التالية.في تطبيق المثال، توجد التبعيات في app/build.gradle :
dependencies { ... implementation 'org.tensorflow:tensorflow-lite-task-text:0.4.0' }
يجب أن يتضمن المشروع مكتبة المهام النصية (
tensorflow-lite-task-text
).إذا كنت تريد تعديل هذا التطبيق ليعمل على وحدة معالجة الرسومات (GPU)، فإن مكتبة GPU (
tensorflow-lite-gpu-delegate-plugin
) توفر البنية الأساسية لتشغيل التطبيق على وحدة معالجة الرسومات (GPU)، وDelegate (tensorflow-lite-gpu
) يوفر قائمة التوافق. تشغيل هذا التطبيق على GPU يقع خارج نطاق هذا البرنامج التعليمي.في Android Studio، قم بمزامنة تبعيات المشروع عن طريق تحديد: File > Sync Project with Gradle Files .
تهيئة نماذج ML
في تطبيق Android الخاص بك، يجب عليك تهيئة نموذج التعلم الآلي TensorFlow Lite باستخدام المعلمات قبل تشغيل التنبؤات مع النموذج.
يتم تخزين نموذج TensorFlow Lite كملف *.tflite
. يحتوي ملف النموذج على منطق التنبؤ ويتضمن عادةً بيانات تعريف حول كيفية تفسير نتائج التنبؤ، مثل أسماء فئات التنبؤ. عادة، يتم تخزين ملفات النموذج في دليل src/main/assets
لمشروع التطوير الخاص بك، كما في مثال التعليمات البرمجية:
-
<project>/src/main/assets/mobilebert.tflite
-
<project>/src/main/assets/wordvec.tflite
من أجل الراحة وسهولة قراءة التعليمات البرمجية، يعلن المثال عن كائن مصاحب يحدد إعدادات النموذج.
لتهيئة النموذج في تطبيقك:
قم بإنشاء كائن مصاحب لتحديد إعدادات النموذج. في تطبيق المثال، يوجد هذا الكائن في TextClassificationHelper.kt :
companion object { const val DELEGATE_CPU = 0 const val DELEGATE_NNAPI = 1 const val WORD_VEC = "wordvec.tflite" const val MOBILEBERT = "mobilebert.tflite" }
قم بإنشاء إعدادات النموذج عن طريق إنشاء كائن مصنف، وإنشاء كائن TensorFlow Lite باستخدام
BertNLClassifier
أوNLClassifier
.في التطبيق النموذجي، يوجد هذا في وظيفة
initClassifier
داخل TextClassificationHelper.kt :fun initClassifier() { ... if( currentModel == MOBILEBERT ) { ... bertClassifier = BertNLClassifier.createFromFileAndOptions( context, MOBILEBERT, options) } else if (currentModel == WORD_VEC) { ... nlClassifier = NLClassifier.createFromFileAndOptions( context, WORD_VEC, options) } }
تمكين تسريع الأجهزة (اختياري)
عند تهيئة نموذج TensorFlow Lite في تطبيقك، يجب أن تفكر في استخدام ميزات تسريع الأجهزة لتسريع حسابات التنبؤ للنموذج. مندوبو TensorFlow Lite عبارة عن وحدات برمجية تعمل على تسريع تنفيذ نماذج التعلم الآلي باستخدام أجهزة معالجة متخصصة على جهاز محمول، مثل وحدة معالجة الرسومات (GPUs) أو وحدات معالجة الموتر (TPUs).
لتمكين تسريع الأجهزة في تطبيقك:
قم بإنشاء متغير لتعريف المفوض الذي سيستخدمه التطبيق. في تطبيق المثال، يوجد هذا المتغير مبكرًا في TextClassificationHelper.kt :
var currentDelegate: Int = 0
إنشاء محدد مندوب. في تطبيق المثال، يوجد محدد المفوض في وظيفة
initClassifier
داخل TextClassificationHelper.kt :val baseOptionsBuilder = BaseOptions.builder() when (currentDelegate) { DELEGATE_CPU -> { // Default } DELEGATE_NNAPI -> { baseOptionsBuilder.useNnapi() } }
يوصى باستخدام المفوضين لتشغيل نماذج TensorFlow Lite، ولكنه غير مطلوب. لمزيد من المعلومات حول استخدام المفوضين مع TensorFlow Lite، راجع مندوبو TensorFlow Lite .
تحضير البيانات للنموذج
في تطبيق Android الخاص بك، توفر التعليمات البرمجية الخاصة بك البيانات إلى النموذج لتفسيرها عن طريق تحويل البيانات الموجودة مثل النص الخام إلى تنسيق بيانات Tensor الذي يمكن معالجته بواسطة النموذج الخاص بك. يجب أن تحتوي البيانات الموجودة في Tensor التي تمررها إلى النموذج على أبعاد أو شكل محدد يطابق تنسيق البيانات المستخدم لتدريب النموذج.
يقبل تطبيق تصنيف النص هذا سلسلة كمدخلات، ويتم تدريب النماذج حصريًا على مجموعة من النصوص باللغة الإنجليزية. يتم تجاهل الأحرف الخاصة والكلمات غير الإنجليزية أثناء الاستدلال.
لتوفير بيانات نصية للنموذج:
تأكد من أن وظيفة
initClassifier
تحتوي على الكود الخاص بالمفوض والنماذج، كما هو موضح في قسمي تهيئة نماذج ML وتمكين تسريع الأجهزة .استخدم كتلة
init
لاستدعاء وظيفةinitClassifier
. في التطبيق النموذجي، يوجد الحرفinit
في TextClassificationHelper.kt :init { initClassifier() }
تشغيل التوقعات
في تطبيق Android الخاص بك، بمجرد تهيئة كائن BertNLClassifier أو NLClassifier ، يمكنك البدء في تغذية نص الإدخال للنموذج لتصنيفه على أنه "إيجابي" أو "سلبي".
لتشغيل التوقعات:
قم بإنشاء وظيفة
classify
، والتي تستخدم المصنف المحدد (currentModel
) وتقيس الوقت المستغرق لتصنيف نص الإدخال (inferenceTime
). في تطبيق المثال، توجد وظيفةclassify
في TextClassificationHelper.kt :fun classify(text: String) { executor = ScheduledThreadPoolExecutor(1) executor.execute { val results: List<Category> // inferenceTime is the amount of time, in milliseconds, that it takes to // classify the input text. var inferenceTime = SystemClock.uptimeMillis() // Use the appropriate classifier based on the selected model if(currentModel == MOBILEBERT) { results = bertClassifier.classify(text) } else { results = nlClassifier.classify(text) } inferenceTime = SystemClock.uptimeMillis() - inferenceTime listener.onResult(results, inferenceTime) } }
تمرير النتائج من
classify
إلى كائن المستمع.fun classify(text: String) { ... listener.onResult(results, inferenceTime) }
التعامل مع إخراج النموذج
بعد إدخال سطر من النص، ينتج النموذج درجة تنبؤ، يتم التعبير عنها على شكل عائم، بين 0 و1 للفئتين "الإيجابية" و"السلبية".
للحصول على نتائج التنبؤ من النموذج:
قم بإنشاء دالة
onResult
لكائن المستمع للتعامل مع الإخراج. في تطبيق المثال، يوجد كائن المستمع في MainActivity.ktprivate val listener = object : TextClassificationHelper.TextResultsListener { override fun onResult(results: List<Category>, inferenceTime: Long) { runOnUiThread { activityMainBinding.bottomSheetLayout.inferenceTimeVal.text = String.format("%d ms", inferenceTime) adapter.resultsList = results.sortedByDescending { it.score } adapter.notifyDataSetChanged() } } ... }
أضف دالة
onError
إلى كائن المستمع لمعالجة الأخطاء:private val listener = object : TextClassificationHelper.TextResultsListener { ... override fun onError(error: String) { Toast.makeText(this@MainActivity, error, Toast.LENGTH_SHORT).show() } }
بمجرد أن يقوم النموذج بإرجاع مجموعة من نتائج التنبؤ، يمكن لتطبيقك التصرف بناءً على تلك التنبؤات من خلال تقديم النتيجة إلى المستخدم الخاص بك أو تنفيذ منطق إضافي. يسرد تطبيق المثال نتائج التنبؤ في واجهة المستخدم.
الخطوات التالية
- قم بتدريب النماذج وتنفيذها من البداية باستخدام تصنيف النص باستخدام البرنامج التعليمي TensorFlow Lite Model Maker .
- اكتشف المزيد من أدوات معالجة النصوص لـ TensorFlow .
- قم بتنزيل نماذج BERT الأخرى على TensorFlow Hub .
- استكشف الاستخدامات المختلفة لـ TensorFlow Lite في الأمثلة .
- تعرف على المزيد حول استخدام نماذج التعلم الآلي مع TensorFlow Lite في قسم النماذج .
- تعرف على المزيد حول تنفيذ التعلم الآلي في تطبيق الهاتف المحمول الخاص بك في دليل مطور TensorFlow Lite .