Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

텍스트 분류 구현

텍스트 분류는 개발자가 텍스트를 쉽게 분류할 수 있도록 머신러닝 기술을 사용합니다.

Android 10 버전의 텍스트 분류 개선사항

Android 10에서는 suggestConversationActionsdetectLanguage, 이렇게 두 가지 메서드가 TextClassifier API에 추가되었습니다. suggestConversationActions 메서드는 특정 대화에서 추천 답변 및 작업을 생성하며, detectLanguage 메서드는 텍스트 언어를 감지합니다.

이러한 메서드의 모델 파일은 아래에 나와 있으며 external/libtextclassifier/models/에서 찾아볼 수 있습니다.

  • suggestionConversationActions: actions_suggestions.universal.model
  • detectLanguage: lang_id.model

공장 출고 시 이미지의 최신 모델로 기기를 출시하려면 다음을 수행하세요.

  1. 최신 모델 파일을 가져옵니다.

        external/libtextclassifier/models/update.sh
        
  2. 다운로드한 파일의 이름을 변경하고 기존 이름으로 교체합니다.
  3. 설정을 확인합니다.
        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에서는 새로운 Text Classifier 서비스를 통해 Android 8.1에 도입되었던 텍스트 분류 프레임워크를 확장했습니다 . Text Classifier 서비스는 OEM이 텍스트 분류 시스템을 지원하기 위해 사용하면 좋은 권장 방법입니다. The Text Classifier 서비스는 시스템 APK의 일부일 수 있으며 필요한 경우 업데이트할 수 있습니다.

Android 9에는 맞춤 Text Classifier 서비스 구현으로 교체하지 않는 이상 사용되는 기본적인 Text Classifier 서비스 구현(TextClassifierImpl)이 도입되었습니다.

맞춤 Text Classifier 서비스 구현

다음 섹션에서는 자체 개발한 Text Classifier 서비스를 구현하기 위한 방법에 대해 설명합니다.

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 오버레이에 시스템 기본 Text Classifier 서비스 설정

[config.xml]

    <string name="config_defaultTextClassifierPackage" translatable="false">com.example.textclassifierservice</string>

Text Classifier 서비스를 시스템 이미지에 빌드

맞춤 Text Classifier 서비스는 시스템 이미지나 또 다른 시스템 APK의 일부에 빌드된 독립형 APK일 수 있습니다. 시스템은 PackageManager.MATCH_SYSTEM_ONLY를 사용하여 서비스를 리졸브합니다.

테스트

android.view.textclassifier.cts에서 테스트 실행

Android 9의 기타 텍스트 분류 변경사항

자세한 내용은 설치된 언어 모듈 검사를 참조하세요.

Android 9 모델 파일은 Android 8.x 모델 파일과 호환됩니다.

Android 9 모델 파일의 이름 지정 패턴에서는 Android 8.x의 textclassifier.smartselection.en.model 대신 texclassifier.[language-code].model(예: textclassifier.en.model)이 사용됩니다.

최신 텍스트 분류 모델 파일 가져오기

다음 스크립트를 실행하여 최신 모델을 가져올 수 있습니다. 이는 소스 트리의 TextClassifier 모델을 업데이트합니다.

    
    external/libtextclassifier/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(...);
    

개발자는 원하는 경우 맞춤 text classifier를 설정할 수 있습니다.

tcm.setTextClassifier(customTextClassifier);

하지만 앱 개발자가 text classifier를 null로 설정할 경우 시스템 기본 text classifier는 getTextClassifier()에 대해 반환됩니다.

참조: android.view.textclassifier.TextClassifierImpl

TextView 및 WebView는 스마트한 선택 및 텍스트 공유 기능을 위해 TextClassifier를 사용합니다.

그림 1. 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