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

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

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

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

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

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

آزمایش کردن

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

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

اندروید 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 }
    

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

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

اندروید 9 شامل اجرای سرویس طبقه‌بندی‌کننده متن پیش‌فرض ( 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) {
        ...
    }
    ...
}

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

[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 اجرا کنید.

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

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

فایل های مدل اندروید 9 با فایل های مدل اندروید 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

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

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

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

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

مدل‌های شبکه عصبی 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 سیستم، چارچوب قادر است مدل زبان زبان تنظیم شده فعلی را به روز کند. خود مدل ها حاوی زبان پشتیبانی شده و شماره نسخه هستند، بنابراین از آخرین مدل مناسب استفاده می شود.

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

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

آزمایش‌های مرتبط با مجموعه تست سازگاری 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