커스텀 텍스트 분류 모델을 만들고 이 모델을 사용하여 앱을 업데이트합니다.

1. 시작하기 전에

이 Codelab에서는 원래의 블로그 스팸 댓글 데이터 세트를 기반으로 작성되었지만 자신만의 의견으로 향상된 텍스트 분류 모델을 업데이트하는 방법을 알아봅니다. 따라서 모델에 사용할 모델을 만들 수 있습니다.

기본 요건

이 Codelab은 모바일 텍스트 분류 시작하기 과정의 일부입니다. 이 개발자 과정의 Codelab은 순차적입니다. 첫 번째 과정을 따라가는 동안 작업하게 될 앱과 모델이 이전에 빌드했어야 합니다. 아직 이전 활동을 완료하지 않으셨다면 지금 중지한 후 완료하세요.

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

실습 내용

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

준비물

  • 이전 활동에서 관측 및 구축한 메시지 앱 및 스팸 필터링 모델

2 텍스트 분류 향상

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

finished 코드도 TextClassificationStep3로 사용할 수 있습니다.

빌드한 메시지 앱을 열고 이 메시지를 사용하려고 하면 스팸 점수가 매우 낮습니다.

f111e21903d6fd1f.png

이러한 맞춤법은 스팸 필터를 피하는 일반적인 방법입니다. 스팸이 없는 경우 스팸 발송자는 종종 사용자 ID에 링크를 추가합니다 (링크가 있는 경우에는 필터가 트리거될 수 있음).

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

C96613a0a4d1fef0.png

3. CSV 파일 수정

원본 모델을 학습시키기 위해 스팸 또는 스팸 아님 라벨이 지정된 거의 1, 000개의 댓글이 포함된 데이터 세트가 CSV (lmblog_comments.csv)로 생성되었습니다. 텍스트 편집기에서 CSV를 열면 파일을 살펴볼 수 있습니다.

CSV의 구성은 첫 번째 행이 열을 설명하도록 하는 것으로, 여기에는 commenttextspam 라벨이 지정되어 있습니다.

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

64c0128548e1d082.png

오른쪽 라벨은 스팸의 경우 true, 스팸이 아닌 경우 거짓입니다. 이 경우 입력란 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

노트북을 살펴봅니다. model, vocab,labels 파일을 다운로드합니다. 다음 단계에서는 Android에 구성요소를 통합합니다.

5 Android 앱 업데이트

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

91116524e9016ed4.png

  1. 애셋 폴더를 마우스 오른쪽 버튼으로 클릭합니다.
  2. 메뉴에서 운영체제의 파일 관리자로 폴더를 여는 옵션을 선택합니다. Mac에서는 Finder에 공개가 표시됩니다. Windows에서는 Internet Explorer에 표시, Linux에서는 Open in Files로 표시됩니다.

25f63f9629657e85.png

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

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

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

6. iOS 앱 업데이트

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

finished 코드도 TextClassificationStep3로 사용할 수 있습니다.

이전 Codelab을 완료했다면 기본 모델과 호환되는 iOS 버전의 TextClassificationStep2를 갖게 됩니다. 기존 버전에서 시작하려면 저장소에서 버전을 가져오세요. 이 모델은 댓글 스팸 데이터에 대해 학습된 첫 번째 모델에서 작동하며 다음과 같은 결과가 표시될 수 있습니다.

553b845565b5b822.png

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

이 단계를 완료하면 앱이 새 모델과 호환되며, 사용해 볼 수 있습니다. 다음은 동일한 모델을 사용하지만 새 모델을 사용한 예입니다.

9,031ec260b1857a3.png

7 축하합니다

작업이 끝났습니다. 새 데이터로 모델을 재학습시키고 Android 및 iOS 앱에 모두 추가함으로써 새로운 코드를 작성할 필요 없이 기능을 업데이트할 수 있었습니다.

다음 단계

이 모델은 1, 000개의 데이터 항목에 대해서만 학습한 장난감 모델입니다.

자연어 처리를 살펴볼 때 더 큰 데이터 세트로 작업할 수 있습니다. 지속적 학습 파이프라인을 설정하여 새 데이터가 수신되고 스팸으로 신고되면 백엔드에서 모델을 자동으로 다시 학습시킨 다음 Firebase 모델 호스팅을 사용하여 모델을 배포할 수도 있습니다.

애셋으로 복사하여 붙여넣고 다시 컴파일하고 재배포할 필요 없이 사용자가 원활하게 업데이트된 모델을 가져옵니다. 예를 들어 지금처럼 0.8이 아닌 Firebase 원격 구성을 사용하여 스팸 전송을 위한 기준점을 관리할 수 있습니다.

수많은 옵션이 있으며 이 과정의 향후 Codelab에서 자세히 살펴보겠습니다.