テキスト分類器は、機械学習技術を使用して、デベロッパーによるテキスト分類を支援します。
Android 11 リリースのテキスト分類器
Android 11 では、ExtServices モジュールに、テキスト分類器の更新可能なデフォルト実装が導入されています。Android 11 以上を搭載したデバイスでは、getTextClassifier()
メソッドが ExtServices モジュールにあるこのデフォルト実装を返します。TextClassifierService
のこの実装はメインライン OTA アップデートにより更新できるため、デバイス メーカーはこちらを使用することをおすすめします。
また、Android 11 では、以前 Android 8.1 で導入されたローカル テキスト分類器のデフォルト実装が削除されました。その結果、getLocalTextClassifier()
は NO_OP
テキスト分類器を返します。ローカル実装の代わりに、getDefaultTextClassifierImplementation()
メソッドを使用してください。
独自のテキスト分類アルゴリズムを使用するデバイス メーカーは、config.xml
ファイルで config_defaultTextClassifierPackage
を指定してカスタム テキスト分類器を実装できます。この構成が指定されていない場合は、デフォルトのシステム実装が使用されます。カスタム実装は、TextClassifierService.getDefaultTextClassifierImplementation(Context)
を呼び出すことにより、デフォルト実装のインスタンスを取得できます。詳細については、カスタム テキスト分類器サービスを実装するをご覧ください。
テスト
テキスト分類サービスの実装を検証するには、platform/cts/tests/tests/textclassifier/
にある互換性テストスイート(CTS)テストを使用します。
Android 10 リリースでのテキスト分類器の機能強化
Android 10 では、TextClassifier API に suggestConversationActions
と detectLanguage
の 2 つのメソッドが導入されています。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
)であり、Android 8.x の textclassifier.smartselection.en.model
とは異なります。
最新のテキスト分類モデルファイルを取得する
最新のモデルを取得するには、次のスクリプトを実行します。実行すると、ソースツリーの 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)には、テキストを分類するためのニューラル ネットワーク モデルが多数用意されています。各モデルファイルは、それぞれ 1 つの言語用にトレーニングされています。任意の組み合わせのモデルをインストールできます。モデルは以下で定義されます。
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