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