Tworzenie niestandardowego modelu klasyfikacji tekstu i aktualizowanie go w aplikacjach

1. Zanim zaczniesz

Z tego ćwiczenia w Codelabs dowiesz się, jak zaktualizować model klasyfikacji tekstu, który powstał na podstawie oryginalnego zbioru danych komentarzy dotyczących spamu na blogu, a został wzbogacony o własne komentarze. Dzięki temu będziesz mieć model działający z Twoimi danymi.

Wymagania wstępne

To ćwiczenie w Codelabs jest częścią ścieżki klasyfikacji tekstu Pierwsze kroki z tekstem mobilnym. Ćwiczenia z programowania w tej ścieżce działają po kolei. Aplikacja i model, nad którymi będziesz pracować, powinny zostać utworzone wcześniej, a następnie podążać za pierwszą ścieżką. Jeśli nie masz jeszcze ukończonych poprzednich modułów, przerwij je i zrób to teraz:

  • Utwórz aplikację z podstawowym stylem przekazu
  • Utwórz model systemów uczących się dotyczący spamu w komentarzach
  • Zaktualizuj aplikację, aby używać modelu systemów uczących się do filtrowania spamu

Czego się nauczysz

  • Jak zaktualizować model klasyfikacji tekstu utworzony na podstawie ścieżki klasyfikacji tekstu Pierwsze kroki ze ścieżką klasyfikacji tekstu mobilnego
  • Jak dostosować model tak, aby blokował w aplikacji większość spamu.

Czego potrzebujesz

  • Aplikacja do obsługi wiadomości i model filtrowania spamu zaobserwowany i wbudowany w ramach poprzednich działań.

2. Ulepsz klasyfikację tekstu

Aby uzyskać kod, sklonuj to repozytorium i wczytaj aplikację z TextClassificationStep2. Możesz go znaleźć w ścieżce TextClassificationOnMobile->Android.

Gotowy kod jest również dostępny dla Ciebie jako TextClassificationStep3.

Jeśli otworzysz stworzoną przez siebie aplikację do obsługi wiadomości i wykonasz próbę wysłania takiej wiadomości, wynik będzie bardzo niski:

f111e21903d6fd1f.png

Tego typu błędy pisowni to częsty sposób na uniknięcie spamu przez filtry. Chociaż wiadomość jest nieszkodliwa, spamerzy często dodają link w identyfikatorze użytkownika (zamiast w samej wiadomości, gdzie link może aktywować filtry).

W tym module dowiesz się, jak zaktualizować model, dodając nowe dane. Gdy skończysz, używając tego samego zdania, zobaczysz poniższy wynik, w którym ta wiadomość została zidentyfikowana jako spam.

c96613a0a4d1fef0.png

3. Edytowanie pliku CSV

Aby wytrenować oryginalny model, utworzono zbiór danych w formacie CSV (lmblog_comments.csv) zawierający prawie tysiąc komentarzy oznaczonych jako spam lub nie spam. (Aby sprawdzić plik CSV, otwórz go w dowolnym edytorze tekstu).

Plik CSV w pierwszym wierszu opisuje kolumny – tutaj są oznaczone etykietami commenttext i spam.

Każdy kolejny wiersz ma ten format:

64c0128548e1d082.png

Etykieta po prawej stronie oznacza, że spam jest spamem, a fałsz – nie spam. W tym przypadku wiersz 3 jest uznawany za spam.

Jeśli np. wiele osób zużywa Twoją witrynę z wiadomościami na temat handlu online, wystarczy, że dodasz przykłady komentarzy ze spamem u dołu strony. Na przykład:

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

Gdy skończysz, zapisz plik pod nową nazwą (np. lmblog_comments.csv). Będzie można go użyć do wytrenowania nowego modelu.

W pozostałej części tego ćwiczenia w Codelabs wykorzystasz przykład podany, zmodyfikowany i hostowany w Google Cloud Storage z aktualizacjami handlu online. Jeśli chcesz użyć własnego zbioru danych, możesz zmienić adres URL w kodzie.

4. Wytrenuj model z nowymi danymi

Aby wytrenować model ponownie, możesz jeszcze raz użyć kodu z wcześniejszego (SpamCommentsModelMaker.ipynb) i wskazać w nim nowy zbiór danych CSV o nazwie lmblog_comments_extras.csv. Jeśli chcesz zobaczyć pełny notatnik ze zaktualizowaną zawartością, znajdź go jako SpamCommentsUpdateModelMaker.ipynb.

Jeśli masz dostęp do Google Colab, możesz uruchomić tę usługę bezpośrednio tutaj. W przeciwnym razie pobierz kod z repozytorium i uruchom go w wybranym środowisku notatników.

Oto zaktualizowany kod:

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)

Po zakończeniu trenowania model powinien być nadal trenowany z dużą dokładnością:

8886033d1f8161c.png

Przejdź do notatnika, aby pobrać pliki modelu,vocaba i etykiet. W następnym kroku zintegrujesz je z Androidem.

5. Zaktualizuj aplikację na Androida

  1. Otwórz aplikację w Android Studio i u góry eksploratora projektów wybierz Android.
  2. Znajdź plik assets zawierający etykiety, model i słownictwo ze starej wersji pliku z modelem.

91116524e9016ed4.png

  1. Kliknij prawym przyciskiem myszy folder zasobów.
  2. W menu wybierz opcję otwierania folderu w menedżerze plików systemu operacyjnego. (Wyświetl w Finderze na Macu, jak pokazano na ilustracji. W systemie Windows będzie to Pokaż w Eksploratorze, a w systemie Linux – Otwórz w Plikach.

25f63f9629657e85.png

  1. Spowoduje to otwarcie katalogu z modelem, słownictwem i etykietami w menedżerze plików systemu operacyjnego. Skopiuj do nich nowe komponenty utworzone w poprzednim kroku.

Nie musisz wprowadzać żadnych zmian w kodzie aplikacji. Uruchom go i przetestuj, a zobaczysz wyniki takie jak te powyżej, w których model został poprawiony pod kątem wykrywania „handlu online”. scenariuszy tekstowych.

Gotowa wersja kodu jest dostępna w repozytorium jako TextClassificationStep3.

6. Zaktualizuj aplikację na iOS

Aby uzyskać kod, sklonuj to repozytorium i wczytaj aplikację z TextClassificationStep2. Możesz go znaleźć w ścieżce TextClassificationOnMobile->Android.

Gotowy kod jest również dostępny dla Ciebie jako TextClassificationStep3.

Jeśli udało Ci się wykonać poprzednie ćwiczenia z programowania, będziesz mieć wersję na iOS klasy TextClassificationStep2, która współpracuje z modelem podstawowym. Jeśli chcesz zacząć od istniejącej wersji, po prostu pobierz ją z repozytorium. Będzie działać z pierwszym modelem wytrenowanym na danych dotyczących spamu w komentarzach. Możesz zobaczyć takie wyniki:

553b845565b5b822.png

Aktualizacja aplikacji pod kątem nowego modelu jest bardzo prosta. Najprostszym sposobem jest otwarcie eksploratora plików, pobranie nowych wersji model.tflite, vocab i labels.txt i skopiowanie ich do katalogu projektu.

Gdy to zrobisz, aplikacja będzie działać z nowym modelem i możesz go wypróbować. Oto przykład tego samego zdania, ale z wykorzystaniem nowego modelu:

9031ec260b1857a3.png

7. Gratulacje

Znakomicie. Dzięki ponownemu trenowaniu modelu z nowymi danymi i dodaniu go zarówno do aplikacji na Androida, jak i na iOS udało Ci się zaktualizować jego funkcje bez konieczności pisania nowego kodu.

Dalsze kroki

To tylko zabawka, wytrenowana na podstawie tylko 1000 elementów danych.

W miarę poznawania przetwarzania języka naturalnego warto pracować z większymi zbiorami danych. Możesz też skonfigurować potok ciągłego trenowania, dzięki czemu gdy nowe dane zostaną oznaczone jako spam, mogą automatycznie ponownie wytrenować model w backendzie, a potem wdrożyć go za pomocą Hostingu modeli Firebase.

Użytkownicy płynnie otrzymują zaktualizowany model bez konieczności kopiowania go i wklejania jako zasobu, a także rekompilacji i rozpowszechniania. Możesz też na przykład użyć Zdalnej konfiguracji Firebase do zarządzania wartością progową wysyłania spamu zamiast tej, która wynosi obecnie 0,8.

Możliwości jest mnóstwo. Omówimy je w kolejnych modułach tego kursu.