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

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

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

การทดสอบ

ในการตรวจสอบการติดตั้งใช้งานบริการตัวแยกประเภทข้อความ ให้ใช้ การทดสอบชุดทดสอบความเข้ากันได้ (CTS) ใน platform/cts/tests/tests/textclassifier/

การเพิ่มประสิทธิภาพตัวแยกประเภทข้อความที่เผยแพร่สำหรับ Android 10

Android 10 มี 2 วิธีในการ 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) {
        ...
    }
    ...
}

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

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

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

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