Создание модели машинного обучения для спама в комментариях

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

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

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

Предварительные условия

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

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

  • Как установить TensorFlow Lite Model Maker с помощью Google 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. Загрузите данные

Затем вы загрузите данные с облачного сервера на свое устройство и установите 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, и вы указываете обучающие данные, которые хотите использовать (как установлено на шаге 4), спецификацию модели (как настроено на шаге 4) и количество эпох, в данном случае. 50.

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

b94b00f0b155db3d.png

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

85f1d21c0b64d654.png

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

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

5be7967ec70e4302.png

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

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

TensorFlow обучает модель в своем собственном формате, и его необходимо преобразовать в формат TFLITE для использования в мобильном приложении. Model Maker справится с этой сложной задачей за вас.

Просто экспортируйте модель, указав каталог:

model.export(export_dir='/mm_spam')

В этом каталоге вы увидите файл model.tflite . Загрузите его. Он понадобится вам в следующей лаборатории кода, где вы добавите его в свое приложение для Android!

Рекомендации по iOS

Модель .tflite, которую вы только что экспортировали, хорошо работает для Android, поскольку в нее встроены метаданные о модели, и Android Studio может читать эти метаданные.

Эти метаданные очень важны, поскольку они включают словарь токенов, представляющих слова в том виде, в каком их распознает модель. Помните, ранее вы узнали, что слова становятся токенами, а этим токенам затем присваиваются векторы их настроений? Ваше мобильное приложение должно знать эти токены. Например, если слово «собака» было токенизировано до 42, а ваши пользователи вводят слово «собака» в предложение, вашему приложению потребуется преобразовать «собаку» в 42, чтобы модель его поняла. Как разработчик Android, у вас будет «Библиотека задач TensorFlow Lite», которая упростит ее использование, но на iOS вам нужно будет обрабатывать словарь, поэтому он должен быть доступен. Model Maker может экспортировать это за вас, указав параметр export_format . Итак, чтобы получить метки и словарь для вашей модели, вы можете использовать это:

model.export(export_dir='/mm_spam/', 
             export_format=[ExportFormat.LABEL, ExportFormat.VOCAB])

9. Поздравления

В этой лаборатории вы познакомитесь с кодом Python для создания и экспорта вашей модели. В конце у вас будет файл .tflite.

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