TensorFlow.js: переобучите модель обнаружения спама в комментариях для обработки крайних случаев.

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

Эта лаборатория кода разработана на основе конечного результата предыдущей лаборатории кода в этой серии для обнаружения спама в комментариях с использованием TensorFlow.js.

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

Конечный результат этой кодлабы показан ниже:

ee0f13398ea4e91e.gif

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

Эта лаборатория кода фокусируется на использовании обработки естественного языка (искусство понимания человеческого языка с помощью компьютера) и показывает вам, как изменить существующее созданное вами веб-приложение (вам настоятельно рекомендуется проходить лабораторные работы по порядку ), чтобы справиться с самой сложной задачей. реальная проблема спама в комментариях, с которой наверняка столкнутся многие веб-разработчики, работая над одним из постоянно растущего числа популярных веб-приложений, существующих сегодня.

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

Предпосылки

  • Завершена первая лаборатория кода в этой серии.
  • Базовые знания веб-технологий, включая HTML, CSS и JavaScript.

Что вы будете строить

Вы будете повторно использовать ранее созданный веб-сайт для фиктивного видеоблога с разделом комментариев в реальном времени и обновить его, чтобы загрузить специально обученную версию модели обнаружения спама с использованием TensorFlow.js, чтобы она работала лучше в крайних случаях, в которых раньше она не удалась. . Конечно, как веб-разработчики и инженеры, вы можете изменить этот гипотетический UX для повторного использования на любом веб-сайте, над которым вы можете работать в своих повседневных ролях, и адаптировать решение для любого варианта использования клиента — может быть, это блог, форум или что-то еще. форма CMS, например, Drupal.

Займемся взломом...

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

Ты сможешь:

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

Для этой лабораторной работы предполагается знание HTML5, CSS и JavaScript. Вы также запустите некоторый код Python через записную книжку «совместной лаборатории», чтобы повторно обучить модель, созданную с помощью Model Maker, но для этого не требуется знакомство с Python.

2. Настройтесь на код

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

В Glitch просто нажмите кнопку remix this , чтобы разветвить его и создать новый набор файлов, которые вы сможете редактировать.

3. Откройте для себя пограничные случаи в предыдущем решении

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

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

Легитимные комментарии, размещенные без проблем (настоящие отрицания):

  1. «Вау, мне нравится это видео, потрясающая работа». Вероятность спама: 47,91854%
  2. «Очень понравились эти демо! Есть подробности?» Вероятность спама: 47,15898%
  3. «На какой сайт я могу пойти, чтобы узнать больше?» Вероятность спама: 15,32495%

Это здорово, вероятности для всего вышеперечисленного довольно низки и успешно проходят через SPAM_THRESHOLD по умолчанию с минимальной вероятностью 75% до того, как будут предприняты действия (определено в коде script.js из предыдущей кодовой лаборатории).

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

Законные комментарии, помеченные как спам (ложные срабатывания):

  1. «Кто-нибудь может дать ссылку на сайт маски, которую он носит?» Вероятность спама: 98,46466%
  2. «Могу ли я купить эту песню на Spotify? Кто-нибудь, пожалуйста, дайте мне знать!» Вероятность спама: 94,40953%
  3. «Может ли кто-нибудь связаться со мной и сообщить подробности о том, как загрузить TensorFlow.js?» Вероятность спама: 83,20084%

О, нет! Кажется, что эти законные комментарии помечаются как спам, хотя их следует разрешать. Как вы можете это исправить?

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

Спам-комментарии, помеченные как спам (истинно положительные):

  1. «Это круто, но посмотрите ссылки для скачивания на моем веб-сайте, которые лучше!» Вероятность спама: 99,77873%
  2. «Я знаю некоторых людей, которые могут достать вам лекарства, просто посмотрите подробности в моем профиле pr0file» Вероятность спама: 98,46955%
  3. "Смотрите мой профиль, чтобы загрузить еще больше потрясающих видео, которые еще лучше! http://example.com" Вероятность спама: 96,26383%

Итак, это работает, как и ожидалось, с нашим исходным порогом в 75%, но, учитывая, что на предыдущем шаге вы изменили SPAM_THRESHOLD на более чем 98,5%, это будет означать, что 2 примера здесь будут пропущены, так что, возможно, порог слишком высок. . Может 96% лучше? Но если вы сделаете это, то один из комментариев в предыдущем разделе (ложные срабатывания) будет помечен как спам, если он был законным, поскольку он был оценен в 98,46466%.

В этом случае, вероятно, лучше всего зафиксировать все эти настоящие спам-комментарии и просто переобучиться на указанные выше сбои. Установив пороговое значение 96%, все истинные срабатывания по-прежнему фиксируются, и вы устраняете 2 ложных срабатывания, указанных выше. Не так уж плохо для изменения одного номера.

Давай продолжим...

Спам-комментарии, которые были разрешены к публикации (ложноотрицательные):

  1. "Смотрите мой профиль, чтобы загрузить еще больше потрясающих видео, которые еще лучше!" Вероятность спама: 7,54926%
  2. " Получите скидку на наши занятия в тренажерном зале, см. pr0file! " Вероятность спама: 17,49849%
  3. «О боже, акции GOOG только что взлетели вверх! Успевайте, пока не стало слишком поздно!» Вероятность спама: 20,42894%

Для этих комментариев вы ничего не можете сделать, просто изменив значение SPAM_THRESHOLD . Снижение порога для спама с 96% до ~9% приведет к тому, что подлинные комментарии будут помечены как спам — один из них имеет рейтинг 58%, хотя он является законным. Единственный способ справиться с подобными комментариями — это переобучить модель с такими пограничными случаями, включенными в обучающие данные, чтобы она научилась корректировать свое представление о мире в зависимости от того, что является спамом, а что нет.

Хотя на данный момент остается единственный вариант — переобучить модель, вы также видели, как можно уточнить порог, когда вы решите назвать что-то спамом, чтобы также повысить производительность. Для человека 75% кажется довольно уверенным, но для этой модели вам нужно было приблизиться к 81,5%, чтобы быть более эффективным с примерами входных данных.

Не существует какого-то одного волшебного значения, которое бы хорошо работало в разных моделях, и это пороговое значение необходимо устанавливать для каждой модели после экспериментов с реальными данными, чтобы понять, что работает хорошо.

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

4. Переобучите модель обнаружения спама в комментариях.

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

Резюме готовой модели

Готовая модель, которую вы использовали, была моделью, созданной третьей стороной с помощью Model Maker , которая использует для работы модель «встраивания среднего слова».

Поскольку модель была построена с помощью Model Maker, вам нужно будет ненадолго переключиться на Python, чтобы переобучить модель, а затем экспортировать созданную модель в формат TensorFlow.js, чтобы вы могли использовать ее в браузере. К счастью, Model Maker делает использование их моделей очень простым, так что это должно быть довольно легко следовать, и мы проведем вас через этот процесс, так что не беспокойтесь, если вы никогда раньше не использовали Python!

Колабс

Поскольку в этой лаборатории кода вы не слишком заинтересованы в настройке сервера Linux со всеми установленными различными утилитами Python, вы можете просто выполнить код через веб-браузер с помощью «Colab Notebook». Эти ноутбуки могут подключаться к «бэкенду» — просто серверу с предустановленными программами, с которого вы можете выполнять произвольный код в веб-браузере и просматривать результаты. Это очень полезно для быстрого прототипирования или использования в учебных пособиях, подобных этому.

Просто зайдите на colab.research.google.com , и вы увидите экран приветствия, как показано ниже:

b2df89c1f7b38cc9.png

Теперь нажмите кнопку « Новая записная книжка » в правом нижнем углу всплывающего окна, и вы должны увидеть пустой колаб, подобный этому:

94a875f67d6e34f6.png

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

f4fcd56ae53527bd.png

После подключения вы должны увидеть значки ОЗУ и диска на их месте, например:

d979e93ba595d1de.png

Отличная работа! Теперь вы можете начать писать код на Python, чтобы переобучить модель Model Maker. Просто следуйте инструкциям ниже.

Шаг 1

В первую пустую ячейку скопируйте приведенный ниже код. Он установит для вас TensorFlow Lite Model Maker с помощью менеджера пакетов Python под названием «pip» (он похож на npm, с которым большинство читателей этой лаборатории кода могут быть более знакомы из экосистемы JS):

!pip install -q tflite-model-maker

Однако вставка кода в ячейку не приведет к его выполнению. Затем наведите указатель мыши на серую ячейку, в которую вы вставили приведенный выше код, и слева от ячейки появится небольшой значок «воспроизведение», как показано ниже:

be966130d68b5aac.png Нажмите кнопку воспроизведения, чтобы выполнить код, только что введенный в ячейку.

Теперь вы увидите установленный конструктор моделей:

376bc0fbde89a60d.png

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

Шаг 2

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

7ec405d0d82b2143.png

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

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

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

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

Шаг 3

Затем вы загрузите данные с удаленного сервера на свое устройство и установите переменную training_data в качестве пути к результирующему загруженному локальному файлу:

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)

Model Maker может обучать модели из простых CSV-файлов, подобных загруженному. Вам просто нужно указать, какие столбцы содержат текст, а какие — метки. Вы увидите, как это сделать, на шаге 5. Не стесняйтесь загружать CSV-файл самостоятельно, чтобы увидеть, что он содержит, если хотите.

Внимательные из вас заметят, что имя этого файла — jm_blog_comments _extras .csv — этот файл представляет собой просто исходные обучающие данные, которые мы использовали для создания первой модели спама в комментариях, в сочетании с новыми данными о крайних случаях, которые вы обнаружили, так что все в одном. файл. Вам нужны исходные обучающие данные, используемые для обучения модели, в дополнение к новым предложениям, которые вы хотите изучить.

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

Выполните эту ячейку, затем, когда она завершит выполнение, добавьте новую ячейку и перейдите к шагу 4.

Шаг 4

При использовании 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

параметр

Параметр wordvec_dim — это количество измерений, которые вы хотите использовать для вектора каждого слова. Эти измерения, по сути, представляют собой различные характеристики (созданные алгоритмом машинного обучения при обучении), которые можно измерить для любого заданного слова, с помощью которых программа будет пытаться лучше всего связать слова, которые похожи в каком-то осмысленном смысле.

Например, если у вас есть измерение того, насколько «медицинским» было слово, такое слово, как «таблетки», может получить высокий балл здесь в этом измерении и быть связано с другими словами с высоким баллом, такими как «рентген», но «кошка» будет иметь высокий балл. низкий уровень в этом измерении. Может оказаться, что «медицинский аспект» полезен для определения спама в сочетании с другими важными потенциальными параметрами, которые он может решить использовать.

В случае слов, которые высоко оцениваются в «медицинском измерении», может оказаться полезным 2-е измерение, которое соотносит слова с человеческим телом. Такие слова, как «нога», «рука», «шея» могут иметь высокий балл здесь, а также довольно высокий балл в медицинском измерении.

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

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

Понимание

seq_len

параметр

Модели, как правило, очень жесткие, когда речь идет о входных значениях. Для языковой модели это означает, что языковая модель может классифицировать предложения определенной статической длины. Это определяется параметром seq_len , где это означает «длина последовательности». Когда вы преобразуете слова в числа (или токены), предложение становится последовательностью этих токенов. Таким образом, ваша модель будет обучена (в данном случае) классифицировать и распознавать предложения, содержащие 20 токенов. Если предложение длиннее этого, оно будет усечено. Если он короче, он будет дополнен — точно так же, как в первой кодлабе в этой серии.

Шаг 5 - загрузите тренировочные данные

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

Затем вы будете использовать data.split() для разделения данных на обучающие и тестовые данные. 0,9 означает, что 90% набора данных будет использоваться для обучения, а остальные — для тестирования.

Шаг 6 - Постройте модель

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

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

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

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

d6c8116f8e7e781b.png

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

fc7bf6a948b7aa26.png

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

Шаг 7 — Экспорт модели

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

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

После выполнения этого кода, если вы щелкнете по маленькому значку папки слева от Colab, вы сможете перейти к папке, в которую вы экспортировали выше (в корневом каталоге — вам может потребоваться подняться на уровень выше) и найти zip-пакет экспортированные файлы содержатся в ModelFiles.zip .

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

a9d8595a3e2564dc.png

Большой! Часть Python завершена, теперь вы можете вернуться в страну JavaScript, которую вы знаете и любите. Фу!

5. Обслуживание новой модели машинного обучения

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

Во-первых, если вы еще этого не сделали, разархивируйте файлы модели, только что загруженной из записной книжки Model Maker Colab, которую вы только что запустили. Вы должны увидеть следующие файлы, содержащиеся в различных папках:

5634d536ef8be9ca.png

Что у вас здесь?

  • model.json — это один из файлов, составляющих обученную модель TensorFlow.js. Вы будете ссылаться на этот конкретный файл в коде JS.
  • group1-shard1of1.bin — это двоичный файл, содержащий большую часть сохраненных данных для экспортированной модели TensorFlow.js, и его необходимо разместить где-то на вашем сервере для загрузки в том же каталоге, что и model.json выше.
  • vocab — этот странный файл без расширения создан в Model Maker и показывает нам, как кодировать слова в предложениях, чтобы модель понимала, как их использовать. Вы углубитесь в это в следующем разделе.
  • labels.txt — просто содержит результирующие имена классов, которые будет предсказывать модель. Для этой модели, если вы откроете этот файл в своем текстовом редакторе, в нем просто будут указаны «ложь» и «истина», указывающие «не спам» или «спам» в качестве вывода прогноза.

Размещение файлов модели TensorFlow.js

Сначала поместите созданные файлы model.json и *.bin на веб-сервер, чтобы вы могли получить к ним доступ через свою веб-страницу.

Удалить существующие файлы модели

Поскольку вы строите конечный результат первой лаборатории кода в этой серии, вы должны сначала удалить существующие загруженные файлы модели. Если вы используете Glitch.com, просто проверьте панель файлов слева для model.json и group1-shard1of1.bin , щелкните раскрывающееся меню с тремя точками для каждого файла и выберите « Удалить », как показано:

7412b0b795d3b84f.png

Загрузка новых файлов в Glitch

Большой! Теперь загрузите новые:

  1. Откройте папку с ресурсами на левой панели вашего проекта Glitch и удалите все загруженные старые ресурсы, если они имеют одинаковые имена.
  2. Нажмите загрузить ресурс и выберите group1-shard1of1.bin для загрузки в эту папку. Теперь он должен выглядеть так после загрузки:

25a2251c7f165184.png

  1. Большой! Теперь сделайте то же самое и с файлом model.json, так что 2 файла должны быть в вашей папке с ресурсами, например:

51a6dbd5d3097ffc.png

  1. Если вы нажмете на файл group1-shard1of1.bin , который вы только что загрузили, вы сможете скопировать URL-адрес в его местоположение. Скопируйте этот путь сейчас, как показано:

92ded8d46442c404.png

  1. Теперь в левом нижнем углу экрана нажмите « Инструменты » > « Терминал ». Дождитесь загрузки окна терминала.
  2. После загрузки введите следующее, а затем нажмите Enter, чтобы изменить каталог на папку www :

Терминал:

cd www
  1. Затем используйте wget для загрузки 2 только что загруженных файлов, заменив приведенные ниже URL-адреса URL-адресами, которые вы создали для файлов в папке ресурсов на Glitch (проверьте папку ресурсов для каждого пользовательского URL-адреса файла).

Обратите внимание на пробел между двумя URL-адресами и на то, что URL-адреса, которые вам нужно будет использовать, будут отличаться от показанных, но будут выглядеть одинаково:

Терминал

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

Супер! Теперь вы сделали копию файлов, загруженных в папку www .

Однако прямо сейчас они будут загружены со странными именами. Если вы ls в терминале и нажмете Enter, вы увидите что-то вроде этого:

9cc90f1d053f517f.png

  1. С помощью команды mv переименуйте файлы. Введите в консоль следующее и нажмите Enter после каждой строки:

Терминал:

mv *group1-shard1of1.bin* group1-shard1of1.bin
mv *model.json* model.json
  1. Наконец, refresh проект Glitch, набрав в терминале Refresh и нажав Enter:

Терминал:

refresh

После обновления вы должны увидеть model.json и group1-shard1of1.bin в папке www пользовательского интерфейса:

50dd98c0a8f3e629.png

Большой! Последний шаг — dictionary.js файл Dictionary.js.

  1. Преобразуйте новый загруженный файл словарного запаса в правильный формат JS либо вручную с помощью текстового редактора, либо с помощью этого инструмента и сохраните полученный результат как dictionary.js в папке www . Если у вас уже есть файл dictionary.js , вы можете просто скопировать и вставить новое содержимое поверх него и сохранить файл.

Ууууу! Вы успешно обновили все измененные файлы, и если вы сейчас попытаетесь использовать веб-сайт, вы заметите, как переобученная модель должна учитывать обнаруженные и изученные пограничные случаи, как показано:

3ece5dbd0a673987.gif

Как видите, первые 6 писем теперь правильно классифицируются как не спам, а вторая партия из 6 идентифицируется как спам. Идеальный!

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

« О боже, акции GOOG только что взлетели вверх! Успевайте, пока не стало слишком поздно! »

Теперь это правильно классифицируется как спам, но что произойдет, если вы измените его на:

« Итак, акции XYZ только что выросли в цене! Купите немного, пока не стало слишком поздно! »

Здесь вы получаете предсказание о том, что 98% вероятно будет спамом, что верно, даже если вы немного изменили символ акций и формулировку.

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

6. Поздравляем!

Поздравляем, вам удалось переобучить существующую модель машинного обучения, чтобы она обновлялась для работы с обнаруженными вами пограничными случаями, и развернули эти изменения в браузере с помощью TensorFlow.js для реального приложения.

Резюме

В этой лаборатории кода вы:

  1. Обнаружены крайние случаи, которые не работали при использовании заранее подготовленной модели спама в комментариях.
  2. Модель Model Maker переобучена, чтобы учитывать обнаруженные вами пограничные случаи.
  3. Экспорт новой обученной модели в формат TensorFlow.js
  4. Обновлено ваше веб-приложение для использования новых файлов

Что дальше?

Так что это обновление отлично работает, но, как и в любом веб-приложении, со временем произойдут изменения. Было бы намного лучше, если бы приложение постоянно совершенствовалось, вместо того чтобы каждый раз делать это вручную. Можете ли вы подумать, как вы могли автоматизировать эти шаги для автоматического переобучения модели после того, как, например, у вас есть 100 новых комментариев, помеченных как неправильно классифицированные? Наденьте свою обычную шляпу веб-инженера, и вы, вероятно, сможете понять, как создать конвейер, чтобы делать это автоматически. Если нет, не беспокойтесь, обратите внимание на следующую лабораторию кода из этой серии, которая покажет вам, как это сделать.

Поделитесь с нами тем, что вы делаете

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

Не забудьте отметить нас в социальных сетях с помощью хэштега #MadeWithTFJS , чтобы ваш проект был представлен в блоге TensorFlow или даже на будущих мероприятиях . Мы хотели бы увидеть, что вы делаете.

Дополнительные лаборатории кода TensorFlow.js, чтобы углубиться

Веб-сайты для проверки