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

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

מסווג טקסט בגרסת Android 11

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

קובצי המודל של ה-methods האלה מוצגים למטה והם נמצאים ב- 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 הושקה ממשק ה-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

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

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

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