راهنمای تشخیص زبان برای اندروید

وظیفه MediaPipe Language Detector به شما امکان می دهد زبان یک متن را شناسایی کنید. این دستورالعمل‌ها به شما نشان می‌دهند که چگونه از ردیاب زبان در برنامه‌های اندروید استفاده کنید. نمونه کد شرح داده شده در این دستورالعمل ها در 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 Studio، به مثال دستورالعمل‌های تنظیم کد در راهنمای راه‌اندازی برای Android مراجعه کنید.

اجزای کلیدی

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

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

راه اندازی

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

وابستگی ها

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

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);

شما می توانید نمونه ای از نحوه ایجاد یک کار را در تابع کد زبانDetectorHelper کلاس initDetector() مشاهده کنید.

گزینه های پیکربندی

این کار دارای گزینه های پیکربندی زیر برای برنامه های Android است:

نام گزینه توضیحات محدوده ارزش مقدار پیش فرض
maxResults حداکثر تعداد اختیاری پیش‌بینی‌های زبان با امتیاز بالا را برای بازگشت تنظیم می‌کند. اگر این مقدار کمتر از صفر باشد، تمام نتایج موجود برگردانده می شوند. هر عدد مثبت -1
scoreThreshold آستانه امتیاز پیش‌بینی را تعیین می‌کند که بر آستانه ارائه‌شده در فراداده مدل (در صورت وجود) لغو می‌شود. نتایج زیر این مقدار رد می شوند. هر شناور تنظیم نشده است
categoryAllowlist لیست اختیاری کدهای زبان مجاز را تنظیم می کند. اگر خالی نباشد، پیش‌بینی‌های زبانی که کد زبان آنها در این مجموعه نیست فیلتر می‌شوند. این گزینه با categoryDenylist منحصر به فرد است و از هر دو نتیجه در یک خطا استفاده می کند. هر رشته تنظیم نشده است
categoryDenylist لیست اختیاری کدهای زبانی را که مجاز نیستند را تنظیم می کند. اگر خالی نباشد، پیش‌بینی‌های زبانی که کد زبان آنها در این مجموعه است فیلتر می‌شوند. این گزینه با categoryAllowlist منحصر به فرد است و از هر دو نتیجه در خطا استفاده می کند. هر رشته تنظیم نشده است

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

آشکارساز زبان با داده های متن ( String ) کار می کند. این وظیفه، پیش پردازش ورودی داده، از جمله پیش پردازش توکن و تانسور را انجام می دهد. تمام پیش پردازش ها در تابع detect() انجام می شود. نیازی به پیش پردازش اضافی متن ورودی از قبل نیست.

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

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

زبان شناس از متد LanguageDetector.detect() برای پردازش متن ورودی و پیش بینی زبان متن استفاده می کند. برای جلوگیری از مسدود کردن رشته رابط کاربری اندروید با برنامه خود، باید از یک رشته اجرایی جداگانه برای اجرای تشخیص استفاده کنید.

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

// 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 class detect() مشاهده کنید.

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

ردیاب زبان یک LanguageDetectorResult شامل لیستی از پیش بینی های زبان به همراه احتمالات آن پیش بینی ها را خروجی می دهد. دسته‌های زبان در مدل تعریف شده‌اند، برای جزئیات بیشتر در مورد مدلی که استفاده می‌کنید، به بخش مدل‌های نمای کلی کار مراجعه کنید.

شکل زیر نمونه ای از داده های خروجی از این کار را نشان می دهد:

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

این نتیجه با اجرای مدل بر روی متن ورودی به دست آمده است: "Il ya beaucoup de bouches qui parlent et fort peu de têtes qui pensent." .

می توانید نمونه ای از نحوه نمایش نتایج را در کلاس کد ResultsAdapter و کلاس داخلی ViewHolder مشاهده کنید.