Tworzenie niestandardowego modelu klasyfikacji tekstu i aktualizowanie go w aplikacjach

1. Zanim zaczniesz

Z tego ćwiczenia dowiesz się, jak zaktualizować model klasyfikacji tekstu utworzony na podstawie oryginalnego zbioru danych komentarzy do spamu na blogu, ale wzbogacony o Twoje komentarze, aby uzyskać model, który będzie działać z Twoimi danymi.

Wymagania wstępne

Te warsztaty programistyczne są częścią ścieżki Pierwsze kroki z mobilną klasyfikacją tekstu. Ćwiczenia w tej ścieżce są ułożone w kolejności. Aplikacja i model, nad którymi będziesz pracować, powinny być już utworzone w ramach pierwszej ścieżki. Jeśli nie udało Ci się jeszcze wykonać poprzednich działań, przerwij i zrób to teraz:

  • Tworzenie podstawowej aplikacji do obsługi wiadomości
  • Tworzenie modelu systemu uczącego się do wykrywania spamu w komentarzach
  • Aktualizowanie aplikacji w celu korzystania z modelu uczenia maszynowego do filtrowania spamu

Czego się nauczysz

  • Jak zaktualizować model klasyfikacji tekstu utworzony w ramach ścieżki „Pierwsze kroki z klasyfikacją tekstu na urządzeniach mobilnych”
  • Jak dostosować model, aby blokował najczęstszy spam w aplikacji

Czego potrzebujesz

  • aplikację do obsługi wiadomości i model filtrowania spamu, które zostały omówione i utworzone w poprzednich ćwiczeniach.

2. Ulepszanie klasyfikacji tekstu

Kod możesz uzyskać, klonując to repozytorium i wczytując aplikację z TextClassificationStep2. Znajdziesz go na ścieżce TextClassificationOnMobile->Android.

Kod finished jest też dostępny jako TextClassificationStep3.

Jeśli otworzysz utworzoną aplikację do obsługi wiadomości i wyślesz ten komunikat, otrzymasz bardzo niski wynik spamu:

f111e21903d6fd1f.png

Takie błędy w pisowni są powszechnym sposobem na omijanie filtrów antyspamowych. Chociaż wiadomość jest nieszkodliwa, spamerzy często dodają link w identyfikatorze użytkownika (zamiast w samej wiadomości, gdzie link mógłby uruchomić filtry).

W tym module dowiesz się, jak aktualizować model za pomocą nowych danych. Gdy skończysz, uruchomienie tego samego zdania da poniższy wynik, w którym ta wiadomość jest oznaczona jako spam.

c96613a0a4d1fef0.png

3. Edytowanie pliku CSV

Do wytrenowania pierwotnego modelu utworzono zbiór danych w formacie CSV (lmblog_comments.csv) zawierający prawie tysiąc komentarzy oznaczonych jako spam lub nie. (Jeśli chcesz sprawdzić plik CSV, otwórz go w dowolnym edytorze tekstu).

W pliku CSV pierwszy wiersz zawiera opis kolumn – w tym przypadku są to etykiety commenttextspam.

Każdy kolejny wiersz ma ten format:

64c0128548e1d082.png

Etykieta po prawej stronie ma wartość „prawda” w przypadku spamu i „fałsz” w przypadku wiadomości, które nie są spamem. W tym przypadku wiersz 3 jest uznawany za spam.

Aby dodać własne komentarze, np. jeśli wiele osób spamuje Twoją witrynę wiadomościami o handlu online, wystarczy, że dodasz przykłady komentarzy spamowych u dołu witryny. 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ędziesz go wtedy używać do trenowania nowego modelu.

W pozostałej części tego laboratorium będziesz używać podanego przykładu, który został zmodyfikowany i jest hostowany w Google Cloud Storage wraz z aktualizacjami dotyczącymi handlu online. Jeśli chcesz użyć własnego zbioru danych, możesz zmienić adres URL w kodzie.

4. Ponowne trenowanie modelu z użyciem nowych danych

Aby ponownie wytrenować model, możesz po prostu użyć kodu z wcześniejszego etapu (SpamCommentsModelMaker.ipynb), ale skierować go na nowy zbiór danych CSV o nazwie lmblog_comments_extras.csv. Jeśli chcesz uzyskać pełny notatnik ze zaktualizowaną zawartością, znajdziesz go pod adresem SpamCommentsUpdateModelMaker.ipynb..

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

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)

Podczas trenowania zobaczysz, że model nadal będzie trenowany z wysoką dokładnością:

8886033d1f8161c.png

Przejdź przez notatnik, aby pobrać pliki modelu,słownika i etykiet. W następnym kroku zintegrujesz je z Androidem.

5. Aktualizowanie aplikacji na Androida

  1. Otwórz aplikację w Android Studio i sprawdź, czy u góry eksploratora projektu jest wybrana opcja Android.
  2. Znajdź plik assets zawierający etykiety, model i słownictwo ze starej wersji pliku modelu.

91116524e9016ed4.png

  1. Kliknij prawym przyciskiem myszy folder zasobów.
  2. W menu wybierz opcję otwarcia folderu za pomocą menedżera plików systemu operacyjnego. (Pokaż w Finderze na Macu, jak pokazano. W systemie Windows będzie to Pokaż w Eksploratorze, a w systemie Linux Otwórz w Plikach lub podobnie.

25f63f9629657e85.png

  1. Spowoduje to otwarcie w menedżerze plików systemu operacyjnego katalogu zawierającego model, słownik i etykiety. Skopiuj nowe, które zostały utworzone w poprzednim kroku.

Nie musisz wprowadzać żadnych zmian w kodzie aplikacji. Uruchom go i przetestuj, a zobaczysz wyniki podobne do tych powyżej, w których model został ulepszony pod kątem wykrywania tekstu „onllline trading”.

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

6. Aktualizowanie aplikacji na iOS

Kod możesz uzyskać, klonując to repozytorium i wczytując aplikację z TextClassificationStep2. Znajdziesz go na ścieżce TextClassificationOnMobile->Android.

Kod finished jest też dostępny jako TextClassificationStep3.

Jeśli udało Ci się przejść poprzednie ćwiczenie, masz już wersję iOS ćwiczenia TextClassificationStep2, która działa z modelem podstawowym. Jeśli chcesz zacząć od naszej obecnej wersji, po prostu pobierz ją z repozytorium. Będzie on współpracować z pierwszym modelem wytrenowanym na danych dotyczących spamu w komentarzach. Możesz zobaczyć wyniki podobne do tych:

553b845565b5b822.png

Zaktualizowanie aplikacji, aby używała nowego modelu, jest bardzo proste. Najprostszym sposobem jest otwarcie eksploratora plików, pobranie nowych wersji plików model.tflite, vocablabels.txt oraz skopiowanie ich do katalogu projektu.

Gdy to zrobisz, aplikacja będzie działać z nowym modelem i będziesz mieć możliwość jej przetestowania. Oto przykład tego samego zdania, ale z użyciem nowego modelu:

9031ec260b1857a3.png

7. Gratulacje

To wszystko. Dzięki ponownemu trenowaniu modelu z użyciem nowych danych i dodaniu go do aplikacji na Androida i iOS udało Ci się zaktualizować ich funkcje bez pisania nowego kodu.

Następne kroki

Ten model jest tylko modelem testowym, wytrenowanym na podstawie zaledwie 1000 elementów danych.

Podczas poznawania przetwarzania języka naturalnego możesz chcieć pracować z większymi zbiorami danych. Możesz też skonfigurować ciągły potok trenowania, aby w przypadku pojawienia się nowych danych oznaczonych jako spam automatycznie trenować model na backendzie, a następnie wdrażać go za pomocą hostingu modeli Firebase.

Użytkownicy otrzymają zaktualizowany model bez konieczności kopiowania i wklejania go jako zasobu, ponownej kompilacji i redystrybucji. Możesz też na przykład użyć Zdalnej konfiguracji Firebase do zarządzania wartością progową wysyłania spamu zamiast obecnej wartości 0,8.

Możliwości jest mnóstwo. Zbadamy je w kolejnych ćwiczeniach z programowania w tym kursie.