커스텀 텍스트 분류 모델을 만들고 이 모델로 앱 업데이트

1. 시작하기 전에

이 Codelab에서는 최초에 블로그 스팸 댓글 데이터 세트로 빌드한 텍스트 분류 모델을 직접 수집한 댓글로 업데이트하여 내 데이터에 잘 맞도록 모델을 개선하는 방법을 알아봅니다.

기본 요건

이 Codelab은 모바일 텍스트 분류 시작하기 개발자 과정의 일부입니다. 이 개발자 과정의 Codelab은 순차적입니다. 첫 번째 개발자 과정을 진행하면서 작업할 앱과 모델을 미리 빌드해야 합니다. 이전 활동을 아직 완료하지 않았다면 여기에서 멈추고 이전 활동을 진행하시기 바랍니다.

  • 기본 메시지 스타일 앱 빌드
  • 댓글 스팸 머신러닝 모델 빌드
  • 스팸 필터링 머신러닝 모델을 사용하도록 앱 업데이트

학습할 내용

  • 모바일 텍스트 분류 시작하기 과정에서 빌드한 텍스트 분류 모델을 업데이트하는 방법
  • 앱에서 가장 흔한 스팸을 차단하도록 모델을 맞춤설정하는 방법

필요한 항목

  • 이전 활동에서 살펴보고 빌드한 메시지 앱 및 스팸 필터링 모델

2. 텍스트 분류 향상

이 코드를 가져오려면 저장소를 클론하고 TextClassificationStep2에서 앱을 로드합니다. TextClassificationOnMobile->Android 경로에서 확인할 수 있습니다.

완성된 코드는 TextClassificationStep3로도 제공됩니다.

빌드한 메시지 앱을 열고 이 메시지를 시도하면 스팸 점수가 매우 낮게 표시됩니다.

f111e21903d6fd1f.png

이와 같은 오타는 스팸 필터를 피하는 일반적인 방법입니다. 메시지는 무해하지만 스팸 발송자는 링크가 필터를 트리거할 수 있는 메시지 자체가 아닌 사용자 ID에 링크를 추가하는 경우가 많습니다.

이 실습에서는 새 데이터로 모델을 업데이트하는 방법을 알아봅니다. 완료되면 동일한 문장으로 실행하면 아래와 같은 결과가 표시되며, 이 메시지가 스팸으로 식별됩니다.

c96613a0a4d1fef0.png

3. CSV 파일 수정

최초 모델을 학습시키기 위해 스팸 여부를 나타내는 라벨이 지정된 거의 1, 000개의 댓글을 포함하는 CSV (lmblog_comments.csv)로 데이터 세트를 생성했습니다. 텍스트 편집기에서 CSV를 열면 파일을 살펴볼 수 있습니다.

CSV의 구조를 보면 첫 번째 행이 열을 설명하며, 각각 commenttextspam 라벨이 지정되어 있습니다.

모든 후속 행이 같은 형식을 따릅니다.

64c0128548e1d082.png

오른쪽 라벨은 스팸인 경우 참이고 스팸이 아닌 경우 거짓입니다. 이 경우 3번째 줄은 스팸으로 간주됩니다.

예를 들어 온라인 거래와 관련된 스팸 메시지가 사이트에 많이 들어오는 경우 사이트 하단에 스팸 댓글의 예시를 추가하면 됩니다. 예를 들면 다음과 같습니다.

online trading can be highly highly effective,true
online trading can be highly effective,true
online trading now,true
online trading here,true
online trading for the win,true

완료되면 lmblog_comments.csv와 같은 새 이름으로 파일을 저장하고 새 모델을 학습시키는 데 사용할 수 있습니다.

이 Codelab의 나머지 부분에서는 온라인 거래 업데이트와 관련하여 Google Cloud Storage에서 제공, 수정, 호스팅된 예시를 사용합니다. 자체 데이터 세트를 사용하려면 코드에서 URL을 변경하면 됩니다.

4. 새 데이터로 모델 다시 학습시키기

모델을 다시 학습시키려면 이전 (SpamCommentsModelMaker.ipynb)의 코드를 재사용하면서 lmblog_comments_extras.csv라는 새 CSV 데이터 세트를 가리키기만 하면 됩니다. 업데이트된 콘텐츠가 포함된 전체 노트북은 SpamCommentsUpdateModelMaker.ipynb.로 제공됩니다.

Google Colab에 액세스할 수 있는 경우 여기에서 직접 실행할 수 있습니다. 그렇지 않은 경우 저장소에서 코드를 가져온 다음 원하는 노트북 환경에서 실행합니다.

업데이트된 코드는 다음과 같습니다.

training_data = tf.keras.utils.get_file(fname='comments-spam-extras.csv',   
          origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/
                  lmblog_comments_extras.csv', 
          extract=False)

학습할 때 모델의 학습 정확도가 여전히 높은 것을 확인할 수 있습니다.

8886033d1f8161c.png

노트북을 통해 모델, 어휘,라벨 파일을 다운로드합니다. 다음 단계에서는 Android에 통합합니다.

5. Android 앱 업데이트

  1. Android 스튜디오에서 앱을 열고 프로젝트 탐색기 상단에 Android가 선택되어 있는지 확인합니다.
  2. 이전 버전의 모델 파일에서 라벨, 모델, 어휘를 포함하는 assets 파일을 찾습니다.

91116524e9016ed4.png

  1. 애셋 폴더를 마우스 오른쪽 버튼으로 클릭합니다.
  2. 메뉴에서 운영체제의 파일 관리자로 폴더를 여는 옵션을 선택합니다. (Mac의 경우 Finder에서 보기) Windows에서는 탐색기에서 표시, Linux에서는 파일에서 열기 또는 이와 유사한 옵션이 표시됩니다.

25f63f9629657e85.png

  1. 이렇게 하면 운영체제의 파일 관리자에 모델, 어휘, 라벨이 포함된 디렉터리가 열립니다. 이전 단계에서 만든 항목을 복사하여 덮어씁니다.

앱의 코드를 변경할 필요는 없습니다. 앱을 실행하고 테스트하면 모델이 '온라인 거래' 텍스트 시나리오를 감지하도록 개선된 위의 결과가 표시됩니다.

완성된 버전의 코드는 저장소에서 TextClassificationStep3으로 제공됩니다.

6. iOS 앱 업데이트

이 코드를 가져오려면 저장소를 클론하고 TextClassificationStep2에서 앱을 로드합니다. TextClassificationOnMobile->Android 경로에서 확인할 수 있습니다.

완성된 코드는 TextClassificationStep3로도 제공됩니다.

이전 Codelab을 진행했다면 기본 모델과 호환되는 TextClassificationStep2의 iOS 버전이 있을 것입니다. 기존 버전에서 시작하려면 저장소에서 해당 버전을 가져오면 됩니다. 댓글 스팸 데이터로 학습된 첫 번째 모델과 함께 작동하며 다음과 같은 결과가 표시될 수 있습니다.

553b845565b5b822.png

새 모델을 사용하도록 앱을 업데이트하는 것은 매우 간단합니다. 가장 쉬운 방법은 파일 탐색기로 이동하여 새 버전의 model.tflite, vocab, labels.txt를 가져와 프로젝트 디렉터리에 복사하는 것입니다.

이렇게 하면 앱이 새 모델과 호환되며 사용해 볼 수 있습니다. 다음은 동일한 문장을 새 모델을 사용하여 작성한 예입니다.

9031ec260b1857a3.png

7. 축하합니다

작업이 끝났습니다. 새 데이터로 모델을 재학습시키고 Android 및 iOS 앱에 모두 추가하여 새 코드를 작성하지 않고도 기능을 업데이트할 수 있었습니다.

다음 단계

이 모델은 데이터 항목 1, 000개로만 학습된 장난감 모델입니다.

자연어 처리를 탐색할 때 더 큰 데이터 세트를 사용하고 싶을 수 있습니다. 새 데이터가 들어와 스팸으로 표시되면 백엔드에서 모델을 자동으로 재학습시킨 다음 Firebase 모델 호스팅을 사용하여 해당 모델을 배포할 수 있도록 지속적인 학습 파이프라인을 설정할 수도 있습니다.

사용자는 애셋으로 복사하여 붙여넣고 다시 컴파일하고 재배포하지 않아도 업데이트된 모델을 원활하게 사용할 수 있습니다. 예를 들어 현재 0.8 대신 Firebase 원격 구성을 사용하여 스팸 전송 기준값을 관리할 수도 있습니다.

가능성은 무궁무진하며 이 과정의 향후 Codelab에서 이러한 가능성을 살펴볼 예정입니다.