راهنمای طبقه بندی متون برای اندروید

وظیفه MediaPipe Text Classifier به شما امکان می دهد متن را به مجموعه ای از دسته بندی های تعریف شده، مانند احساسات مثبت یا منفی طبقه بندی کنید. دسته بندی ها مدلی را که استفاده می کنید و نحوه آموزش آن مدل تعیین می کنند. این دستورالعمل‌ها به شما نشان می‌دهند که چگونه از Text Classifier با برنامه‌های Android استفاده کنید.

با مشاهده دمو می توانید این کار را در عمل مشاهده کنید. برای اطلاعات بیشتر در مورد قابلیت‌ها، مدل‌ها و گزینه‌های پیکربندی این کار، به نمای کلی مراجعه کنید.

نمونه کد

کد مثال برای Text Classifier پیاده سازی ساده ای از این کار را برای مرجع شما فراهم می کند. این کد به شما کمک می کند این کار را آزمایش کنید و شروع به ساخت برنامه طبقه بندی متن خود کنید. می توانید کد نمونه Text Classifier را در 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 Studio، به مثال دستورالعمل‌های تنظیم کد در راهنمای راه‌اندازی برای Android مراجعه کنید.

اجزای کلیدی

فایل‌های زیر حاوی کد حیاتی برای برنامه نمونه طبقه‌بندی متن هستند:

  • TextClassifierHelper.kt - طبقه بندی کننده متن را اولیه می کند و انتخاب مدل را مدیریت می کند.
  • MainActivity.kt - برنامه را پیاده سازی می کند، از جمله فراخوانی TextClassifierHelper و ResultsAdapter .
  • ResultsAdapter.kt - نتایج را کنترل و قالب بندی می کند.

برپایی

این بخش مراحل کلیدی را برای راه اندازی محیط توسعه و پروژه های کد به طور خاص برای استفاده از Text Classifier توضیح می دهد. برای اطلاعات کلی در مورد تنظیم محیط توسعه خود برای استفاده از MediaPipe Tasks، از جمله الزامات نسخه پلتفرم، به راهنمای راه اندازی برای Android مراجعه کنید.

وابستگی ها

Text Classifier از کتابخانه های com.google.mediapipe:tasks-text استفاده می کند. این وابستگی را به فایل build.gradle پروژه توسعه برنامه اندروید خود اضافه کنید. می توانید وابستگی های مورد نیاز را با کد زیر وارد کنید:

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

مدل

وظیفه MediaPipe Text Classifier به یک مدل آموزش دیده نیاز دارد که با این کار سازگار باشد. برای اطلاعات بیشتر در مورد مدل‌های آموزش‌دیده موجود برای Text Classifier، بخش مدل‌های نمای کلی کار را ببینید.

یک مدل را انتخاب و دانلود کنید و سپس آن را در فهرست assets پروژه خود ذخیره کنید:

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

از متد BaseOptions.Builder.setModelAssetPath() برای تعیین مسیر مدل مورد استفاده استفاده کنید. برای مثال کد، بخش بعدی را ببینید.

کار را ایجاد کنید

از یکی از توابع Text Classifier 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 منحصر به فرد است و از هر دو نتیجه در خطا استفاده می کند. هر رشته تنظیم نشده

داده ها را آماده کنید

Text Classifier با داده های متن ( String ) کار می کند. این وظیفه، پیش پردازش ورودی داده، از جمله پیش پردازش توکن و تانسور را انجام می دهد.

تمام پیش پردازش ها در تابع classify() انجام می شود. نیازی به پیش پردازش اضافی متن ورودی از قبل نیست.

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

وظیفه را اجرا کنید

Text Classifier از تابع TextClassifier.classify() برای اجرای استنتاج ها استفاده می کند. از یک رشته اجرایی جداگانه برای اجرای طبقه بندی استفاده کنید تا از مسدود کردن رشته رابط کاربری اندروید با برنامه خود جلوگیری کنید.

کد زیر نحوه اجرای پردازش با مدل وظیفه را با استفاده از یک رشته اجرایی جداگانه نشان می دهد.

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

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

می توانید نمونه ای از نحوه اجرای یک کار را در تابع کد TextClassifierHelper classify() مشاهده کنید.

کنترل و نمایش نتایج

Text Classifier یک 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 مشاهده کنید.