پیاده سازی طبقه بندی متن

طبقه‌بندی‌کننده متن از تکنیک‌های یادگیری ماشین برای کمک به توسعه‌دهندگان در طبقه‌بندی متن استفاده می‌کند.

طبقه‌بندی‌کننده متن نسخه اندروید ۱۱

اندروید ۱۱ یک پیاده‌سازی پیش‌فرض قابل به‌روزرسانی از سرویس طبقه‌بندی متن را در ماژول ExtServices معرفی می‌کند. در دستگاه‌هایی که اندروید ۱۱ یا بالاتر را اجرا می‌کنند، متد getTextClassifier() این پیاده‌سازی پیش‌فرض را در ماژول ExtServices برمی‌گرداند. به تولیدکنندگان دستگاه توصیه می‌شود از این پیاده‌سازی TextClassifierService استفاده کنند زیرا می‌توان آن را از طریق به‌روزرسانی‌های OTA خط اصلی به‌روزرسانی کرد.

اندروید ۱۱ همچنین پیاده‌سازی پیش‌فرض طبقه‌بندی‌کننده متن محلی که قبلاً در اندروید ۸.۱ معرفی شده بود را حذف کرده است. در نتیجه، getLocalTextClassifier() یک طبقه‌بندی‌کننده متن NO_OP برمی‌گرداند. به جای پیاده‌سازی محلی، باید از متد getDefaultTextClassifierImplementation() استفاده کنید.

برای تولیدکنندگان دستگاه که ممکن است بخواهند از الگوریتم‌های طبقه‌بندی متن خود استفاده کنند، می‌توانند با مشخص کردن config_defaultTextClassifierPackage در فایل config.xml ، یک سرویس طبقه‌بندی متن سفارشی پیاده‌سازی کنند. اگر این پیکربندی مشخص نشده باشد، از پیاده‌سازی پیش‌فرض سیستم استفاده می‌شود. پیاده‌سازی‌های سفارشی می‌توانند با فراخوانی TextClassifierService.getDefaultTextClassifierImplementation(Context) نمونه‌ای از پیاده‌سازی پیش‌فرض را دریافت کنند. برای اطلاعات بیشتر، به پیاده‌سازی یک سرویس طبقه‌بندی متن سفارشی مراجعه کنید.

آزمایش

برای اعتبارسنجی پیاده‌سازی سرویس طبقه‌بندی متن، از تست‌های مجموعه تست سازگاری (CTS) در platform/cts/tests/tests/textclassifier/ استفاده کنید.

اندروید ۱۰ بهبودهایی در طبقه‌بندی متن منتشر کرد

اندروید ۱۰ دو متد را به API کلاس‌بندی متن (TextClassifier API) معرفی می‌کند: suggestConversationActions و detectLanguage . متد suggestConversationActions پاسخ‌ها و اقدامات پیشنهادی را از یک مکالمه داده شده تولید می‌کند و متد detectLanguage زبان متن را تشخیص می‌دهد.

فایل‌های مدل برای این متدها در زیر نشان داده شده‌اند و می‌توانید آن‌ها را در external/libtextclassifier/models/ پیدا کنید.

  • suggestionConversationActions : actions_suggestions.universal.model
  • detectLanguage : lang_id.model

برای انتشار دستگاهی با آخرین فایل‌های مدل در تصویر کارخانه خود، موارد زیر را انجام دهید:

  1. آخرین فایل‌های مدل را دریافت کنید.

    external/libtextclassifier/models/update.sh
    
  2. فایل‌های دانلود شده را تغییر نام دهید تا جایگزین فایل‌های موجود شوند.
  3. تنظیمات را تأیید کنید.
    adb shell dumpsys textclassification
    

    این نمونه‌ای از خروجی آن دستور است.

    TextClassifierImpl:
      Annotator model file(s):
        ModelFile { path=/etc/textclassifier/textclassifier.universal.model name=textclassifier.universal.model version=608 locales=und }
        ModelFile { path=/etc/textclassifier/textclassifier.en.model name=textclassifier.en.model version=608 locales=en }
      LangID model file(s):
        ModelFile { path=/etc/textclassifier/lang_id.model name=lang_id.model version=0 locales=und }
      Actions model file(s):
        ModelFile { path=/etc/textclassifier/actions_suggestions.universal.model name=actions_suggestions.universal.model version=0 locales=und }

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

اندروید ۹ چارچوب طبقه‌بندی متن معرفی شده در اندروید ۸.۱ را با سرویس جدید طبقه‌بندی متن گسترش داد. سرویس طبقه‌بندی متن، روش پیشنهادی برای تولیدکنندگان اصلی تجهیزات (OEM) جهت ارائه پشتیبانی از سیستم طبقه‌بندی متن است. سرویس طبقه‌بندی متن می‌تواند بخشی از هر APK سیستم باشد و در صورت لزوم به‌روزرسانی شود.

اندروید ۹ شامل یک پیاده‌سازی پیش‌فرض از سرویس طبقه‌بندی متن ( TextClassifierImpl ) است که تا زمانی که آن را با یک پیاده‌سازی سفارشی از سرویس طبقه‌بندی متن جایگزین نکنید، استفاده خواهد شد.

پیاده‌سازی سرویس طبقه‌بندی متن سفارشی

بخش‌های زیر نحوه پیاده‌سازی یک سرویس طبقه‌بندی متن سفارشی که شما توسعه می‌دهید را شرح می‌دهند.

سرویس android.service.textclassifier.TextClassifierService را گسترش دهید

public final class TextClassifierServiceImpl
        extends TextClassifierService {

    // Returns TextClassifierImpl.
    private final TextClassifier tc = getLocalTextClassifier();

    @Override
    public void onSuggestSelection(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextSelection.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextSelection> callback) {
        CompletableFuture.supplyAsync(
                () -> tc.suggestSelection(request))
                .thenAccept(r -> callback.onSuccess(r));
    }

    @Override
    public void onClassifyText(
            @Nullable TextClassificationSessionId sessionId,
		@NonNull TextClassification.Request request,
		@NonNull CancellationSignal cancellationSignal,
		@NonNull Callback<TextClassification> callback) {
        ...
    }

    @Override
    public void onGenerateLinks(
            @Nullable TextClassificationSessionId sessionId,
            @NonNull TextLinks.Request request,
            @NonNull CancellationSignal cancellationSignal,
            @NonNull Callback<TextLinks> callback) {
        ...
    }
    ...
}

تعریف سرویس در مانیفست اندروید

[فایل اندروید مانیفست.xml]

<service android:name=".TextClassifierServiceImpl"
  android:permission="android.permission.BIND_TEXTCLASSIFIER_SERVICE">
    <intent-filter>
      <action android:name=
        "android.service.textclassifier.TextClassifierService"/>
    </intent-filter>
</service>

توجه داشته باشید که سرویس باید به مجوز android.permission.BIND_TEXTCLASSIFIER_SERVICE نیاز داشته باشد و باید اکشن android.service.textclassifier.TextClassifierService را مشخص کند.

یک سرویس طبقه‌بندی متن پیش‌فرض سیستم را در پوشش پیکربندی تنظیم کنید

[ پیکربندی.xml ]

<string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>

سرویس طبقه‌بندی متن را در تصویر سیستم بسازید

سرویس طبقه‌بندی متن سفارشی شما می‌تواند یک APK مستقل باشد که در تصویر سیستم تعبیه شده است یا بخشی از یک APK سیستم دیگر باشد. سیستم از PackageManager.MATCH_SYSTEM_ONLY برای حل مشکل سرویس استفاده می‌کند.

آزمایش

تست‌ها را در android.view.textclassifier.cts اجرا کنید.

سایر تغییرات طبقه‌بندی متن در اندروید ۹

به بررسی ماژول‌های زبان نصب‌شده مراجعه کنید.

فایل‌های مدل اندروید ۹ با فایل‌های مدل اندروید ۸.x سازگار نیستند.

فایل‌های مدل اندروید ۹ به جای textclassifier.smartselection.en.model در اندروید ۸.x، الگوی نامگذاری texclassifier.[language-code].model (برای مثال، textclassifier.en.model ) را دارند.

جدیدترین فایل‌های مدل طبقه‌بندی متن را دریافت کنید

برای به دست آوردن جدیدترین مدل‌ها، می‌توان اسکریپت زیر را اجرا کرد که مدل‌های TextClassifier را در درخت منبع به‌روزرسانی می‌کند:

external/libtextclassifier/native/models/update.sh

طبقه‌بندی‌کننده متن نسخه ۸.۱ اندروید

اندروید ۸.۱ رابط برنامه‌نویسی کاربردی TextClassfier را برای پیاده‌سازی طبقه‌بندی متن معرفی کرد.

TextClassificationManager tcm =
    context.getSystemService(TextClassificationManager.class);
TextClassifier classifier = tcm.getTextClassifier();
TextSelection selection = classifier.suggestSelection(...);
TextClassification classification = classifier.classifyText(...);

توسعه‌دهندگان می‌توانند یک طبقه‌بندی‌کننده متن سفارشی تنظیم کنند:

tcm.setTextClassifier(customTextClassifier);

اما اگر یک توسعه‌دهنده برنامه، کلاسه‌بندی متن را روی null تنظیم کند، یک کلاسه‌بندی متن پیش‌فرض سیستم برای getTextClassifier() برگردانده می‌شود.

به android.view.textclassifier.TextClassifierImpl مراجعه کنید.

TextView و WebView از TextClassifier برای انتخاب هوشمند و ویژگی‌های اشتراک‌گذاری هوشمند متن استفاده می‌کنند.

کاربرد طبقه‌بندی‌کننده متن

شکل ۱. کاربرد طبقه‌بندی‌کننده متن

مدل‌های شبکه عصبی طبقه‌بندی‌کننده متن

پروژه متن‌باز اندروید (AOSP) تعدادی مدل شبکه عصبی برای طبقه‌بندی متن ارائه می‌دهد. هر فایل مدل برای یک زبان واحد آموزش داده شده است. می‌توانید هر ترکیبی از مدل‌ها را نصب کنید. مدل‌ها در موارد زیر تعریف می‌شوند:

external/libtextclassifier/Android.mk

مدل‌های زبانی را از قبل روی دستگاه‌ها نصب کنید

شما می‌توانید مجموعه‌ای از مدل‌های زبان را مشخص کرده و آنها را روی یک دستگاه نصب کنید:

# -----------------------
# Smart Selection bundles
# -----------------------

include $(CLEAR_VARS)
LOCAL_MODULE           := textclassifier.smartselection.bundle1
LOCAL_REQUIRED_MODULES := textclassifier.smartselection.en.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.es.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.de.model
LOCAL_REQUIRED_MODULES += textclassifier.smartselection.fr.model
include $(BUILD_STATIC_LIBRARY)

برای مثال، در device/google/marlin/device-common.mk .

# TextClassifier smart selection model files
PRODUCT_PACKAGES += \
    textclassifier.smartselection.bundle1

ماژول‌های زبان نصب‌شده را بررسی کنید

از ADB برای فهرست کردن فایل‌های موجود در دایرکتوری استفاده کنید:

$ adb shell ls -l /etc/textclassifier
-rw-r--r-- 1 root root ... textclassifier.smartselection.de.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.en.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.es.model
-rw-r--r-- 1 root root ... textclassifier.smartselection.fr.model

به‌روزرسانی‌های مدل

مدل‌ها را می‌توان یا با داشتن یک مدل جدید به عنوان بخشی از به‌روزرسانی تصویر سیستم، یا به صورت پویا با داشتن یک جزء سیستم که از طریق API ACTION_UPDATE_SMART_SELECTION به‌روزرسانی می‌کند، به‌روزرسانی کرد. با پخش این API سیستم، چارچوب قادر است مدل زبان زبان تنظیم‌شده فعلی را به‌روزرسانی کند. خود مدل‌ها حاوی زبان پشتیبانی‌شده و شماره نسخه هستند، بنابراین از آخرین مدل مناسب استفاده می‌شود.

بنابراین نیازی نیست مدل‌ها را برای همه زبان‌ها از قبل بارگذاری کنید زیرا می‌توان آنها را بعداً اضافه کرد. اگر هیچ فایل مدلی برای زبان مشخص شده پیدا نشود، طبقه‌بندی متن مقادیر بدون عملیات را برمی‌گرداند.

تست‌های مجموعه تست سازگاری

تست‌های مرتبط با مجموعه تست سازگاری اندروید (CTS) را می‌توانید در موارد زیر بیابید:

cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java

cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java

  • testSmartSelection
  • testSmartSelection_dragSelection
  • testSmartSelection_resetSelection