TensorFlow Lite 및 Firebase를 사용하여 앱에 기기 내 텍스트 분류 추가 - Android Codelab

1. 개요

텍스트 분류-결과.png

TensorFlow Lite 및 Firebase Codelab을 사용한 텍스트 분류에 오신 것을 환영합니다. 이 Codelab에서는 TensorFlow Lite와 Firebase를 사용하여 텍스트 분류 모델을 학습시키고 앱에 배포하는 방법을 알아봅니다. 이 Codelab은 TensorFlow Lite 예시를 기반으로 합니다.

텍스트 분류는 내용에 따라 텍스트에 태그나 카테고리를 할당하는 프로세스입니다. 이는 감정 분석, 주제 라벨링, 스팸 감지, 의도 감지 등 광범위한 애플리케이션을 갖춘 자연어 처리(NLP)의 기본 작업 중 하나입니다.

감성 분석은 텍스트 분석 기법을 사용하여 텍스트 데이터 내 감정(긍정적, 부정적, 중립적)을 해석하고 분류하는 것입니다. 감정 분석을 통해 기업은 온라인 대화 및 피드백을 통해 제품, 브랜드 또는 서비스에 대한 고객 감정을 식별할 수 있습니다.

이 튜토리얼에서는 감정 분석, 특히 텍스트를 긍정적 또는 부정적으로 분류하기 위한 기계 학습 모델을 구축하는 방법을 보여줍니다. 이는 중요하고 널리 적용 가능한 종류의 기계 학습 문제인 이진 또는 2클래스 분류의 예입니다.

무엇을 배울 것인가

  • TF Lite Model Maker를 사용하여 TF Lite 감정 분석 모델 학습
  • TF Lite 모델을 Firebase ML에 배포하고 앱에서 액세스하세요.
  • TF Lite 작업 라이브러리를 사용하여 TF Lite 감정 분석 모델을 앱에 통합

필요한 것

  • 최신 안드로이드 스튜디오 버전.
  • 샘플 코드.
  • Android 5.0 이상 및 Google Play 서비스 9.8 이상이 설치된 테스트 장치 또는 Google Play 서비스 9.8 이상이 설치된 에뮬레이터
  • 장치를 사용하는 경우 연결 케이블.

이 튜토리얼을 어떻게 활용하시겠습니까?

쭉 읽어보세요 읽고 연습을 완료하세요.

Android 앱 구축 경험을 어떻게 평가하시나요?

초심자 중급 능숙하다

2. 샘플 코드 받기

명령줄에서 GitHub 저장소를 복제합니다.

$ git clone https://github.com/FirebaseExtended/codelab-textclassification-android.git

Git이 설치되어 있지 않은 경우 GitHub 페이지에서 샘플 프로젝트를 다운로드하거나 이 링크를 클릭하여 다운로드할 수도 있습니다.

3. 스타터 앱 가져오기

Android 스튜디오에서 codelab-textclassification-android-master 디렉터리( android_studio_folder.png ) 샘플 코드 다운로드( 파일 > 열기 > .../codelab-textclassification-android-master/start)에서.

이제 Android Studio에서 시작 프로젝트가 열려 있어야 합니다.

4. 스타터 앱 실행

이제 프로젝트를 Android Studio로 가져왔으므로 처음으로 앱을 실행할 준비가 되었습니다. Android 장치를 연결하고 실행 ( 실행.png ) Android 스튜디오 도구 모음에서.

앱이 기기에서 실행되어야 합니다. 여기에는 다음 단계에서 텍스트 분류 모델을 쉽게 통합하고 테스트할 수 있는 간단한 UI만 포함되어 있습니다. 이 시점에서 감정 예측을 시도하면 앱은 일부 더미 결과만 반환합니다.

2fb4e69fafb2e3ed.png

5. Firebase 콘솔 프로젝트 생성

프로젝트에 Firebase 추가

  1. Firebase 콘솔 로 이동합니다.
  2. 프로젝트 추가를 선택합니다.
  3. 프로젝트 이름을 선택하거나 입력합니다.
  4. Firebase 콘솔의 나머지 설정 단계를 따른 다음 프로젝트 만들기(또는 기존 Google 프로젝트를 사용하는 경우 Firebase 추가)를 클릭합니다.

6. 앱에 Firebase 추가

  1. 새 프로젝트의 개요 화면에서 Android 아이콘을 클릭하여 설정 워크플로를 시작하세요.
  2. Codelab의 패키지 이름( org.tensorflow.lite.codelabs.textclassification )을 입력하세요.

앱에 google-services.json 파일 추가

패키지 이름을 추가하고 등록**을 선택한 후 google-services.json** 다운로드를 클릭하여 Firebase Android 구성 파일을 얻은 다음 google-services.json 파일을 프로젝트의 * app * 디렉터리에 복사합니다.

앱에 Google 서비스 플러그인 추가

앱에 Firebase를 추가하려면 build.gradle.kts 파일을 업데이트하는 Firebase 콘솔의 지침을 따르세요.

google-services 플러그인은 google-services.json 파일을 사용하여 Firebase를 사용하도록 애플리케이션을 구성합니다.

프로젝트를 Gradle 파일과 동기화하세요

앱에서 모든 종속 항목을 사용할 수 있도록 하려면 이 시점에서 프로젝트를 Gradle 파일과 동기화해야 합니다. Android Studio 도구 모음에서 파일 > Gradle 파일과 프로젝트 동기화를 선택합니다.

7. Firebase로 앱 실행

이제 JSON 파일로 google-services 플러그인을 구성했으므로 Firebase로 앱을 실행할 준비가 되었습니다. Android 장치를 연결하고 실행 ( 실행.png ) Android 스튜디오 도구 모음에서.

앱이 기기에서 실행되어야 합니다. 이 시점에서도 앱은 여전히 ​​성공적으로 빌드되어야 합니다.

8. 감정 분석 모델 훈련

TensorFlow Lite Model Maker를 사용하여 특정 텍스트의 감정을 예측하는 텍스트 분류 모델을 학습합니다.

이 단계는 Google Colab에서 열 수 있는 Python 노트북으로 표시됩니다. 런타임 > 모두 실행을 선택하여 모든 노트북을 한 번에 실행할 수 있습니다.

Colab에서 열기

이 단계를 마치면 모바일 앱에 배포할 준비가 된 TensorFlow Lite 감정 분석 모델을 갖게 됩니다.

9. Firebase ML에 모델 배포

Firebase ML에 모델을 배포하는 것은 다음 두 가지 주요 이유로 유용합니다.

  1. 앱 설치 크기를 작게 유지하고 필요한 경우에만 모델을 다운로드할 수 있습니다.
  2. 모델은 정기적으로 업데이트될 수 있으며 전체 앱과 다른 릴리스 주기로 업데이트될 수 있습니다.

모델은 콘솔을 통해 배포하거나 Firebase Admin SDK를 사용하여 프로그래밍 방식으로 배포할 수 있습니다. 이 단계에서는 콘솔을 통해 배포하겠습니다.

먼저 Firebase 콘솔을 열고 왼쪽 탐색 패널에서 Machine Learning을 클릭합니다. 처음 여는 경우 '시작하기'를 클릭하세요. 그런 다음 "사용자 정의"로 이동하여 "모델 추가" 버튼을 클릭합니다.

메시지가 표시되면 모델 이름을 sentiment_analysis 로 지정하고 이전 단계에서 Colab에서 다운로드한 파일을 업로드합니다.

3c3c50e6ef12b3b.png

10. Firebase ML에서 모델 다운로드

TFLite 모델이 상대적으로 커질 수 있으므로 Firebase에서 원격 모델을 앱으로 다운로드할 시기를 선택하는 것이 까다로울 수 있습니다. 이상적으로는 앱이 시작될 때 즉시 모델을 로드하지 않는 것이 좋습니다. 모델이 하나의 기능에만 사용되고 사용자가 해당 기능을 전혀 사용하지 않는다면 아무 이유 없이 상당한 양의 데이터를 다운로드하게 되기 때문입니다. Wi-Fi에 연결되어 있을 때만 모델을 가져오는 등의 다운로드 옵션을 설정할 수도 있습니다. 네트워크 연결 없이도 모델을 사용할 수 있도록 하려면 앱 없이 백업으로 모델을 번들로 묶는 것도 중요합니다.

단순화를 위해 기본 번들 모델을 제거하고 앱이 처음 시작될 때 항상 Firebase에서 모델을 다운로드하겠습니다. 이렇게 하면 감정 분석을 실행할 때 Firebase에서 제공하는 모델을 사용하여 추론이 실행되고 있는지 확인할 수 있습니다.

app/build.gradle.kts 파일에 Firebase Machine Learning 종속성을 추가합니다.

앱/build.gradle.kts

이 댓글을 찾으세요:

// TODO 1: Add Firebase ML dependency

그런 다음 다음을 추가합니다.

implementation(platform("com.google.firebase:firebase-bom:32.0.0"))
implementation("com.google.firebase:firebase-ml-modeldownloader:24.1.2")

Android Studio에서 프로젝트 동기화를 요청하면 지금 동기화를 선택하세요.

그런 다음 Firebase에서 모델을 다운로드하는 코드를 추가해 보겠습니다.

MainActivity.java

이 댓글을 찾으세요:

// TODO 2: Implement a method to download TFLite model from Firebase

그런 다음 다음을 추가합니다.

  /** Download model from Firebase ML. */
  private synchronized void downloadModel(String modelName) {
      CustomModelDownloadConditions conditions = new CustomModelDownloadConditions.Builder()
            .requireWifi()
            .build();
      FirebaseModelDownloader.getInstance()
              .getModel("sentiment_analysis", DownloadType.LOCAL_MODEL, conditions)
              .addOnSuccessListener(model -> {
                  try {
                      // TODO 6: Initialize a TextClassifier with the downloaded model

                      predictButton.setEnabled(true);
                  } catch (IOException e) {
                      Log.e(TAG, "Failed to initialize the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model initialization failed.",
                              Toast.LENGTH_LONG)
                              .show();
                      predictButton.setEnabled(false);
                  }
              })
              .addOnFailureListener(e -> {
                      Log.e(TAG, "Failed to download the model. ", e);
                      Toast.makeText(
                              MainActivity.this,
                              "Model download failed, please check your connection.",
                              Toast.LENGTH_LONG)
                              .show();

                      }
              );

}

그런 다음 활동의 onCreate 메서드에서 downloadModel 메서드를 호출합니다.

MainActivity.java

이 댓글을 찾으세요:

// TODO 3: Call the method to download TFLite model

그런 다음 다음을 추가합니다.

downloadModel("sentiment_analysis");

11. 앱에 모델 통합

Tensorflow Lite 작업 라이브러리는 단 몇 줄의 코드만으로 TensorFlow Lite 모델을 앱에 통합하는 데 도움이 됩니다. Firebase에서 다운로드한 TensorFlow Lite 모델을 사용하여 NLClassifier 인스턴스를 초기화하겠습니다. 그런 다음 이를 사용하여 앱 사용자가 입력한 텍스트를 분류하고 그 결과를 UI에 표시합니다.

종속성 추가

앱의 Gradle 파일로 이동하여 앱의 종속 항목에 TensorFlow Lite 작업 라이브러리(텍스트)를 추가하세요.

앱/build.gradle

이 댓글을 찾으세요:

// TODO 4: Add TFLite Task API (Text) dependency

그런 다음 다음을 추가합니다.

implementation("org.tensorflow:tensorflow-lite-task-text:0.3.0")

Android Studio에서 프로젝트 동기화를 요청하면 지금 동기화를 선택하세요.

텍스트 분류자 초기화

그런 다음 작업 라이브러리의 NLClassifier 사용하여 Firebase에서 다운로드한 감정 분석 모델을 로드합니다.

MainActivity.java

NLClassifier 인스턴스 변수를 선언해 보겠습니다. 이 댓글을 찾으세요:

// TODO 5: Define a NLClassifier variable

그런 다음 다음을 추가합니다.

private NLClassifier textClassifier;

Firebase에서 다운로드한 감정 분석 모델을 사용하여 textClassifier 변수를 초기화합니다. 이 댓글을 찾으세요:

// TODO 6: Initialize a TextClassifier with the downloaded model

그런 다음 다음을 추가합니다.

textClassifier = NLClassifier.createFromFile(model.getFile());

텍스트 분류

textClassifier 인스턴스가 설정되면 단일 메소드 호출로 감정 분석을 실행할 수 있습니다.

MainActivity.java

이 댓글을 찾으세요:

// TODO 7: Run sentiment analysis on the input text

그런 다음 다음을 추가합니다.

List<Category> results = textClassifier.classify(text);

후처리 구현

마지막으로 모델의 출력을 화면에 표시할 설명 텍스트로 변환합니다.

MainActivity.java

이 댓글을 찾으세요:

// TODO 8: Convert the result to a human-readable text

더미 결과 텍스트를 생성하는 코드를 제거합니다.

String textToShow = "Dummy classification result.\n";

그런 다음 다음을 추가합니다.

String textToShow = "Input: " + text + "\nOutput:\n";
for (int i = 0; i < results.size(); i++) {
  Category result = results.get(i);
  textToShow += String.format("    %s: %s\n", result.getLabel(),
                              result.getScore());
}
textToShow += "---------\n";

12. 최종 앱 실행

감정 분석 모델을 앱에 통합했으므로 테스트해 보겠습니다. Android 장치를 연결하고 실행 ( 실행.png ) Android 스튜디오 도구 모음에서.

앱은 사용자가 입력하는 영화 리뷰의 감정을 정확하게 예측할 수 있어야 합니다.

img/text-classification-result.png

13. 더 많은 Firebase 기능으로 앱 강화

TFLite 모델 호스팅 외에도 Firebase는 머신러닝 사용 사례를 강화하는 여러 가지 다른 기능을 제공합니다.

  • 사용자 기기에서 실행되는 모델 추론 속도를 측정하는 Firebase 성능 모니터링입니다.
  • 사용자 반응을 측정하여 프로덕션 환경에서 모델의 성능을 측정하는 Firebase Analytics입니다.
  • 모델의 여러 버전을 테스트하기 위한 Firebase A/B 테스팅
  • 이전에 TFLite 모델의 두 가지 버전을 훈련했다는 것을 기억하십니까? A/B 테스트는 어느 버전이 프로덕션에서 더 나은 성능을 발휘하는지 알아내는 좋은 방법입니다!

앱에서 이러한 기능을 활용하는 방법을 자세히 알아보려면 아래 Codelab을 확인하세요.

14. 축하합니다!

이 Codelab에서는 감정 분석 TFLite 모델을 학습시키고 Firebase를 사용하여 모바일 앱에 배포하는 방법을 배웠습니다. TFLite 및 Firebase에 대해 자세히 알아보려면 다른 TFLite 샘플 과 Firebase 시작 가이드를 살펴보세요.

우리가 다룬 내용

  • 텐서플로우 라이트
  • 파이어베이스 ML

다음 단계

  • Firebase Performance Monitoring으로 모델 추론 속도를 측정하세요.
  • Firebase ML 모델 관리 API를 통해 Colab에서 Firebase로 모델을 직접 배포하세요.
  • 사용자가 예측 결과에 대해 피드백을 줄 수 있는 메커니즘을 추가하고 Firebase Analytics를 사용하여 사용자 피드백을 추적합니다.
  • Firebase A/B 테스트를 통해 평균 단어 벡터 모델과 MobileBERT 모델을 A/B 테스트합니다.

더 알아보기

질문이 있습니다?

문제 보고