Обучение модели обнаружения спама в комментариях с помощью TensorFlow Lite Model Maker

1. Прежде чем начать

В этой лаборатории кода вы просматриваете код, созданный с помощью TensorFlow и TensorFlow Lite Model Maker, чтобы создать модель с набором данных на основе спама в комментариях. Исходные данные доступны на Kaggle. Он был собран в один файл CSV и очищен путем удаления неработающего текста, разметки, повторяющихся слов и многого другого. Это облегчит фокусировку на модели, а не на тексте.

Код, который вы просматриваете, предоставляется здесь, но настоятельно рекомендуется следовать коду в Colaboratory.

Предпосылки

  • Эта лаборатория кода была написана для опытных разработчиков, которые плохо знакомы с машинным обучением.
  • Эта лаборатория кода является частью пути « Начало работы с классификацией текста в приложениях Flutter» . Если вы еще не выполнили предыдущие действия, остановитесь и сделайте это сейчас.

Что вы узнаете

  • Как установить TensorFlow Lite Model Maker с Colab.
  • Как загрузить данные с сервера Colab на ваше устройство.
  • Как использовать загрузчик данных.
  • Как построить модель.

Что вам понадобится

2. Установите конструктор моделей TensorFlow Lite.

  • Откройте Колаб . Первая ячейка в блокноте установит для вас TensorFLow Lite Model Maker:
!pip install -q tflite-model-maker

После завершения перейдите к следующей ячейке.

3. Импортируйте код

В следующей ячейке есть ряд импортов, которые необходимо будет использовать в коде в записной книжке:

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

Это также проверит, запускали ли вы TensorFlow 2.x, что является требованием для использования Model Maker.

4. Загрузите данные

Затем вы загрузите данные с сервера Colab на свое устройство и установите переменную data_file , чтобы она указывала на локальный файл:

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 может обучать модели из простых CSV-файлов, таких как этот. Вам нужно только указать, какие столбцы содержат текст, а какие — метки, что вы увидите позже в этой кодовой лаборатории.

5. Предварительно изученные вложения

Как правило, когда вы используете Model Maker, вы не создаете модели с нуля. Вы используете существующие модели, которые настраиваете под свои нужды.

Языковые модели, подобные этой, предполагают использование предварительно изученных вложений . Идея внедрения заключается в том, что слова преобразуются в числа, при этом каждому слову в вашем общем корпусе присваивается номер. Вложение — это вектор, который используется для определения тональности этого слова путем установления «направления» для слова. Например, слова, которые часто используются в сообщениях со спамом в комментариях, имеют свои векторы, указывающие в одном направлении, а векторы, которые не являются точками, указывают в противоположном направлении.

Когда вы используете предварительно изученные вложения, вы начинаете с корпуса или набора слов, которые уже были изучены тональностью из большого объема текста, поэтому вы получаете решение намного быстрее, чем когда вы начинаете с нуля.

Model Maker предоставляет несколько предварительно изученных встраиваний, которые вы можете использовать, но самым простым и быстрым для начала является параметр average_word_vec .

Вот код для него:

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

Параметр num_words

Вы также указываете количество слов, которые вы хотите использовать в своей модели.

Вы можете подумать, что «чем больше, тем лучше», но обычно существует правильное число, основанное на частоте использования каждого слова. Если вы используете каждое слово во всем корпусе, модель может попытаться изучить и установить направление слов, которые используются только один раз. В любом текстовом корпусе многие слова используются только один или два раза, поэтому их включение в вашу модель нецелесообразно, поскольку они оказывают незначительное влияние на общее настроение.

Вы можете использовать параметр num_words для настройки модели на основе нужного количества слов. Меньшее число может обеспечить меньшую и более быструю модель, но она может быть менее точной, поскольку распознает меньше слов. С другой стороны, большее число может обеспечить более крупную и медленную модель. Важно найти золотую середину!

Параметр wordvec_dim

Параметр wordved_dim — это количество измерений, которые вы хотите использовать для вектора для каждого слова. Эмпирическое правило, определенное в ходе исследований, заключается в том, что это корень четвертой степени из числа слов. Например, если вы используете 2000 слов, хорошей отправной точкой будет 7. Если вы измените количество слов, которые вы используете, вы также можете изменить это.

Параметр seq_len

Модели, как правило, очень жесткие, когда речь идет о входных значениях. Для языковой модели это означает, что языковая модель может классифицировать предложения определенной статической длины. Это определяется параметром seq_len или длиной последовательности .

Когда вы преобразуете слова в числа или токены, предложение становится последовательностью этих токенов. В этом случае ваша модель обучена классифицировать и распознавать предложения с 20 токенами. Если предложение длиннее этого, оно усекается. Если он короче, он дополнен. Вы можете увидеть специальный токен <PAD> в корпусе, который используется для этого.

6. Используйте загрузчик данных

Ранее вы загрузили файл CSV. Теперь пришло время использовать загрузчик данных, чтобы превратить это в обучающие данные, которые может распознать модель:

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)

Если вы откроете CSV-файл в редакторе, вы увидите, что каждая строка имеет только два значения, и они описаны текстом в первой строке файла. Как правило, каждая запись считается столбцом.

Вы увидите, что дескриптор для первого столбца — commenttext , а первая запись в каждой строке — это текст комментария. Точно так же дескриптор для второго столбца — spam , и вы увидите, что вторая запись в каждой строке имеет значение True или False, чтобы указать, считается ли этот текст спамом в комментариях или нет. Другие свойства задают созданную ранее переменную model_spec вместе с символом-разделителем, который в данном случае является запятой, поскольку файл разделен запятыми. Вы будете использовать эти данные для обучения модели, поэтому is_Training имеет значение True .

Вы захотите сохранить часть данных для тестирования модели. Разделите данные, 90% из них для обучения, а остальные 10% для тестирования/оценки. Поскольку мы делаем это, мы хотим убедиться, что данные тестирования выбираются случайным образом, а не являются «нижними» 10% набора данных, поэтому вы используете shuffle=True при загрузке данных, чтобы рандомизировать их.

7. Постройте модель

Следующая ячейка предназначена просто для построения модели и представляет собой одну строку кода:

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

Этот код создает модель текстового классификатора с помощью Model Maker, и вы указываете обучающие данные, которые вы хотите использовать, как настроено на четвертом шаге), спецификацию модели, как настроено на четвертом шаге, и количество эпох, которое составляет 50. в таком случае.

Основной принцип машинного обучения заключается в том, что это форма сопоставления с образцом. Первоначально он загружает предварительно обученные веса для слов и пытается сгруппировать их вместе с предсказанием того, какие из них при группировании указывают на спам, а какие нет. В первый раз он, вероятно, будет разделен поровну, потому что модель только начинается.

c42755151d511ce.png

Затем он измерит результаты этой эпохи обучения и запустит код оптимизации, чтобы настроить свой прогноз, а затем повторит попытку. Это эпоха. Итак, указав epochs=50, он пройдет этот «цикл» 50 раз.

7d0ee06a5246b58d.png

К тому времени, когда вы достигнете 50-й эпохи, модель сообщает о гораздо более высоком уровне точности. В данном случае показывает 99% !

Показатели точности проверки обычно немного ниже, чем точность обучения, потому что они указывают на то, как модель классифицирует данные, которые она ранее не видела. Он использует 10% тестовых данных, которые вы отложили ранее.

f063ff6e1d2add67.png

8. Экспортируйте модель

  1. Запустите эту ячейку, чтобы указать каталог и экспортировать модель:
model.export(export_dire='/mm_spam_savedmodel', export_format=[ExportFormat.LABEL, ExportFormat.VOCAB, ExportFormat.SAVED_MODEL])
  1. Сожмите всю папку /mm_spam_savedmodel и сгенерированный файл mm_spam_savedmodel.zip , который вам понадобится в следующей лаборатории кода.
# 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. Поздравления

Эта лаборатория кода познакомила вас с кодом Python для создания и экспорта вашей модели. Теперь у вас есть SavedModel плюс метки и словарь в конце. В следующей лаборатории кода вы увидите, как использовать эту модель, чтобы начать классифицировать спам-комментарии.

Учить больше