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

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

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

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

Android 11 ยังเอาการดำเนินการในท้องถิ่นเริ่มต้นลักษณนามข้อความแนะนำก่อนหน้านี้ใน Android 8.1 เป็นผลให้ getLocalTextClassifier() ส่งกลับ NO_OP ลักษณนามข้อความ แทนการดำเนินงานในท้องถิ่นที่คุณควรใช้ getDefaultTextClassifierImplementation() วิธีการ

สำหรับผู้ผลิตอุปกรณ์ที่อาจต้องการที่จะใช้ขั้นตอนวิธีการจัดหมวดหมู่ข้อความของตัวเองพวกเขาสามารถใช้บริการลักษณนามข้อความที่กำหนดเองโดยระบุ config_defaultTextClassifierPackage ใน config.xml ไฟล์ หากไม่ได้ระบุการกำหนดค่านี้ ระบบจะใช้การนำระบบเริ่มต้นไปใช้ การใช้งานที่กำหนดเองได้รับตัวอย่างของการดำเนินงานที่เริ่มต้นด้วยการเรียก TextClassifierService.getDefaultTextClassifierImplementation(Context) สำหรับข้อมูลเพิ่มเติมโปรดดูที่ การใช้บริการลักษณนามข้อความที่กำหนดเอง

การทดสอบ

ในการตรวจสอบการดำเนินงานของคุณในการให้บริการลักษณนามข้อความใช้การทดสอบความเข้ากันได้ Test Suite (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 (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