Реализация классификации текста с помощью TensorFlow может быть простой. Одна из областей, где может применяться классификация текста - обработка текста чат-ботом и разрешение намерений. В этом посте я шаг за шагом опишу, как построить модель TensorFlow для классификации текста и как выполняется классификация. Пожалуйста, обратитесь к моему предыдущему сообщению, относящемуся к аналогичной теме - Контекстный чат-бот с TensorFlow, Node.js и Oracle JET - шаги, как установить и заставить его работать. Я бы порекомендовал прочитать этот замечательный пост о реализации чат-бота - Контекстные чат-боты с Tensorflow.

Полный исходный код доступен в репозитории GitHub (см. Шаги, описанные в упомянутом выше блоге).

Реализация классификации текста:

Шаг 1. Подготовка данных

  • Обозначение шаблонов в массив слов
  • Все слова строчными буквами и корнем. Пример: Аптека = фарм. Попытка представить родственные слова
  • Создать список классов - намерения
  • Создать список документов - комбинация между списком шаблонов и списком намерений

Реализация Python:

Шаг 2. Подготовка ввода TensorFlow

  • [X: [0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, …N], Y: [0, 0, 1, 0, 0, 0, …M]]
  • [X: [0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, …N], Y: [0, 0, 0, 1, 0, 0, …M]]
  • Массив, представляющий шаблон с 0/1. N = размер словарного запаса. 1, когда позиция слова в словаре соответствует слову из шаблона
  • Массив, представляющий намерение с 0/1. M = количество намерений. 1, когда позиция намерения в списке намерений / классов соответствует текущему намерению

Реализация Python:

Шаг 3. Обучение нейронной сети

  • Используйте tflearn - библиотеку глубокого обучения с высокоуровневым API для TensorFlow.
  • Определить форму ввода X - равно размеру словарного запаса
  • Определите два слоя с 8 скрытыми нейронами - оптимально для задачи классификации текста (на основе экспериментов)
  • Определить форму ввода Y - равно количеству намерений
  • Примените регрессию, чтобы найти лучшие параметры уравнения
  • Определить модель глубокой нейронной сети (DNN)
  • Запустите model.fit, чтобы построить модель классификации. Предоставьте входные данные X / Y, количество эпох и размер пакета
  • Для каждой эпохи выполняется несколько операций, чтобы найти оптимальные параметры модели для классификации будущих входных данных, преобразованных в массив 0/1.

Размер партии:

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

Реализация Python:

Шаг 4. Первоначальное тестирование модели

  • Токенизируйте входное предложение - разбейте его на массив слов
  • Создайте пакет слов (массив с 0/1) для входного предложения - массив, равный размеру словарного запаса, с 1 для каждого слова, найденного во входном предложении
  • Запустите model.predict с заданным массивом пакетов слов, это вернет вероятность для каждого намерения

Реализация Python:

Шаг 5. Повторное использование обученной модели

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

Реализация Python:

Шаг 6. Классификация текста

  • Определите интерфейс REST, чтобы эта функция была доступна за пределами TensorFlow
  • Преобразуйте входящее предложение в массив слов и запустите model.predict
  • Рассмотрите результаты с вероятностью выше 0,25, чтобы отфильтровать шум
  • Возврат нескольких идентифицированных намерений (если есть) вместе с заданной вероятностью

Реализация Python:

Первоначально опубликовано на сайте andrejusb.blogspot.com 30 июля 2018 г.