Классификация текста

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

Подготовка данных

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

  • One-hot encoding: каждая уникальная лексема или символ кодируется отдельной бинарной переменной.
  • Bag-of-words: текст представляется как вектор частот встречаемых слов.
  • TF-IDF: расширение bag-of-words с учетом важности слова в корпусе.

Пример преобразования текста в формат, подходящий для Brain.js:

const trainingData = [
  { input: { hello: 1, world: 1 }, output: { greeting: 1 } },
  { input: { buy: 1, now: 1 }, output: { sales: 1 } }
];

Каждое поле input представляет вектор слов, а output — целевую категорию в формате one-hot.

Создание сети

Brain.js предоставляет класс NeuralNetwork для построения полносвязных нейронных сетей. Для текстовой классификации создается сеть с входным слоем, скрытым слоем и выходным слоем, количество нейронов которого соответствует числу категорий.

const brain = require('brain.js');
const net = new brain.NeuralNetwork({
  hiddenLayers: [10, 10], // два скрытых слоя по 10 нейронов
  activation: 'relu' // функция активации ReLU
});
  • hiddenLayers задает архитектуру сети.
  • activation определяет нелинейность; для классификации часто используются ReLU или sigmoid.

Обучение сети

Обучение проводится методом обратного распространения ошибки. Brain.js автоматически выполняет нормализацию входных данных при обучении.

net.train(trainingData, {
  iterations: 20000,    // максимальное число итераций
  learningRate: 0.01,   // скорость обучения
  log: true,             // вывод прогресса
  logPeriod: 1000        // каждые 1000 итераций
});
  • iterations: чем больше значение, тем точнее обучение, но выше риск переобучения.
  • learningRate: оптимальное значение подбирается экспериментально.
  • log и logPeriod помогают отслеживать ход обучения.

Классификация текста

После обучения сеть может классифицировать новые тексты. Для этого входной текст преобразуется в формат one-hot и передается функции run.

const output = net.run({ hello: 1, world: 1 });
console.log(output); // { greeting: 0.98, sales: 0.01 }

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

Обработка словарного запаса

При работе с большим корпусом важно создать единый словарь. Слова, отсутствующие в словаре, игнорируются или кодируются отдельным маркером <UNK>. Рекомендуется:

  • приводить слова к нижнему регистру;
  • удалять знаки пунктуации;
  • использовать стемминг или лемматизацию для уменьшения размера словаря.

Ускорение и оптимизация

Для больших наборов данных можно использовать NeuralNetworkGPU, что позволяет обучать сеть с использованием графического процессора:

const net = new brain.NeuralNetworkGPU({
  hiddenLayers: [20, 20],
  activation: 'relu'
});

Это особенно полезно для онлайн-классификации текста, когда требуется высокая скорость предсказаний.

Преимущества и ограничения Brain.js для текстовой классификации

Преимущества:

  • Простая интеграция в Node.js и браузер.
  • Поддержка GPU для ускорения обучения.
  • Легкость настройки и визуализации процесса обучения.

Ограничения:

  • Не подходит для работы с очень большими словарями без предварительной оптимизации.
  • Требует ручной предобработки текста.
  • Меньшая точность по сравнению с современными библиотеками глубокого обучения, такими как TensorFlow.js или PyTorch.js, на сложных задачах NLP.

Пример комплексного подхода

  1. Сбор корпуса текстов и разметка категорий.
  2. Токенизация, лемматизация и построение словаря.
  3. Преобразование текстов в one-hot или bag-of-words.
  4. Создание сети с подходящей архитектурой.
  5. Настройка параметров обучения и обучение сети.
  6. Проверка качества на тестовой выборке.
  7. Использование сети для классификации новых текстов.

Такой подход позволяет построить эффективный инструмент для распознавания тем или категорий текста в JavaScript с помощью Brain.js.