ตัวแยกประเภทข้อความใช้เทคนิคแมชชีนเลิร์นนิงเพื่อช่วยนักพัฒนาซอฟต์แวร์ ในการแยกประเภทข้อความ
เปิดตัวตัวแยกประเภทข้อความใน 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
หากต้องการเปิดตัวอุปกรณ์ที่มีไฟล์โมเดลล่าสุดในอิมเมจจากโรงงาน ให้ทำดังนี้
ดึงข้อมูลไฟล์โมเดลล่าสุด
external/libtextclassifier/models/update.sh
- เปลี่ยนชื่อไฟล์ที่ดาวน์โหลดเพื่อแทนที่ไฟล์ที่มีอยู่
- ยืนยันการตั้งค่า
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