تنفيذ مصنف النص

يستخدم مصنف النص تقنيات التعلم الآلي لمساعدة المطورين على تصنيف النص.

مصنف نص إصدار 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) . لمزيد من المعلومات ، راجع تنفيذ خدمة مصنف نص مخصص .

اختبارات

للتحقق من صحة تنفيذك لخدمة مصنف النص ، استخدم اختبارات Compatibility Test Suite (CTS) في platform/cts/tests/tests/textclassifier/ .

تحسينات مصنف نص إصدار Android 10

يقدم Android 10 طريقتين لواجهة برمجة تطبيقات TextClassifier: وهما: 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 ) والذي يتم استخدامه إلا إذا قمت باستبداله بتطبيق خدمة مصنف نص مخصص.

تنفيذ خدمة مصنّف نص مخصص

تصف الأقسام التالية كيفية تنفيذ خدمة مصنف نص مخصص تقوم بتطويره.

قم بتوسيع 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 ويجب أن تحدد إجراء intent 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 8.1

قدم 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 للتحديد الذكي وميزات مشاركة النص الذكية.

استخدام مصنف النص

الشكل 1. استخدام 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 . من خلال بث نية واجهة برمجة التطبيقات للنظام ، يكون الإطار قادرًا على تحديث نموذج اللغة للغة المحددة حاليًا. تحتوي النماذج نفسها على اللغة المدعومة ورقم إصدار لذلك يتم استخدام أحدث طراز مناسب.

لذلك لا تحتاج إلى تحميل النماذج مسبقًا لجميع اللغات لأنه يمكن إضافتها لاحقًا. إذا لم يتم العثور على ملف نموذج للغة المحددة ، فإن تصنيف النص يُرجع قيم no-op.

اختبارات مجموعة اختبار التوافق

يمكن العثور على اختبارات Android Compatibility Test Suite (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