Brain.js — это библиотека на JavaScript для построения и обучения нейронных сетей, ориентированная на простоту использования. Помимо числовых данных, она поддерживает работу с текстовыми последовательностями, что позволяет применять нейросети для задач классификации текста, генерации текста и предсказания последовательностей символов.
Нейронные сети работают с числовыми данными, поэтому текст необходимо преобразовать в числовой формат. Существуют несколько подходов:
One-hot encoding символов
N (где
N — количество уникальных символов), в котором только одна
позиция равна 1, а остальные — 0.{a, b, c} символ b
кодируется как [0, 1, 0].One-hot encoding слов
Векторизация с нормализацией
Для работы с последовательностями текста используется recurrent neural network (RNN). В Brain.js есть несколько типов RNN:
recurrent.LSTM — сеть на основе LSTM, способная хранить
долгосрочные зависимости в последовательности.recurrent.GRU — GRU-сеть, более простая по архитектуре,
быстрее обучается, но может уступать LSTM в точности на длинных
последовательностях.Пример создания сети на символах:
const brain = require('brain.js');
const net = new brain.recurrent.LSTM();
const trainingData = [
{ input: "привет", output: "мир" },
{ input: "как", output: "дела" }
];
net.train(trainingData, {
iterations: 2000,
log: true,
logPeriod: 100,
learningRate: 0.01
});
Ключевые параметры тренировки:
После обучения сети на последовательностях можно генерировать текст.
Метод run возвращает предсказанную последовательность:
const output = net.run("при");
console.log(output); // Возможный результат: "вет"
Для генерации более длинного текста используется рекурсивная подача сети на вход своих же предсказаний:
let seed = "пр";
let result = seed;
for (let i = 0; i < 10; i++) {
const nextChar = net.run(result.slice(-3)); // последние 3 символа
result += nextChar;
}
console.log(result);
Brain.js поддерживает классификацию текстовых данных через
NeuralNetwork или recurrent.LSTM:
const net = new brain.recurrent.LSTM();
const trainingData = [
{ input: "холодно и дождливо", output: "плохая погода" },
{ input: "солнечно и тепло", output: "хорошая погода" }
];
net.train(trainingData, { iterations: 1000 });
const prediction = net.run("тепло и солнечно");
console.log(prediction); // "хорошая погода"
NeuralNetwork vs LSTM) зависит
от длины и структуры текста: LSTM лучше справляется с длинными
последовательностями.Предсказание следующего символа в слове Обучение сети на словарном наборе позволяет предсказывать вероятное продолжение слова.
Автозаполнение текста Используется seed-фраза, из которой сеть генерирует завершение, применимо для чат-ботов или редакторов текста.
Классификация настроений Короткие отзывы или комментарии преобразуются в метки «положительно/отрицательно» с помощью LSTM или GRU.
Простая генерация кода или шаблонов Обучение на примерах кода позволяет генерировать заготовки или подсказки для разработчиков.
Работа с текстом в Brain.js сочетает простоту настройки и мощность рекуррентных сетей, позволяя строить решения для разнообразных задач обработки естественного языка прямо на JavaScript.