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

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

طبقه‌بندی‌کننده نوشتار نسخه Android 11

‫Android 11 پیاده‌سازی پیش‌فرض به‌روزرسانی‌پذیری از سرویس طبقه‌بندی نوشتار را در واحد ExtServices معرفی می‌کند. در دستگاه‌های دارای Android 11 یا بالاتر، روش getTextClassifier() این پیاده‌سازی پیش‌فرض را در واحد ExtServices برمی‌گرداند. توصیه می‌شود سازندگان دستگاه از این پیاده‌سازی TextClassifierService استفاده کنند زیرا می‌توان آن را ازطریق به‌روزرسانی‌های Mainline OTA به‌روزرسانی کرد.

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

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

آزمایش

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

بهبودهای طبقه‌بندی نوشتار در نسخه Android 10

‫Android 10 دو روش برای 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 }

بهبودهای طبقه‌بندی‌کننده نوشتار نسخه Android 9

‫Android 9 چارچوب طبقه‌بندی نوشتار معرفی‌شده در Android 8.1 را با سرویس جدید طبقه‌بندی نوشتار گسترش داد. سرویس طبقه‌بندی نوشتار روش توصیه‌شده‌ای برای سازندگان اصلی محصول است تا از سیستم طبقه‌بندی نوشتار پشتیبانی کنند. سرویس طبقه‌بندی نوشتار می‌تواند بخشی از هر APK سیستم باشد و درصورت لزوم به‌روز شود.

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

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

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

Extend 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) {
        ...
    }
    ...
}

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

[AndroidManifest.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 را مشخص کند.

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

[config.xml]

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

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

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

آزمایش

اجرای آزمایش‌ها در android.view.textclassifier.cts.

دیگر تغییرات طبقه‌بندی نوشتار در Android 9

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

فایل‌های مدل Android 9 با فایل‌های مدل Android 8.x ناسازگار است.

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

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

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

external/libtextclassifier/native/models/update.sh

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

‫Android 8.1 میانای برنامه‌سازی کاربردی 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 برای انتخاب هوشمند و ویژگی‌های هم‌رسانی نوشتار هوشمند استفاده می‌کنند.

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

شکل ۱. استفاده از TextClassifier

مدل‌های شبکه عصبی TextClassifier

«پروژه منبع باز Android»‏ (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 سیستم راه‌اندازی می‌کند، به‌روز کرد. با همه‌فرستی این هدف میانای برنامه‌سازی کاربردی سیستم، چارچوب می‌تواند مدل زبان زبان تنظیم‌شده فعلی را به‌روز کند. خود مدل‌ها حاوی زبان پشتیبانی‌شده و شماره نسخه هستند تا از جدیدترین مدل مناسب استفاده شود.

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

آزمایش‌های «مجموعه آزمایش سازگاری»

آزمایش‌های مجموعه آزمون سازگاری Android (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