machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Модель НЛП Керас в браузере с TensorFlow.js

Дата публикации Apr 4, 2019

В этой статье я попытаюсь осветить три вещи:

  1. Как написать простоПризнание именованного субъектамодель - типичнаяОбработка естественного языка(НЛП) задача.
  2. Как экспортировать эту модель вTensorFlow.jsформат.
  3. Как сделать простое веб-приложение для поиска Named-Entity в строке без серверной части.

Вы можете проверить это на моем личном сайте.

Во-первых, этот пост в блоге для тех, кто знает основные этапы глубокого обучения (RNN, Attention) и знает основы JavaScript. Если вы плохо разбираетесь в RNN, я рекомендую вам поступитьНеобоснованная эффективность рекуррентных нейронных сетейАндрея Карпати.

TensorFlow.js - это библиотека JavaScript для разработки и обучения ML-моделей на JavaScript, а также для развертывания в браузере или на Node.js.

В этом примере мы будем использовать простую модель кераса для решения классической задачи NER. Мы будем тренироваться наCoNLL2003набор данных. Наша модель - это просто вложение слов, ГРУ и очень простой механизм внимания. После мы визуализируем вектор внимания в браузере. Если вы знакомы с современными подходами для решения аналогичной задачи, вы знаете, что этот подход не является современным. Однако для запуска его в браузере и просто, к примеру, этого достаточно. Кроме того, если вы знакомы с задачей NER, вы можете пропустить следующие два раздела о распознавании именованных объектов, модели данных и модели нейронной сети NER на Keras и посмотреть исходный код.

Задача и данные

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

Обычно задача распознавания именованных объектов (NER) - это задача seq2seq. Для каждого токена из x_i мы должны предсказать токен y_i, где x - входная последовательность, а y - последовательность именованных объектов.

В этом примере мы будем искать людей (B-PER, I-PER), местоположения (B-LOC, I-LOC) и организации (B-ORG, I-ORG), кроме того, модель определит специальные сущность - MISC - именованная сущность, но не личность, местоположение и организация

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

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

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

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

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

модель

Дай угадаю ... РНН?

Да, это RNN. Более конкретно, этоГРУ (закрытые рекуррентные единицы)и простой слой внимания. В качестве представления слова используется GloVe. В этом посте я не буду вдаваться в подробности, а просто оставлю здесь код модели. Я надеюсь, что это легко понять.

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

Наконец, давайте скомпилируем, обучим и экспортируем модель:

Полный код для этих шагов, вы можете найти в моемGitHub хранилище в train.py.

Среда разработки

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

Нам нужны два файла:package.jsonа такжеserver.js.

в server.js мы определили статическую папку для хранения модели, js-скриптов и всех других файлов. Для использования этого сервера, вы должны ввести

npm install && node server.js

в вашем терминале. После этого вы можете получить доступ к своим файлам в браузере поHTTP: // локальный: 8081

веб приложение

Естьindex.html,predict.jsи файлы, которые были сгенерированы в предыдущем шаге Как видите, это очень маленькое веб-приложение. index.html содержит требования и поле ввода для ввода строк.

Теперь самая интересная часть поста в блоге - про tenorflow.js. Вы можете загрузить модель поtf.loadLayersModelвызов методаЖдитеоператор. Это важно, потому что мы не хотим блокировать наше веб-приложение при загрузке модели. Если мы загрузим модель, мы получим модель, которая может предсказывать только токены, но как насчет вектора внимания? Как получить активацию от внимания? Для получения данных из внутренних слоев в tenorflow.js мы должны создать новую модель, в которой выходные слои будут содержать выходные данные и другие слои из исходной модели, например:

Вот,модельэто оригинальная модель,emodelэто модель сattention_vectorв качестве выходов.

предварительная обработка

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

Делать предсказания

Теперь мы должны обеспечить передачу данных из простого текстового формата строки в формат TF - тензор. В предыдущем разделе мы написали хелперы для перевода строки в массив чисел. Теперь мы должны создатьtf.tensorиз этого массива. Как вы помните, входной слой модели имеет форму(Нет, 113)Вот почему мы должны расширить размер входного тензора. Ну, это все, теперь мы можем сделать прогноз в браузере.predictметод. После этого вы должны распечатать прогнозируемые данные в браузере, и ваше веб-приложение с нейронной сетью без серверной части готово.

Вывод

TensorFlow.js - это библиотека для использования нейронных сетей в браузерах, таких как Chrome, Firefox или Safari. Если вы откроете это веб-приложение на смартфоне iPhone или Android, оно тоже будет работать.

Вы можете проверить это на моем личном веб-сайте по этой ссылке:http://deepdivision.net/2019/03/20/nlp-keras-model-in-browser-with-tensorflowjs.html

Кроме того, вы можете найти этот код с некоторыми дополнениями в моемGitHub,

Оригинальная статья

Footer decor

© machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map