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

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

סיווג טקסט לשחרור אנדרואיד 11

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

אנדרואיד 11 גם מסירה את יישום ברירת המחדל של סיווג הטקסט המקומי שהוצג בעבר באנדרואיד 8.1 . כתוצאה מכך, getLocalTextClassifier() מחזירה מסווג טקסט NO_OP . במקום היישום המקומי, עליך להשתמש בשיטת getDefaultTextClassifierImplementation() ‎.

עבור יצרני מכשירים שעשויים לרצות להשתמש באלגוריתמים משלהם לסיווג טקסט, הם יכולים ליישם שירות סיווג טקסט מותאם אישית על ידי ציון config_defaultTextClassifierPackage בקובץ config.xml . אם תצורה זו לא צוינה, נעשה שימוש ביישום מערכת ברירת המחדל. יישומים מותאמים אישית יכולים לקבל מופע של מימוש ברירת המחדל על ידי קריאה ל- TextClassifierService.getDefaultTextClassifierImplementation(Context) . למידע נוסף, ראה הטמעת שירות סיווג טקסט מותאם אישית .

בדיקה

כדי לאמת את היישום שלך של שירות מסווג הטקסט, השתמש במבחני חבילת בדיקת התאימות (CTS) platform/cts/tests/tests/textclassifier/ .

שיפורים בסיווג טקסט של אנדרואיד 10

אנדרואיד 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

אנדרואיד 9 הרחיבה את מסגרת סיווג הטקסט שהוצגה באנדרואיד 8.1 עם שירות סיווג הטקסט החדש. שירות סיווג הטקסט הוא הדרך המומלצת עבור יצרני OEM לספק תמיכה במערכת סיווג טקסט. שירות סיווג הטקסט יכול להיות חלק מכל APK של מערכת וניתן לעדכן אותו בעת הצורך.

אנדרואיד 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) {
        ...
    }
    ...
}

הגדר את השירות במניפסט של אנדרואיד

[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 .

שינויים אחרים בסיווג טקסט באנדרואיד 9

עיין בבדיקת מודולי שפה מותקנים .

קבצי דגם אנדרואיד 9 אינם תואמים לקבצי דגם אנדרואיד 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

אנדרואיד 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 מודלים neural-net

פרויקט הקוד הפתוח של אנדרואיד (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.

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

ניתן למצוא את הבדיקות המשויכות ל-Android Compatibility Test Suite (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