1. Zanim zaczniesz
W tym ćwiczeniu w Codelabs sprawdzisz kod utworzony za pomocą TensorFlow i TensorFlow Lite Model Maker, aby utworzyć model na podstawie zbioru danych dotyczącego spamu w komentarzach. Oryginalne dane są dostępne na platformie Kaggle. Zostały one zebrane w jednym pliku CSV i oczyszczone z uszkodzonego tekstu, znaczników, powtarzających się słów itp. Ułatwi to skupienie się na modelu zamiast na tekście.
Kod, który będziesz sprawdzać, został podany poniżej, ale zdecydowanie zalecamy śledzenie kodu w Google Colab.
Wymagania wstępne
- Te ćwiczenia z programowania są przeznaczone dla doświadczonych programistów, którzy dopiero zaczynają przygodę z uczeniem maszynowym.
- Te warsztaty są częścią ścieżki Pierwsze kroki z klasyfikacją tekstu na urządzeniach mobilnych. Jeśli nie zostały jeszcze ukończone poprzednie działania, przerwij i wykonaj je teraz.
Czego się nauczysz
- Jak zainstalować TensorFlow Lite Model Maker za pomocą Google Colab
- Jak pobrać dane z serwera w chmurze na urządzenie
- Jak używać narzędzia do wczytywania danych
- Jak utworzyć model
Czego potrzebujesz
- Dostęp do Google Colab
2. Instalowanie narzędzia TensorFlow Lite Model Maker
Otwórz Colaba. Pierwsza komórka w notatniku zainstaluje za Ciebie narzędzie TensorFlow Lite Model Maker:
!pip install -q tflite-model-maker
Gdy to zrobisz, przejdź do następnej komórki.
3. Importowanie kodu
W następnej komórce znajduje się kilka importów, których będzie potrzebować kod w notatniku:
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')
Sprawdzimy też, czy używasz TensorFlow 2.x, co jest wymagane do korzystania z Model Maker.
4. Pobierz dane
Następnie pobierz dane z serwera w chmurze na urządzenie i ustaw data_file tak, aby wskazywał plik lokalny:
data_file = tf.keras.utils.get_file(fname='comment-spam.csv',
origin='https://storage.googleapis.com/laurencemoroney-blog.appspot.com/lmblog_comments.csv',
extract=False)
Model Maker może trenować modele na podstawie prostych plików CSV, takich jak ten. Wystarczy, że określisz, które kolumny zawierają tekst, a które etykiety. Dowiesz się, jak to zrobić, w dalszej części tego modułu.
5. Wcześniej wyuczone wektory dystrybucyjne
Zwykle podczas korzystania z Model Maker nie tworzysz modeli od zera. Używasz istniejących modeli, które dostosowujesz do swoich potrzeb.
W przypadku modeli językowych, takich jak ten, polega to na używaniu wcześniej wyuczonych wektorów. Ideą osadzania jest przekształcanie słów w liczby, przy czym każde słowo w całym korpusie otrzymuje liczbę. Osadzanie to wektor, który służy do określania wydźwięku danego słowa poprzez ustalenie jego „kierunku”. Na przykład słowa, które są często używane w spamie w komentarzach, będą miały wektory skierowane w podobnym kierunku, a słowa, które nie są używane w ten sposób, będą miały wektory skierowane w przeciwnym kierunku.
Korzystając z wcześniej wyuczonych osadzeń, możesz zacząć od korpusu lub zbioru słów, które już mają przypisane nastawienie na podstawie dużego zbioru tekstów. Dzięki temu szybciej znajdziesz rozwiązanie niż w przypadku zaczynania od zera.
Model Maker udostępnia kilka wstępnie wytrenowanych osadzeń, których możesz używać, ale najprostszym i najszybszym sposobem na rozpoczęcie pracy jest average_word_vec.
Oto kod:
spec = model_spec.get('average_word_vec')
spec.num_words = 2000
spec.seq_len = 20
spec.wordvec_dim = 7
Parametr num_words
Określisz też liczbę słów, których ma używać Twój model.
Możesz myśleć, że „im więcej, tym lepiej”, ale zwykle istnieje odpowiednia liczba słów kluczowych, która zależy od częstotliwości używania każdego z nich. Jeśli użyjesz wszystkich słów z całego korpusu, model może próbować nauczyć się kierunku słów, które są używane tylko raz. W każdym korpusie tekstowym wiele słów jest używanych tylko raz lub dwa, więc zwykle nie warto ich uwzględniać w modelu, ponieważ mają znikomy wpływ na ogólny wydźwięk. Możesz dostosować model do liczby słów, której oczekujesz, za pomocą parametru num_words.
Mniejsza liczba może dać mniejszy i szybszy model, ale może być mniej dokładny, ponieważ rozpoznaje mniej słów. Im większa liczba, tym większy i wolniejszy model. Znalezienie złotego środka jest kluczowe.
Parametr wordvec_dim
Parametr wordved_dim to liczba wymiarów, których chcesz użyć w wektorze dla każdego słowa. Z badań wynika, że optymalna liczba słów to czwarty pierwiastek liczby słów. Jeśli na przykład używasz 2000 słów, dobrym punktem wyjścia jest 7. Jeśli zmienisz liczbę używanych słów, możesz też zmienić tę wartość.
Parametr seq_len
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ć zdania o określonej, statycznej długości. Zależy to od parametru seq_len lub długości sekwencji.
Gdy przekształcisz słowa w liczby (lub tokeny), zdanie stanie się sekwencją tych tokenów. Model zostanie więc wytrenowany (w tym przypadku) do klasyfikowania i rozpoznawania zdań zawierających 20 tokenów. Jeśli zdanie jest dłuższe, zostanie obcięte. Jeśli jest krótszy, zostanie uzupełniony. W korpusie zobaczysz specjalny token <PAD>, który będzie używany w tym celu.
6. Używanie narzędzia do wczytywania danych
Wcześniej pobrano plik CSV. Teraz użyj narzędzia do wczytywania danych, aby przekształcić je w dane treningowe, które model może rozpoznać:
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)
Jeśli otworzysz plik CSV w edytorze, zobaczysz, że każdy wiersz zawiera tylko 2 wartości, a są one opisane tekstem w pierwszym wierszu pliku. Zwykle każdy wpis jest traktowany jako kolumna.
Zobaczysz, że opis pierwszej kolumny to commenttext, a pierwszy wpis w każdym wierszu to tekst komentarza. Podobnie deskryptor drugiej kolumny to spam, a drugi wpis w każdym wierszu to True lub False,, co oznacza, czy tekst jest uważany za spam w komentarzach. Pozostałe właściwości ustawiają utworzony wcześniej parametr model_spec wraz ze znakiem rozdzielającym, którym w tym przypadku jest przecinek, ponieważ plik jest rozdzielany przecinkami. Użyjesz tych danych do trenowania modelu, więc is_Training jest ustawione na True.
Część danych należy zachować na potrzeby testowania modelu. Podziel dane tak, aby 90% z nich służyło do trenowania, a pozostałe 10% do testowania i oceny. W tym celu chcemy mieć pewność, że dane testowe są wybierane losowo, a nie stanowią „dolnych” 10% zbioru danych. Dlatego podczas wczytywania danych użyj funkcji shuffle=True, aby je losowo uporządkować.
7. Tworzenie modelu
Kolejna komórka służy po prostu do utworzenia modelu i zawiera jeden wiersz kodu:
# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50,
validation_data=test_data)
W ten sposób utworzysz model klasyfikacji tekstu za pomocą narzędzia Model Maker. Określisz też dane treningowe, których chcesz użyć (skonfigurowane w kroku 4), specyfikację modelu (skonfigurowaną w kroku 4) i liczbę epok, w tym przypadku 50.
Podstawową zasadą uczenia maszynowego jest dopasowywanie wzorców. Początkowo wczyta wstępnie wytrenowane wagi słów i spróbuje je pogrupować, przewidując, które z nich po zgrupowaniu wskazują na spam, a które nie. Za pierwszym razem prawdopodobieństwo będzie zbliżone do 50:50, ponieważ model dopiero zaczyna działać.

Następnie zmierzy wyniki i uruchomi kod optymalizacji, aby dostosować prognozę, a potem spróbuje ponownie. To jest epoka. Jeśli więc określisz epochs=50, pętla zostanie wykonana 50 razy.

Gdy dotrzesz do 50 epoki, model będzie wykazywać znacznie wyższy poziom dokładności. W tym przypadku jest to 99%.
Po prawej stronie zobaczysz dane dotyczące dokładności weryfikacji. Zwykle są one nieco niższe niż dokładność trenowania, ponieważ wskazują, jak model klasyfikuje dane, których wcześniej nie „widział”. Wykorzystuje ona 10% danych testowych, które zostały wcześniej odłożone.

8. Eksportowanie modelu
Po zakończeniu trenowania możesz wyeksportować model.
TensorFlow trenuje model we własnym formacie, który musi zostać przekonwertowany na format TFLITE, aby można go było używać w aplikacji mobilnej. Model Maker zajmuje się tym za Ciebie.
Wystarczy wyeksportować model, podając katalog:
model.export(export_dir='/mm_spam')
W tym katalogu zobaczysz plik model.tflite. Pobierz. Będzie Ci potrzebny w kolejnym ćwiczeniu, w którym dodasz go do aplikacji na Androida.
Informacje dotyczące iOS
Wyeksportowany model .tflite dobrze sprawdza się w przypadku Androida, ponieważ zawiera wbudowane metadane, które Android Studio może odczytać.
Te metadane są bardzo ważne, ponieważ zawierają słownik tokenów reprezentujących słowa w sposób, w jaki rozpoznaje je model. Pamiętasz, że słowa są zamieniane na tokeny, a potem otrzymują wektory określające ich wydźwięk? Twoja aplikacja mobilna musi znać te tokeny. Jeśli na przykład słowo „dog” zostało przekształcone w token 42, a użytkownicy wpisują je w zdaniu, aplikacja musi przekształcić „dog” w 42, aby model mógł je zrozumieć. Jako programista aplikacji na Androida będziesz mieć do dyspozycji „Bibliotekę zadań TensorFlow Lite”, która ułatwi Ci to zadanie, ale na iOS musisz przetworzyć słownictwo, więc musisz mieć je dostępne. Model Maker może wyeksportować ten plik, jeśli określisz parametr export_format. Aby uzyskać etykiety i słownictwo dla swojego modelu, możesz użyć tego kodu:
model.export(export_dir='/mm_spam/',
export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])
9. Gratulacje
W tym laboratorium przedstawiliśmy kod w Pythonie do tworzenia i eksportowania modelu. Na końcu otrzymasz plik .tflite.
W następnym module zobaczysz, jak edytować aplikację na Androida, aby używać tego modelu i móc klasyfikować spamowe komentarze.