TensorFlow.js: ponowne naucz modelu wykrywania spamu w komentarzach, by obsługiwał przypadki skrajne

1. Zanim zaczniesz

To ćwiczenie programowania zostało opracowane na podstawie wyniku poprzedniego ćwiczenia z tej serii, aby wykryć spam w komentarzach przy użyciu TensorFlow.js.

W ostatnim ćwiczeniu z programowania udało Ci się utworzyć w pełni sprawną stronę internetową dla fikcyjnego bloga wideo. Udało Ci się odfiltrować komentarze pod kątem spamu, zanim zostały wysłane na serwer i do innych połączonych klientów, używając już wytrenowanego modelu wykrywania spamu w technologii komentarzy opartego na TensorFlow.js w przeglądarce.

Końcowy wynik ćwiczenia ćwiczeń z programowania znajdziesz poniżej:

ee0f13398ea4e91e.gif

Rozwiązanie wyszło bardzo dobrze, ale istnieją przypadki brzegowe, które pozwalają wykryć, że nie udało się go wykryć. Możesz ponownie wytrenować model, by uwzględnić sytuacje, których nie udało się obsłużyć.

Ćwiczenia z programowania skupiają się na używaniu przetwarzania języka naturalnego (sztuki rozumienia języka ludzkiego na komputerze) i pokazują, jak zmodyfikować istniejącą aplikację internetową (zalecamy wykonanie kilku ćwiczeń z programowania), aby rozwiązać prawdziwy problem dotyczący spamu w komentarzach, z którym z pewnością spotka się wielu deweloperów stron internetowych, którzy pracują obecnie nad coraz większą liczbą popularnych aplikacji internetowych.

Poćwicz jeszcze bardziej, tym razem przećwicząc swój model systemów uczących się pod kątem zmian w treści wiadomości ze spamem, które mogą ewoluować z upływem czasu na podstawie aktualnych trendów lub popularnych tematów dyskusji, które umożliwiają aktualizowanie modelu i uwzględnianie takich zmian.

Wymagania wstępne

  • Udało Ci się ukończyć pierwsze ćwiczenia z tej serii.
  • Podstawowa wiedza o technologiach internetowych, w tym HTML, CSS i JavaScript.

Co stworzysz

Możesz użyć wcześniej utworzonej witryny w fikcyjnym blogu wideo z sekcją komentarzy w czasie rzeczywistym i uaktualnić ją do wczytywania spersonalizowanej wersji modelu wykrywania spamu z wykorzystaniem TensorFlow.js. Dzięki temu będzie on działał stabilniej w przypadku skrajnej sytuacji, w której wcześniej byłby niemożliwy. Oczywiście jako programiści i inżynierowie możesz zmienić hipotetyczny wyposażenie do ponownego wykorzystania w dowolnej witrynie, w której pracujesz na co dzień, i dostosować rozwiązanie do każdego przypadku użycia klienta – może to być blog, forum lub inna forma systemu CMS, na przykład Drupal.

No to zaczynamy hakować...

Czego się nauczysz:

W ramach ćwiczenia:

  • Identyfikowanie przypadków brzegowych na już wytrenowanym modelu, w przypadku których wystąpił błąd
  • Ponownie naucz model klasyfikacji spamu utworzony przy użyciu Kreatora modeli.
  • Wyeksportuj ten model oparty na języku Python do formatu TensorFlow.js, aby użyć go w przeglądarkach.
  • Zaktualizuj model hostujący i jego słownik na nowo wytrenowany model i sprawdź wyniki

W tym module zakładamy znajomość HTML5, CSS i JavaScript. Musisz też uruchomić kod w języku Python za pomocą notatnika &colab.

2. Przygotowanie do programowania

Jeszcze raz będziesz używać Glitch.com do hostowania i modyfikowania aplikacji internetowej. Jeśli nie ukończyłeś wstępnego ćwiczenia z programowania, możesz skopiować wynik końcowy tutaj jako punkt wyjścia. Jeśli masz pytania na temat działania kodu, zalecamy ukończenie poprzedniego ćwiczenia z kursu, który przedstawił sposób działania tej działającej aplikacji internetowej.

W Glitch kliknij przycisk Remiksuj, aby utworzyć rozwidlenie i utworzyć nowy zestaw plików, które można edytować.

3. Odkryj przypadki brzegowe w poprzednim rozwiązaniu

Jeśli otworzysz sklonowaną właśnie stronę i spiszesz kilka komentarzy, z pewnością zauważysz, że w większości przypadków będzie ona działać tak, jak powinna, a także blokować komentarze, które wyglądają na spam, i zezwolić na prawidłowe odpowiedzi.

Jeśli jednak posługujesz się wyrafinowanym językiem i dowiesz się, jak przełamać model, prawdopodobnie uda Ci się kiedyś osiągnąć sukces. Mając trochę czasu i błędu, możesz ręcznie utworzyć przykłady takie jak te poniżej. Wklej te dane do istniejącej aplikacji internetowej, sprawdź konsolę i zobacz, jakie są prawdopodobieństwo, że później pojawi się spam:

Wiarygodne komentarze opublikowane bez problemów (prawdziwe wykluczenia):

  1. " Uwielbiam ten film. Doskonale. Prawdopodobieństwo spamu: 47,91854%
  2. "Bardzo podobały mi się prezentacje. Dowiedz się więcej\"> Prawdopodobieństwo spamu: 47,15898%
  3. "W której witrynie mogę dowiedzieć się więcej? Prawdopodobieństwo spamu: 15,32495%

Jest to bardzo dobre prawdopodobieństwo, że w przypadku wszystkich tych przypadków prawdopodobieństwo jest niewielkie, a przed wykonaniem działania udaje się ustawić domyślną wartość SPAM_THRESHOLD wynoszącą co najmniej 75% prawdopodobieństwa (definicja w script.js kodu z poprzedniego ćwiczenia z programowania).

Teraz spróbuj napisać więcej agresywnych komentarzy, które zostaną oznaczone jako spam, mimo że nimi nie są...

Uzasadnione komentarze oznaczone jako spam (fałszywie pozytywne):

  1. "Czy użytkownik może dodać link do strony internetowej maski, którą nosi? Prawdopodobieństwo spamu: 98,46466%
  2. "Czy mogę kupić ten utwór w Spotify? Poinformuj mnie. Prawdopodobieństwo spamu: 94,40953%
  3. "Czy ktoś może skontaktować się ze mną, aby podać szczegółowe instrukcje pobierania TensorFlow.js\">quot; Prawdopodobieństwo spamu: 83.20084%

O nie! Wygląda na to, że te wiarygodne komentarze są oznaczane jako spam, kiedy powinny być dozwolone. Jak rozwiązać ten problem?

Jednym z prostych sposobów jest zwiększenie SPAM_THRESHOLD o ponad 98,5%. W takim przypadku niewłaściwie sklasyfikowane komentarze zostaną opublikowane. Mając to na uwadze, przyjrzyjmy się innym możliwym wynikom...

Komentarze ze spamem oznaczone jako spam (prawdziwie pozytywne):

  1. " To jest fajne, ale przejrzyj linki do pobierania w mojej witrynie, które są lepsze." Prawdopodobieństwo spamu: 99,77873%
  2. "Znam to, że niektórzy mogą kupić trochę leków, ale pokaż mi mój plik pr0file, aby uzyskać więcej informacji. Spam prawdopodobieństwa: 98,46955%
  3. "W moim profilu znajdziesz jeszcze więcej niesamowitych filmów! http://example.com" Spam prawdopodobieństwa: 96,26383%

Dobrze, więc działamy zgodnie z oczekiwaniami przy początkowym progu 75%, ale jeśli w poprzednim kroku zmieniono wartość SPAM_THRESHOLD na ponad 98,5%, oznacza to, że dopuszczalne są 2 przykłady, więc może być za wysoki. Może lepiej jest 96%? Jeśli tak zrobisz, jeden z komentarzy w poprzedniej sekcji (fałszywy wynik) zostanie oznaczony jako spam tylko wtedy, gdy zostanie uznany za prawidłowy, ponieważ ma ocenę 98,46466%.

W takim przypadku najlepiej przechwycić wszystkie komentarze ze spamem i po prostu przeszkolić się w zakresie powyższych działań. Gdy ustawisz próg na 96%, wszystkie wyniki prawdziwie pozytywne będą przechwytywane i eliminujesz 2 fałszywie pozytywne wyniki powyżej. Nie wystarczy, że po prostu zmienisz jeden numer.

Kontynuujmy...

Komentarze ze spamem, które mogły zostać opublikowane (fałszywe negatywne):

  1. "Obejrzyj mój profil, aby pobrać jeszcze więcej niesamowitych filmów.</quot; Prawdopodobieństwo spamu: 7,54926%
  2. "Skorzystaj z zniżki na zajęcia treningowe na stronie pr0file!" Prawdopodobieństwo spamu: 17,49849%
  3. "OMG Za późno! Prawdopodobieństwo spamu: 20,42894%

W przypadku tych komentarzy po prostu zmień wartość parametru SPAM_THRESHOLD. Zmniejszenie progu spamu z 96% do 9% sprawi, że prawdziwe komentarze będą oznaczane jako spam – jedna z nich ma ocenę 58%, mimo że jest prawdziwa. Jedynym sposobem na radzenie sobie z takimi komentarzami jest ponowne przeszkolenie modelu z takimi przypadkami ekstremalnymi w danych treningowych, by uczył się dostosowywać swój świat do tego, co jest spamem, a co nie.

Jedyną opcją pozostaje tylko ponowne nauczenie modelu, ale doprecyzowaliśmy również, kiedy można ograniczyć ilość informacji wywoływanych przez spam, aby zwiększyć wydajność. Dla ludzi 75% wydaje się dość wiarygodne, ale w tym modelu musisz zwiększyć wartość do 81,5%, aby uzyskać lepsze wyniki dzięki przykładom wejściowym.

Nie ma jednej, uniwersalnej wartości, która sprawdza się w różnych modelach. Wartość progową należy ustawić dla konkretnego modelu po przetestowaniu rzeczywistych danych, aby sprawdzić, co działa dobrze.

Może się zdarzyć, że fałszywie pozytywne (lub negatywne) skutki mogą mieć poważne konsekwencje (np.w branży medycznej). Należy więc ustawić próg na bardzo wysoki poziom i poprosić o ręczne sprawdzenie przez osoby, które go nie spełniają. To Twój wybór dla dewelopera i wymaga doświadczenia.

4. Ponownie naucz modelu wykrywania spamu w komentarzach

W poprzedniej sekcji podaliśmy kilka przypadków skrajnych, w których wystąpił błąd modelu, który był jedynym modelem, aby ponownie wytrenować model tak, aby uwzględnić te sytuacje. W systemie produkcyjnym te komentarze można znaleźć z czasem, ponieważ inni użytkownicy oznaczają komentarze jako spam, ręcznie przechodzące przez te e-maile, lub przez moderatorów sprawdzających, że niektóre z nich nie są spamem, i oznaczają je do ponownego szkolenia. Zakładając, że udało Ci się zebrać dużo nowych danych dla tych przypadków skrajnych (aby uzyskać jak najlepsze wyniki, niektóre odmiany tych zdań powinny być jak najszybsze), pokażemy Ci, jak ponownie przeszkolić model z uwzględnieniem tych przypadków skrajnych.

Gotowe podsumowanie modelu

Wstępnie utworzony model został utworzony przez firmę zewnętrzną za pomocą Kreatora modeli, który wykorzystuje do działania model „średnia liczba słów”.

Model został utworzony w Kreatorze modeli, więc musisz się tymczasowo przełączyć na Pythona, aby ponownie wytrenować model, a następnie wyeksportować go do formatu TensorFlow.js, aby móc go używać w przeglądarce. Na szczęście Kreator modeli jest wyjątkowo prosty w obsłudze – cały proces powinien przebiegać łatwo i musimy Ci pomóc. Nie martw się, jeśli jeszcze nie korzystałeś z Pythona.

Współpraca

Nie interesują Cię te ćwiczenia z programowania – chcesz skonfigurować serwer z systemem Linux i zainstalować wszystkie narzędzia w języku Python. Wystarczy, że uruchomisz kod w przeglądarce przy użyciu &notatnika „Colab Notebook&quot”. Mogą one połączyć się z systemem „backend” – serwerem, który ma wstępnie zainstalowane niektóre elementy, z których następnie możesz uruchomić dowolny kod w przeglądarce i zobaczyć wyniki. Jest to bardzo przydatne w przypadku szybkiego tworzenia prototypów lub użycia w samouczkach takich jak ten.

Otwórz stronę colab.research.google.com. Wyświetli się ekran powitalny:

b2df89c1f7b38cc9.png

Teraz kliknij przycisk Nowy notatnik w prawym dolnym rogu wyskakującego okna. Powinien pojawić się pusty pusty wiersz:

94a875f67d6e34f6.png

Świetnie. Następnym krokiem jest połączenie frontendu z serwerem backendu, aby można było wykonać kod w języku Python. Aby to zrobić, w prawym górnym rogu kliknij Połącz i wybierz Połącz z hostowanym środowiskiem wykonawczym.

f4fcd56ae53527bd.png

Po nawiązaniu połączenia pojawią się w niej ikony pamięci RAM i dysku, na przykład:

d979e93ba595d1de.png

Dobra robota! Teraz możesz zacząć kodować w języku Python, aby ponownie nauczyć model. Wystarczy wykonać poniższe czynności.

Krok 1.

W pierwszej komórce, która jest obecnie pusta, skopiuj poniższy kod. Spowoduje to zainstalowanie programu Kreatora modeli TensorFlow Lite za pomocą skryptu w Pythonie o nazwie "pip" (jest to rozwiązanie podobne do npm, którego większość czytelników tego modułu kodu może znać za pomocą ekosystemu JS):

!pip install -q tflite-model-maker

Wklejenie kodu nie powoduje wykonania go. Następnie najedź kursorem na szarą komórkę, do której został wklejony powyższy kod, i pojawi się mała ikona „odtwórz” po lewej stronie komórki, jak widać poniżej:

be966130d68b5aac.png Kliknij przycisk odtwarzania, aby uruchomić kod wpisany w komórce.

Teraz zobaczysz, że kreator modeli jest już zainstalowany:

376bc0fbde89a60d.png

Po zakończeniu wykonywania tej komórki w sposób pokazany poniżej przejdź do następnego kroku poniżej.

Krok 2

Następnie dodaj nową komórkę z kodem, jak widać poniżej, aby wkleić część kodu po pierwszej komórce i wykonać ją oddzielnie:

7ec405d0d82b2143.png

Następna komórka będzie mieć kilka importów, których będzie potrzebować kod z pozostałej notatki. Skopiuj i wklej ten element w nowo utworzonej komórce:

import numpy as np
import os

from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import text_classifier
from tflite_model_maker.text_classifier import DataLoader

import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')

Dosyć standardowe treści, nawet jeśli nie znasz Pythona. Importujesz tylko niektóre z narzędzi i funkcji Kreatora modeli wymaganych przez klasyfikator spamu. To pozwoli też sprawdzić, czy używasz TensorFlow 2.x, co jest wymagane do korzystania z Kreatora modeli.

Tak samo jak wcześniej, najedź kursorem na komórkę, naciskając & "play", gdy najedziesz kursorem na komórkę, a następnie dodaj nową komórkę z kodem, aby przejść do następnego kroku.

Krok 3.

Następnie pobierzesz na urządzenie dane ze zdalnego serwera i ustaw zmienną training_data jako ścieżkę pobranego pliku lokalnego:

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

Kreator modeli może trenować modele na podstawie prostych plików CSV, takich jak ten, który został pobrany. Musisz tylko określić, w których kolumnach będzie się znajdował tekst, a w których – etykiety. W kroku 5 zobaczysz, jak to zrobić. Jeśli chcesz, możesz samodzielnie pobrać plik CSV i sprawdzić jego zawartość.

Zwróć uwagę na nazwę tego pliku: jm_blog_comments_extras.csv. Ten plik to tylko oryginalne dane szkoleniowe użyte do wygenerowania pierwszego modelu spamu w komentarzach połączonego z nowymi danymi brzegowymi, które znajdują się w jednym pliku. Oprócz nowych zdań, których chcesz się nauczyć, potrzebujesz pierwotnych danych treningowych wykorzystywanych do trenowania modelu.

Opcjonalnie: jeśli pobierzesz ten plik CSV i sprawdzisz kilka ostatnich wierszy, zobaczysz przykłady przypadków, które wcześniej nie działały prawidłowo. Zostały właśnie dodane na końcu istniejących danych szkoleniowych, których używa do trenowania.

Wykonaj tę komórkę, a gdy ją uruchomisz, dodaj nową komórkę i przejdź do kroku 4.

Krok 4

Gdy używasz Kreatora modeli, nie tworzysz modeli od zera. Zazwyczaj używasz istniejących modeli, które możesz następnie dostosować do swoich potrzeb.

Kreator modeli udostępnia kilka gotowych modeli, z których możesz skorzystać, ale najprostszym i najszybszym na początek jest użycie average_word_vec, którego użyto we wcześniejszej części programowania. Oto kod:

spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7

Możesz go uruchomić i wkleić w nowej komórce.

Omówienie

num_words

parametr

Jest to liczba słów, które mają być używane przez model. Może Ci się wydawać, że im lepiej, ale ogólnie to najlepszy wynik w zależności od częstotliwości używania poszczególnych słów. Jeśli użyjesz wszystkich słów w zbiorze, model może nauczyć się i zrównoważyć wagę słów, które są używane tylko raz – nie jest to zbyt przydatne. W każdym korpusie tekstowym można znaleźć, że wiele słów jest używanych tylko raz lub dwa. Zazwyczaj nie warto korzystać z nich w modelu, ponieważ mają one minimalny wpływ na ogólne uczucia. Aby dopasować model do liczby słów, użyj parametru num_words. Mniejsza liczba w tym miejscu będzie mniejsza i szybsza, ale może być mniej precyzyjna, ponieważ rozpoznaje mniej słów. Duża liczba będzie mieć większy i potencjalnie wolniejszy model. Znalezienie idealnego rozwiązania jest naszym zadaniem. Jako inżynier systemów uczących się możesz ustalić, co sprawdzi się najlepiej w Twoim przypadku.

Omówienie

wordvec_dim

parametr

Parametr wordvec_dim to liczba wymiarów, których chcesz używać wektorów każdego słowa. Wymiary te zasadniczo różnią się od siebie (utworzony przez algorytm dla systemów uczących się podczas trenowania), którego można użyć do zmierzenia danego słowa przez program, aby spróbować powiązać słowa, które są podobne w jakiś istotny sposób.

Jeśli np. wymiar ma znaczenie takie jak „&medycyna”, to jednym z nich może być słowo „pigułki”, które mogą znaleźć się w rankingu wysokiej jakości. Można je powiązać z innymi wysoko ocenianymi słowami, np. „"xray"”, ale "kot" wyświetli nisko na tym poziomie. Może się okazać, że „wymiar medyczny” jest przydatny do określenia spamu w połączeniu z innymi potencjalnymi wymiarami, które może wykorzystać w takiej sytuacji.

W przypadku słów o wysokim wyniku w wymiarze „medycznym” może się okazać, że drugi wymiar, który odpowiada słowom ludzkiemu, może być przydatny. Słowa takie jak „"leg", "arm", "neck" mogą mieć wysoką pozycję w rankingu, a także dość wysoką w wymiarze medycznym.

Model może użyć tych wymiarów, a następnie włączyć je, aby wykryć słowa, które są najprawdopodobniej powiązane ze spamem. Na przykład e-maile ze spamem mogą zawierać słowa o charakterze zarówno medycznym, jak i ludzkim.

Z ogólnej zasady ustalanej na podstawie badań wynika, że w przypadku tego parametru dobrze działa czwarty pierwiastek liczby słów. Jeśli więc używam 2000 słów, dobrym punktem wyjścia będzie 7 wymiarów. Jeśli zmienisz liczbę użytych słów, również możesz to zmienić.

Omówienie

seq_len

parametr

Modele są zwykle bardzo sztywne, jeśli chodzi o wartości wejściowe. W przypadku modelu językowego oznacza to, że może on klasyfikować zdań o stałej, statycznej długości. Decyduje o tym parametr seq_len, który oznacza „sekwencję długości'”. Gdy przekształcisz słowa w liczby (lub tokeny), zdanie stanie się sekwencją tych tokenów. Model będzie więc trenowany (w tym przypadku) do klasyfikowania i rozpoznawania zdań mających 20 tokenów. Jeśli jest dłuższe, zostanie skrócone. Jeśli jest krótszy, zostanie dopełnienie – tak jak w pierwszym ćwiczeniu z programowania dostępnym w tej serii.

Krok 5. Wczytaj dane trenowania

Plik CSV został już wcześniej pobrany. Czas użyć narzędzia do wczytywania danych, aby przekształcić je w dane treningowe rozpoznawane przez model.

data = DataLoader.from_csv(
      filename=data_file,
      text_column='commenttext', 
      label_column='spam', 
      model_spec=spec,
      delimiter=',',
      shuffle=True,
      is_training=True)

train_data, test_data = data.split(0.9)

Gdy otworzysz plik CSV w edytorze, zobaczysz, że każdy wiersz zawiera tylko dwie wartości – opisane w pierwszym wierszu pliku. Zwykle każdy wpis jest uznawany za „kolumnę”. Widać, że deskryptorem pierwszej kolumny jest commenttext, a pierwszym wpisem w każdym wierszu jest tekst komentarza.

Podobnie deskryptor drugiej kolumny to spam i zobaczysz, że drugi wpis w każdym wierszu to TRUE lub FALSE, aby wskazać, czy tekst jest uznawany za spam, czy nie. Pozostałe właściwości określają specyfikację modelu utworzoną w kroku 4 wraz z znakem separatora – w tym przypadku jest to przecinek, gdy plik jest oddzielony przecinkami. Możesz też skonfigurować parametr Losowy losowy układ danych treningowych tak, aby dane, które mogły być podobne lub zebrane razem, są rozdzielane losowo na zbiór danych.

Następnie użyjesz data.split(), by podzielić je na dane treningowe i testowe. Wartość 0,9 wskazuje, że 90% zbioru danych zostanie wykorzystane do trenowania, a pozostałe do testowania.

Krok 6. Zbuduj model

Dodaj kolejną komórkę, w której dodamy kod do utworzenia modelu:

model = text_classifier.create(train_data, model_spec=spec, epochs=50)

Spowoduje to utworzenie w Kreatorze modeli modelu klasyfikatora tekstu i określisz dane treningowe, których chcesz użyć (zdefiniowane w kroku 4), specyfikację modelu (utworzoną w kroku 4) oraz liczbę epoki – w tym przypadku 50.

Podstawową zasadą systemów uczących się jest to, że jest to forma dopasowania do wzorca. Początkowo wczytają one wstępnie wyważone wagi słów i próbują je pogrupować według „prognozy”, której grupa po zgrupowaniu oznacza spam, a które nie. Za pierwszym razem będzie to prawie 50:50, ponieważ początek dopiero zaczyna się, jak widać poniżej:

D6C8116f8e7e781b.png

Następnie mierzy wyniki tego kroku i zmienia wagi modelu, aby dostosować jego prognozę, a następnie próbuje ponownie. To jest epoka. Po określeniu wartości „epochs=50” zdarzenie będzie przechodziło przez „pętlę' 50 razy tak:

fc7bf6a948b7aa26.png

W związku z tym, gdy dojdziesz do 50 epoki, model zgłosi znacznie wyższy poziom dokładności. W tym przypadku pokazuje 99,1%.

Krok 7. Wyeksportuj model

Po zakończeniu trenowania możesz wyeksportować model. TensorFlow trenuje model w swoim własnym formacie, który trzeba przekonwertować do formatu TensorFlow.js, aby używać go na stronie internetowej. Po prostu wklej ten kod w nowej komórce i wykonaj go:

model.export(export_dir="/js_export/", export_format=[ExportFormat.TFJS, ExportFormat.LABEL, ExportFormat.VOCAB])
!zip -r /js_export/ModelFiles.zip /js_export/

Jeśli po wykonaniu tego kodu klikniesz małą ikonę folderu po lewej stronie Colab, możesz przejść do folderu wyeksportowanego powyżej (w katalogu głównym – konieczne może być przejście na wyższy poziom) i odszukać pakiet ZIP wyeksportowanych plików.

Pobierz ten plik ZIP na swój komputer, ponieważ będziesz z nich korzystać tak samo jak w pierwszym ćwiczeniu z programowania:

A9D8595a3e2564dc.png

Świetnie. Python dobiegł końca. Możesz już wrócić do znanego Ci języka JavaScript. Uff...

5. Obsługiwanie nowego modelu systemów uczących się

Teraz jesteś prawie załadowany model. Aby to zrobić, musisz najpierw przesłać nowe pliki modeli pobrane wcześniej w ramach ćwiczeń z programowania, aby można je było przechowywać i używać w kodzie.

Najpierw wypakuj pliki z modelu pobranego przed chwilą z uruchamianego przed chwilą notatnika Kreatora modeli. W różnych folderach powinny znajdować się te pliki:

5634d536ef8be9ca.png

Co tu masz?

  • model.json – jeden z plików tworzących wytrenowany model TensorFlow.js. Odwołasz się do tego konkretnego pliku w kodzie JS.
  • group1-shard1of1.bin – jest to plik binarny zawierający znaczną część danych zapisanych w wyeksportowanym modelu TensorFlow.js. Musi on być hostowany w dowolnym miejscu na serwerze do pobrania w tym samym katalogu co model.json.
  • vocab – ten dziwny plik bez rozszerzeń to plik z Kreatora modeli, który pokazuje, jak kodować słowa w zdaniach, aby model wiedział, jak ich używać. Więcej informacji na ten temat znajdziesz w następnej sekcji.
  • labels.txt – zawiera tylko ostateczne nazwy klas, które model ma przewidzieć. W przypadku tego modelu po otwarciu tego pliku w edytorze tekstu ma on wbudowany symbol „"false" & "true"” wskazujący jako wynik spam "nie spam" ani „"spam&quot”.

Hostowanie plików modelu TensorFlow.js

W pierwszej kolejności umieść pliki model.json i *.bin, które zostały wygenerowane na serwerze WWW, aby były dostępne na Twojej stronie.

Usuwanie istniejących plików z modelami

Nawiązując do wyniku pierwszego ćwiczenia z serii ćwiczeń z tej serii, musisz najpierw usunąć istniejące przesłane pliki modeli. Jeśli korzystasz z Glitch.com, sprawdź pliki w panelu po lewej stronie dla plików model.json i group1-shard1of1.bin, kliknij menu z 3 kropkami obok każdego pliku i wybierz usuń w następujący sposób:

7412b0b795d3b84f.png

Przesyłanie nowych plików do Glitch

Świetnie. Teraz prześlij nowe:

  1. W panelu po lewej stronie projektu Glitch otwórz folder assets i usuń wszystkie przesłane zasoby, jeśli mają te same nazwy.
  2. Kliknij prześlij zasób i wybierz group1-shard1of1.bin, aby umieścić go w tym folderze. Po przesłaniu powinien wyglądać tak:

25a2251c7f165184.png

  1. Świetnie. Zrób to samo w przypadku pliku model.json, aby 2 pliki znalazły się w folderze zasobów w ten sposób:

51a6dbd5d3097ffc.png

  1. Możesz kliknąć właśnie przesłany plik group1-shard1of1.bin, aby skopiować adres URL do jego lokalizacji. Skopiuj tę ścieżkę teraz, jak pokazano:

92eded8d46442c404.png

  1. W lewym dolnym rogu ekranu kliknij Narzędzia > Terminal. Poczekaj na wczytanie okna terminala.
  2. Po załadowaniu wpisz następujący tekst, a następnie naciśnij Enter, aby zmienić katalog na folder www:

terminal:

cd www
  1. Następnie użyj wget, by pobrać 2 przesłane pliki, zastępując poniższe adresy URL adresami plików wygenerowanych w folderze zasobów w Glitch (sprawdź każdy folder w przypadku każdego niestandardowego adresu URL pliku).

Zwróć uwagę, że odstęp między dwoma adresami URL i te, których potrzebujesz, będą się różnić od tych widocznych:

terminal

wget https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fmodel.json?v=1616111344958 https://cdn.glitch.com/1cb82939-a5dd-42a2-9db9-0c42cab7e407%2Fgroup1-shard1of1.bin?v=1616017964562

Świetnie! Utworzono kopie plików przesłanych do folderu www.

Jednak teraz zostaną pobrane z dziwnymi nazwami. Gdy wpiszesz ls w terminalu i naciśniesz Enter, zobaczysz coś takiego:

9cc90f1d053f517f.png

  1. Aby zmienić nazwy plików, użyj polecenia mv. Wpisz w konsoli ten kod i naciśnij Enter po każdym wierszu:

terminal:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Na koniec odśwież projekt Glitch, wpisując w terminalu refresh i naciśnij Enter:

terminal:

refresh

Po odświeżeniu w sekcji www w interfejsie użytkownika powinny pojawić się model.json i group1-shard1of1.bin:

50dd98c0a8f3e629.png

Świetnie. Ostatnim krokiem jest zaktualizowanie pliku dictionary.js.

  1. Przekonwertuj nowy pobrany plik pojęciowy na prawidłowy format JS ręcznie w edytorze tekstu lub za pomocą tego narzędzia i zapisz uzyskane wyniki w postaci dictionary.js w folderze www. Jeśli masz już plik dictionary.js, możesz go skopiować i wkleić, a następnie zapisać plik.

Super! Udało Ci się zaktualizować wszystkie zmienione pliki. Jeśli spróbujesz ponownie skorzystać ze strony, zauważysz, że ponownie wytrenowany model powinien uwzględniać przypadki skrajnie wykryte i wyciągnięte z tego wnioski:

3ece5dbd0a673987.gif

Jak widać, pierwsze 6 są teraz prawidłowo klasyfikowane jako nie spam, a druga z 6 oznacza się jako spam. Super!

Wypróbujmy też kilka odmian, aby sprawdzić, czy są skuteczne. Pierwotnie było nieskuteczne zdanie, takie jak:

"Akcje GOOGg — właśnie! Za późno!

Ta wiadomość jest teraz sklasyfikowana jako spam, ale co się stanie, jeśli zmienisz ją na:

"Zatem wartość akcji XYZ wzrosła właśnie na wartości. Kup coś, zanim będzie za późno!

Tutaj zobaczysz 98-procentowe prawdopodobieństwo, że to spam, który będzie prawidłowy, mimo że zmienił się tylko symbol giełdowy i jego treść.

Oczywiście jeśli naprawdę zechcesz się nacieszyć tym nowym modelem, będziesz w stanie zebrać jeszcze więcej danych szkoleniowych, co pozwoli zwiększyć szanse na przechwytywanie bardziej wyjątkowych odmian w typowych sytuacjach, z którymi masz do czynienia w internecie. W przyszłych ćwiczeniach z programowania pokażemy Ci, jak stale ulepszać model z użyciem aktywnych danych, które są zgłaszane.

6. Gratulacje!

Gratulacje! Udało Ci się ponownie przeszkolić istniejący model systemów uczących się tak, by się sprawdzał w przypadku znalezionych urządzeń brzegowych i wdrożono te zmiany w przeglądarce przy użyciu TensorFlow.js dla rzeczywistej aplikacji.

Podsumowanie

Dzięki nim dowiesz się:

  1. Odkryto przypadki brzegowe, które nie działały w przypadku korzystania z gotowego modelu spamu w komentarzach
  2. Przeszkolono model Kreatora modeli w celu uwzględnienia wykrytych przypadków brzegowych
  3. Nowy wytrenowany model został wyeksportowany do formatu TensorFlow.js
  4. Zaktualizowano aplikację internetową tak, aby używała nowych plików

Co dalej?

Ta aktualizacja działa świetnie, ale jak w przypadku każdej aplikacji internetowej zmiany będą wprowadzane z biegiem czasu. Znacznie lepiej byłoby, gdyby z czasem aplikacja stale się poprawiała, niż robiła to ręcznie. Czy myślisz, jak można było automatycznie zautomatyzować te czynności, by automatycznie ponownie uczyć model po uzyskaniu np. 100 nowych komentarzy oznaczonych jako nieprawidłowo sklasyfikowane? Załóż kapelusz programisty i prawdopodobnie stworzysz potok pozwalający na automatyczne tworzenie takich potoków. Jeśli nie, nie przejmuj się – w następnym kursie z tej serii, który pokazuje, jak to zrobić.

Podziel się z nami swoją opinią

To, czego szukasz, możesz łatwo rozszerzyć na potrzeby innych kreacji, dlatego warto myśleć nieszablonowo i kontynuować atakowanie.

Pamiętaj, aby oznaczyć nas tagiem w mediach społecznościowych za pomocą hashtagu #MadeWithTFJS, by mieć pewność, że Twój projekt zostanie pokazany na blogu TensorFlow lub nawet w przyszłych wydarzeniach. Z niecierpliwością czekamy na Wasze dzieła.

Więcej ćwiczeń z programowania w TensorFlow.js

Strony, na które trzeba zapłacić