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