تنفيذ أداة تصنيف النصوص

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

أداة تصنيف النص في إصدار Android 11

يقدّم نظام التشغيل Android 11 عملية تنفيذ تلقائية قابلة للتعديل لخدمة تصنيف النصوص في وحدة ExtServices. على الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android أو إصدار أحدث، تعرض الطريقة getTextClassifier() هذه التنفيذ التلقائي في وحدة ExtServices. ننصح مصنّعي الأجهزة باستخدام هذا التنفيذ من TextClassifierService لأنّه يمكن تحديثه من خلال تحديثات Mainline عبر اتصال لاسلكي.

يزيل نظام التشغيل 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 }

تحسينات على أداة تصنيف النص في الإصدار 9 من Android

أضاف الإصدار 9 من نظام التشغيل Android إلى إطار عمل تصنيف النصوص الذي تم تقديمه في الإصدار 8.1 من نظام التشغيل Android خدمة جديدة لتصنيف النصوص. تُعدّ خدمة تصنيف النصوص الطريقة المقترَحة لمصنّعي المعدات الأصلية لتوفير دعم نظام تصنيف النصوص. يمكن أن تكون خدمة تصنيف النصوص جزءًا من أي حزمة 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

أداة تصنيف النص في الإصدار 8.1 من نظام التشغيل Android

قدّم نظام التشغيل Android 8.1 واجهة برمجة التطبيقات TextClassfier API لتنفيذ تصنيف النصوص.

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 العصبية

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

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

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

يمكن العثور على اختبارات مجموعة أدوات اختبار التوافق (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