MediaPipe Text Classifier 작업을 사용하면 텍스트를 정의된 카테고리 집합으로 분류할 수 있습니다. 긍정적 또는 부정적 감정인지에 따라 구분됩니다. 카테고리는 모델이 학습한 방식을 보여줍니다. 이 안내에서는 Text Classifier를 다시 한 번 살펴봤습니다.
이 작업의 동작을 확인하려면 demo Google Cloud의 기능, 모델 및 구성 옵션에 대해서는 개요를 참조하세요.
코드 예
Text Classifier의 코드 예는 다음과 같은 간단한 구현을 제공합니다. 참조하세요 이 코드는 이 작업을 테스트하고 자체 텍스트 분류 앱을 빌드할 수 있습니다. 여기에서 텍스트 분류 기준 예시 코드 를 참조하세요.
코드 다운로드
다음 안내에서는 예시의 로컬 사본을 만드는 방법을 보여줍니다. git 버전 제어 명령줄 도구를 사용하여 코드를 실행합니다.
<ph type="x-smartling-placeholder">예시 코드를 다운로드하려면 다음 안내를 따르세요.
- 다음 명령어를 사용하여 git 저장소를 클론합니다.
git clone https://github.com/google-ai-edge/mediapipe-samples
- 원하는 경우 스파스 체크아웃을 사용하도록 git 인스턴스를 구성합니다.
따라서 Text Classifier 예시 앱의 파일만 있습니다.
cd mediapipe git sparse-checkout init --cone git sparse-checkout set examples/text_classification/android
Android 스튜디오에서 예시를 설정하고 실행하는 방법에 관한 안내는 이 모듈의 예제 코드 설정 지침을 Android 설정 가이드
주요 구성요소
다음 파일에는 텍스트 분류에 중요한 코드가 포함되어 있습니다. 예시 앱:
- TextClassifierHelper.kt - Text Classifier를 초기화하고 모델 선택을 처리합니다.
- MainActivity.kt:
TextClassifierHelper
호출을 포함하여 애플리케이션을 구현합니다.ResultsAdapter
입니다. - ResultsAdapter.kt - 결과를 처리하고 형식을 지정합니다.
설정
이 섹션에서는 개발 환경을 설정하는 주요 단계를 설명하고 Text Classifier를 사용할 수 있습니다. 일반적인 정보 다음과 같은 MediaPipe 작업을 사용하기 위한 개발 환경 설정 자세한 내용은 Android 설정 가이드
<ph type="x-smartling-placeholder">종속 항목
Text Classifier는 com.google.mediapipe:tasks-text
라이브러리를 사용합니다. 추가
Android 앱 개발 프로젝트의 build.gradle
파일에 종속 항목을 추가해야 합니다.
다음 코드를 사용하여 필요한 종속 항목을 가져올 수 있습니다.
dependencies {
implementation 'com.google.mediapipe:tasks-text:latest.release'
}
모델
MediaPipe Text Classifier 작업에는 이와 호환되는 학습된 모델이 필요합니다. 태스크에 맞추는 것입니다. Text Classifier에 사용할 수 있는 학습된 모델에 대한 자세한 내용은 다음을 참고하세요. 작업 개요의 모델 섹션을 확인합니다.
모델을 선택하고 다운로드한 후 프로젝트 assets
내에 저장합니다.
디렉터리:
<dev-project-root>/src/main/assets
BaseOptions.Builder.setModelAssetPath()
메서드를 사용하여 경로를 지정합니다.
지정할 수도 있습니다 코드 예는 다음 섹션을 참고하세요.
할 일 만들기
Text Classifier TextClassifier.createFrom...()
함수 중 하나를 사용하여 다음 작업을 할 수 있습니다.
추론 실행을 위한 작업을 준비합니다. createFromFile()
를 사용하면 됩니다.
학습된 모델 파일에 대한 상대 또는 절대 경로를 사용하여 함수를 생성합니다. 코드
아래 예는 TextClassifier.createFromOptions()
를 사용하는 방법을 보여줍니다.
함수를 사용하세요. 사용 가능한 구성 옵션에 대한 자세한 내용은 다음을 참조하세요.
구성 옵션.
다음 코드는 이 작업을 빌드하고 구성하는 방법을 보여줍니다.
// no directory path required if model file is in src/main/assets:
String currentModel = "text_classifier_model.tflite";
fun initClassifier() {
val baseOptionsBuilder = BaseOptions.builder()
.setModelAssetPath(currentModel)
try {
val baseOptions = baseOptionsBuilder.build()
val optionsBuilder = TextClassifier.TextClassifierOptions.builder()
.setBaseOptions(baseOptions)
val options = optionsBuilder.build()
textClassifier = TextClassifier.createFromOptions(context, options)
} catch (e: IllegalStateException) { // exception handling
}
}
코드 예제에서 작업을 만드는 방법의 예를 확인할 수 있습니다.
TextClassifierHelper
클래스 initClassifier()
함수.
구성 옵션
이 작업에는 Android 앱을 위한 다음과 같은 구성 옵션이 있습니다.
옵션 이름 | 설명 | 값 범위 | 기본값 |
---|---|---|---|
displayNamesLocale |
작업 모델의 메타데이터입니다(있는 경우). 기본값은 en 입니다.
영어입니다. 커스텀 모델의 메타데이터에 현지화된 라벨을 추가할 수 있습니다.
TensorFlow Lite Metadata Writer API 사용
| 언어 코드 | en |
maxResults |
최고 점수를 매긴 분류 결과의 최대 개수(선택사항)를 반환합니다. < 0이면 사용 가능한 모든 결과가 반환됩니다. | 모든 양수 | -1 |
scoreThreshold |
제공된 값을 재정의하는 예측 점수 임곗값을 설정합니다. 모델 메타데이터 (있는 경우) 이 값 미만의 결과는 거부됩니다. | 모든 부동 소수점 수 | 설정되지 않음 |
categoryAllowlist |
허용되는 카테고리 이름의 목록(선택사항)을 설정합니다. 비어 있지 않은 경우
카테고리 이름이 이 집합에 없는 분류 결과는
표시됩니다. 중복되거나 알 수 없는 카테고리 이름은 무시됩니다.
이 옵션은 categoryDenylist 와 상호 배타적이며
둘 다 오류가 발생합니다. |
모든 문자열 | 설정되지 않음 |
categoryDenylist |
허용되지 않는 카테고리 이름의 목록(선택사항)을 설정합니다. 만약
비어 있지 않음. 카테고리 이름이 이 세트에 포함된 분류 결과가 필터링됩니다.
있습니다. 중복되거나 알 수 없는 카테고리 이름은 무시됩니다. 이 옵션은
categoryAllowlist 와 함께 사용할 수 없으며 두 가지를 모두 사용하면 오류가 발생합니다. |
모든 문자열 | 설정되지 않음 |
데이터 준비
Text Classifier는 텍스트 (String
) 데이터와 함께 사용할 수 있습니다. 작업에서 데이터 입력을 처리함
전처리(토큰화 및 텐서 전처리 포함)
모든 사전 처리는 classify()
함수 내에서 처리됩니다. 필요하지 않음
를 사용합니다.
String inputText = "The input text to be classified.";
작업 실행
Text Classifier는 TextClassifier.classify()
함수를 사용하여
제공합니다. 분류 실행을 위해 별도의 실행 스레드 사용
앱에서 Android 사용자 인터페이스 스레드가 차단되는 것을 방지할 수 있습니다.
다음 코드는 작업으로 처리를 실행하는 방법을 보여줍니다. 모델을 학습시키는 작업도 반복해야 합니다
fun classify(text: String) {
executor = ScheduledThreadPoolExecutor(1)
executor.execute {
val results = textClassifier.classify(text)
listener.onResult(results)
}
}
코드 예제에서 작업을 실행하는 방법의 예를 확인할 수 있습니다.
TextClassifierHelper
클래스 classify()
함수.
결과 처리 및 표시
Text Classifier는 목록이 포함된 TextClassifierResult
를 출력합니다.
카테고리를 정하는 것입니다. 카테고리는
사용할 수 있습니다. 다른 카테고리를 원한다면 다른 모델을 선택하세요.
기존 항목을 다시 학습시킵니다
다음은 이 작업의 출력 데이터 예시를 보여줍니다.
TextClassificationResult:
Classification #0 (single classification head):
ClassificationEntry #0:
Category #0:
category name: "positive"
score: 0.8904
index: 0
Category #1:
category name: "negative"
score: 0.1096
index: 1
이 결과는 입력 텍스트에 BERT-classifier를 실행하여 얻은 것입니다.
"an imperfect but overall entertaining mystery"
입니다.
코드 예에서는 결과를 표시하는 방법의 예를 확인할 수 있습니다.
ResultsAdapter
클래스와 ViewHolder
내부 클래스가 있습니다.