יישום של מסווג טקסט

הכלי לסיווג טקסט משתמש בטכניקות של למידת מכונה כדי לעזור למפתחים לסווג טקסט.

מסווג טקסט של גרסה של Android 11

ב-Android 11 נוספה הטמעה ברירת מחדל של שירות סיווג הטקסט במודול ExtServices, שניתן לעדכן אותה. במכשירים עם Android מגרסה 11 ואילך, ה-method getTextClassifier() מחזירה את הטמעת ברירת המחדל הזו במודול ExtServices. ליצרני מכשירים מומלץ להשתמש ביישום הזה של TextClassifierService, כי אפשר לעדכן אותו באמצעות עדכוני OTA של Mainline.

מערכת Android 11 מסירה גם את הטמעת ברירת המחדל של סיווג הטקסט המקומי ב- Android 8.1. כתוצאה מכך, הפונקציה getLocalTextClassifier() מחזירה סיווג טקסט מסוג NO_OP. במקום בהטמעה מקומית, צריך להשתמש ב-method 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) שמוגדר כברירת מחדל, אלא אם מחליפים אותו בהטמעה של שירות לסיווג טקסט בהתאמה אישית.

הטמעת שירות מותאם אישית של סיווג טקסט

בחלקים הבאים מוסבר איך להטמיע שירות בהתאמה אישית לסיווג טקסט שאתם מפתחים.

הרחבה של 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

מסווג טקסט בגרסה 8.1 של Android

ב-Android 8.1 הושק TextClassifier 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

מודלים של נוירונים מלאכותיים לסיווג טקסט

בפרויקט הקוד הפתוח של 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 של המערכת. שידור ה-Intent של ה-API של המערכת מאפשר ל-framework לעדכן את מודל השפה של השפה שמוגדרת כרגע. המודלים עצמם מכילים את השפה הנתמכת ומספר גרסה, כדי שנעשה שימוש במודל המתאים העדכני ביותר.

כך שאין צורך לטעון מראש מודלים לכל השפות כי אפשר להוסיף אותם מאוחר יותר. אם לא נמצא קובץ מודל בשפה שצוינה, סיווג הטקסט יחזיר ערכים של 'לא-תפעול'.

בדיקות של חבילה לבדיקות תאימות (CTS)

ניתן למצוא את הבדיקות המשויכות של חבילת בדיקת התאימות ל-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