הטמעת מסווג טקסט

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

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

ב-Android 11 מוצגת הטמעה שניתנת לעדכון כברירת מחדל של שירות סיווג הטקסט ב מודול ExtServices. במכשירים עם Android מגרסה 11 ואילך, השיטה getTextClassifier() מחזירה את הטמעת ברירת המחדל הזו במודול ExtServices. מומלץ ליצרני מכשירים להשתמש בהטמעה הזו של TextClassifierService כי אפשר לעדכן אותה באמצעות עדכוני OTA של 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 }

שיפורים במסווג הטקסט בגרסה Android 9

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

ב-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

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

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

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

אפשר למצוא את הבדיקות המשויכות של חבילת הבדיקות לתאימות (CTS) של Android במיקומים הבאים:

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