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

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

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

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

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

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

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

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