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