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

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

ตัวแยกประเภทข้อความของ Android 11

Android 11 แนะนำการใช้งานเริ่มต้นที่อัปเดตได้ของบริการตัวแยกประเภทข้อความใน โมดูล ExtServices บนอุปกรณ์ที่ใช้ Android 11 หรือสูงกว่า เมธอด getTextClassifier() จะส่งคืนการใช้งานเริ่มต้นนี้ในโมดูล ExtServices ผู้ผลิตอุปกรณ์แนะนำให้ใช้ TextClassifierService นี้ เนื่องจากสามารถอัปเดตได้ผ่านการอัพเดต Mainline OTA

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

ใช้บริการตัวแยกประเภทข้อความแบบกำหนดเอง

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

ขยาย 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 Open Source (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 (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