Wytrenuj model wykrywania spamu w komentarzach przy użyciu TensorFlow Lite Maker

1. Zanim zaczniesz

W ramach tych ćwiczeń sprawdzisz kod utworzony w TensorFlow i Kreatorze modeli TensorFlow Lite, by utworzyć model na podstawie zbioru danych opartego na spamie w komentarzach. Oryginalne dane są dostępne w Kaggle. Dane zostały zebrane w jednym pliku CSV i wyczyszczone poprzez usunięcie uszkodzonego tekstu, znaczników, powtórzonych słów i innych elementów. Ułatwi to skupienie się na modelu zamiast na tekście.

Używany przez Ciebie kod znajduje się tutaj. Zalecamy jego przestrzeganie w Colaboratory.

Wymagania wstępne

  • Ćwiczenia z programowania zostały opracowane dla doświadczonych programistów, którzy dopiero zaczynają korzystać z systemów uczących się.
  • Ćwiczenia z programowania są częścią pierwszej klasyfikacji tekstu w ścieżce aplikacji Flutter. Jeśli poprzednie działania nie zostały przez Ciebie wykonane, zatrzymaj je i zrób to teraz.

Czego się nauczysz

  • Jak zainstalować Kreatora modeli TensorFlow Lite w Colab.
  • Jak pobrać dane z serwera Colab na urządzenie.
  • Jak używać narzędzia do ładowania danych.
  • Jak utworzyć model.

Czego potrzebujesz

2. Zainstaluj Kreatora modeli TensorFlow Lite

  • Otwórz Colab. Pierwsza komórka w notatniku zainstaluje Kreatora modeli TensorFLow Lite:
!pip install -q tflite-model-maker

Po zakończeniu przejdź do następnej komórki.

3. Importowanie kodu

Następna komórka ma pewną liczbę importów, których będzie potrzebować kod z notatnika:

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')

To pozwoli też sprawdzić, czy użyto TensorFlow 2.x, co jest wymagane do korzystania z Kreatora modeli.

4. Pobierz dane

Następnie pobierz dane z serwera Colab na urządzenie i ustaw zmienną data_file tak, by wskazywała 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)

Kreator modeli może trenować modele na podstawie prostych plików CSV takich jak ten. Wystarczy, że określisz, które kolumny mają zawierać tekst, a które powinny zawierać etykiety. Instrukcje znajdziesz w dalszej części tego ćwiczenia z programowania.

5. Umieszczone informacje

Zazwyczaj, gdy używasz Kreatora modeli, nie tworzysz modeli od zera. Używasz istniejących modeli, które dostosowujesz do swoich potrzeb.

Modele językowe, takie jak ten, obejmują korzystanie ze wytrenowanych wcześniej funkcji umieszczania. Chodzi o to, aby słowa tworzące umieszczanie zostały przekształcone na liczby odpowiadające poszczególnym słowom w Twoim korpusie. Umieszczanie to wektor, który służy do określenia uczuć danego słowa przez ustalenie jego „kierunku”. Na przykład słowa, które są często używane w wiadomościach ze spamem w komentarzach, mają wektory w podobnym kierunku, a słowa, które nie są kierowane, mają przeciwne kierunki.

Gdy korzystasz ze wstępnie wytrenowanych obiektów, zaczynasz od korpusu, czyli zbioru słów, w przypadku których nauka była już doceniona z dużej ilości tekstu, dzięki czemu dotrzesz do rozwiązania dużo szybciej niż zacząć od zera.

Kreator modeli udostępnia kilka predefiniowanych funkcji umieszczania, których możesz użyć, ale najprostszym i najszybszym z nich jest opcja average_word_vec.

Oto jego kod:

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

Parametr num_words

Określasz też liczbę słów, które mają być używane w modelu.

Myślisz, że „im lepiej”, tym lepiej, ale ogólnie każdy wynik zależy od częstotliwości, w jakiej się pojawia. Jeśli użyjesz wszystkich słów w zbiorze, model może spróbować nauczyć się określać słowa, które są używane tylko raz. W każdym korpusie tekstu wiele słów jest używanych tylko raz lub dwa, więc uwzględnienie go w modelu nie jest opłacalne, ponieważ ma minimalny wpływ na ogólne odczucia.

Możesz użyć parametru num_words, aby dopasować model do liczby słów. Mniejsza liczba może sprawić, że model będzie mniejszy i szybszy, ale może być mniej dokładny, ponieważ rozpoznaje mniej słów. Z drugiej strony większa liczba może zapewniać większy i wolniejszy model. Ważne, aby znaleźć tę optymalną!

Parametr wordvec_dim

Parametr wordved_dim określa liczbę wymiarów wektorowych dla każdego słowa. Z ogólnej zasady wynika, że jest to czwarta część liczby słów. Jeśli na przykład użyjesz 2000 słów, dobrym punktem wyjścia jest 7. Jeśli zmienisz liczbę używanych słów, możesz to zmienić.

Parametr seq_len

Modele są zwykle bardzo sztywne, jeśli chodzi o wartości wejściowe. W przypadku modelu języka oznacza to, że może on klasyfikować zdania o konkretnej długości statycznej. Ustala się go za pomocą parametru seq_len lub długości sekwencji.

Gdy przekształcisz słowa w liczby lub tokeny, zdanie stanie się sekwencją tych tokenów. W takim przypadku Twój model zostanie wytrenowany do klasyfikowania i rozpoznawania zdań przy użyciu 20 tokenów. Jeśli trwa dłużej, zostanie skrócone. Jeśli jest krótsza, jest uzupełniona. W korpusie, z którego korzysta ten token, możesz zobaczyć dedykowany token <PAD>.

6. Użyj narzędzia do ładowania danych

Plik CSV został już wcześniej pobrany. Czas, aby użyć programu wczytującego dane do przekształcenia danych treningowych w rozpoznawane przez model dane:

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,, co wskazuje, czy tekst jest uznawany za spam. Pozostałe właściwości ustawiają utworzoną wcześniej zmienną model_spec oraz znak separatora. W tym przypadku jest to przecinek, gdy plik jest oddzielony przecinkami. Użyjesz tych danych do trenowania modelu, więc wartość is_Training zostanie ustawiona na True.

Chcesz przechować część danych na potrzeby testowania modelu. Podziel dane na 90% do trenowania i 10% na testowanie lub ocenę. Robimy to, aby mieć pewność, że dane testowe są wybierane losowo, a nie „zadowalające” 10% zbioru danych, więc podczas wczytywania danych używasz wartości shuffle=True.

7. Utwórz model

Następna komórka to po prostu utworzenie modelu, czyli pojedynczy wiersz kodu:

# Build the model
model = text_classifier.create(train_data, model_spec=spec, epochs=50, 
                               validation_data=test_data)

Ten kod tworzy model klasyfikujący tekst w Kreatorze modeli i określasz dane treningowe, które chcesz wykorzystać zgodnie z konfiguracją w 4. kroku, specyfikację modelu skonfigurowaną w 4. kroku i liczbę epoki, czyli w tym przypadku 50.

Podstawowa zasada dotycząca systemów uczących się polega na tym, że jest to forma dopasowania do wzorca. Początkowo wczytuje wstępnie wytrenowane wagi słów i próbuje je pogrupować z prognozą, które po zgrupowaniu wskazują spam, a które nie. Za pierwszym razem model jest prawdopodobnie podzielony równomiernie, ponieważ dopiero zaczyna działać.

C42755151d511ce.png

Następnie zmierzy wyniki tego okresu trenowania i uruchomi kod optymalizacji, aby dostosować jego prognozę, a następnie spróbuj ponownie. To jest epoka. Jeśli więc podasz „epochs=50”, zostanie ona zrealizowana przez „&p;;pętla” 50 razy.

7d0ee06a5246b58d.png

W momencie, gdy dotrzesz do 50 epoki, model zgłasza dużo wyższy poziom dokładności. W tym przypadku jest to 99%.

Wartości dokładności walidacji są zwykle nieco niższe niż dokładność trenowania, ponieważ wskazują, w jaki sposób model klasyfikuje dane, których wcześniej nie widzieli. Wykorzystuje on dane testowe ustawione na 10%, które zostały wcześniej ustalone.

f063ff6e1d2add67.png

8. Eksportowanie modelu

  1. Uruchom tę komórkę, aby określić katalog i wyeksportować model:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. Skompresuj cały folder /mm_spam_savedmodel i w dół wygenerowanego pliku mm_spam_savedmodel.zip. Będzie Ci to potrzebne podczas kolejnego ćwiczenia z programowania.
# Rename the SavedModel subfolder to a version number
!mv /mm_spam_savedmodel/saved_model /mm_spam_savedmodel/123
!zip -r mm_spam_savedmodel.zip /mm_spam_savedmodel/

9. Gratulacje

Dzięki nim udało Ci się stworzyć i wyeksportować model za pomocą kodu Pythona. Teraz masz na końcu Zapisany model oraz etykiety i słownictwo. Z następnego ćwiczenia z programowania dowiesz się, jak korzystać z tego modelu, aby zacząć klasyfikować komentarze ze spamem.

Więcej informacji