طبقهبندیکننده نوشتار از تکنیکهای یادگیری ماشین برای کمک به توسعهدهندگان در طبقهبندی نوشتار استفاده میکند.
طبقهبندیکننده نوشتار نسخه 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.modeldetectLanguage: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 را با سرویس جدید طبقهبندی نوشتار گسترش داد. سرویس طبقهبندی نوشتار روش توصیهشدهای برای سازندگان اصلی محصول است تا از سیستم طبقهبندی نوشتار پشتیبانی کنند. سرویس طبقهبندی نوشتار میتواند بخشی از هر APK سیستم باشد و درصورت لزوم بهروز شود.
Android 9 شامل پیادهسازی سرویس طبقهبندیکننده نوشتار پیشفرض (
TextClassifierImpl) است که استفاده میشود، مگراینکه آن را با پیادهسازی سرویس طبقهبندیکننده نوشتار سفارشی جایگزین کنید.
پیادهسازی سرویس طبقهبندی نوشتار سفارشی
بخشهای زیر نحوه پیادهسازی سرویس طبقهبندی نوشتار سفارشی را که توسعه میدهید شرح میدهد.
Extend 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
Android 8.1 میانای برنامهسازی کاربردی TextClassfier را برای پیادهسازی طبقهبندی نوشتار معرفی کرد.
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
مدلهای شبکه عصبی 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 سیستم راهاندازی میکند، بهروز کرد. با همهفرستی این هدف میانای برنامهسازی کاربردی سیستم، چارچوب میتواند
مدل زبان زبان تنظیمشده فعلی را بهروز کند. خود مدلها حاوی زبان پشتیبانیشده و شماره نسخه هستند تا از جدیدترین مدل مناسب استفاده شود.
بنابراین نیازی نیست مدلها را برای همه زبانها پیشبار کنید زیرا میتوانید آنها را بعداً اضافه کنید. اگر فایل مدلی برای زبان مشخصشده پیدا نشود، طبقهبندی نوشتار مقادیر بدون عملیات برمیگرداند.
آزمایشهای «مجموعه آزمایش سازگاری»
آزمایشهای مجموعه آزمون سازگاری Android (CTS) مرتبط را میتوانید در اینجا پیدا کنید:
cts/tests/tests/view/src/android/view/textclassifier/cts/TextClassificationManagerTest.java
cts/tests/tests/widget/src/android/widget/cts/TextViewTest.java
testSmartSelectiontestSmartSelection_dragSelectiontestSmartSelection_resetSelection