ใช้ตัวแยกประเภทข้อความ

ตัวแยกประเภทข้อความใช้เทคนิคแมชชีนเลิร์นนิงเพื่อช่วยนักพัฒนาซอฟต์แวร์ ในการแยกประเภทข้อความ

เปิดตัวตัวแยกประเภทข้อความใน 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 เปิดตัว 2 วิธีสำหรับ 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) ซึ่งจะใช้เว้นแต่คุณจะแทนที่ด้วยการติดตั้งใช้งาน บริการตัวแยกประเภทข้อความที่กำหนดเอง

ใช้บริการเครื่องมือคัดแยกข้อความที่กำหนดเอง

ส่วนต่อไปนี้จะอธิบายวิธีใช้บริการเครื่องมือคัดแยกข้อความที่กำหนดเอง ที่คุณพัฒนาขึ้น

ขยาย 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) {
        ...
    }
    ...
}

กำหนดบริการในไฟล์ Manifest ของ 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 Intent

ตั้งค่าบริการเครื่องมือจัดประเภทข้อความเริ่มต้นของระบบในการวางซ้อนการกำหนดค่า

[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 ของระบบ การออกอากาศ Intent ของ API ระบบนี้ช่วยให้เฟรมเวิร์กสามารถ อัปเดตโมเดลภาษาของภาษาที่ตั้งค่าไว้ในปัจจุบันได้ ตัวโมเดล มีภาษาที่รองรับและหมายเลขเวอร์ชันเพื่อให้ระบบใช้โมเดลล่าสุดที่เหมาะสม

คุณจึงไม่จำเป็นต้องโหลดโมเดลล่วงหน้าสำหรับทุกภาษา เนื่องจากเพิ่มได้ในภายหลัง หากไม่พบไฟล์โมเดลสำหรับภาษาที่ระบุ การแยกประเภทข้อความ จะไม่แสดงค่าใดๆ

การทดสอบชุดเครื่องมือทดสอบความเข้ากันได้

คุณดูการทดสอบชุดเครื่องมือทดสอบความเข้ากันได้ (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