Brain.js — это библиотека на JavaScript, предназначенная для создания и обучения нейронных сетей прямо в браузере или на Node.js. Одной из ключевых возможностей является работа с простыми эмбеддингами символов, что позволяет преобразовывать текстовые данные в числовые представления, пригодные для обучения сети.
Для обработки текста нейронной сетью необходимо представлять символы в виде чисел. В Brain.js для этого обычно используют one-hot кодирование.
One-hot кодирование — это способ представления
каждого символа уникальным вектором, в котором все элементы равны 0,
кроме одного, соответствующего позиции символа. Например, для алфавита
['a', 'b', 'c']:
a → [1, 0, 0]b → [0, 1, 0]c → [0, 0, 1]Такой подход обеспечивает, что каждый символ имеет уникальное числовое представление, которое нейронная сеть может различать.
Перед обучением нейронной сети текст необходимо преобразовать в массив входов и выходов. Для задачи предсказания следующего символа это выглядит так:
const brain = require('brain.js');
const text = 'abcabc';
const chars = Array.from(new Set(text)); // ['a','b','c']
const charToIndex = {};
chars.forEach((char, index) => charToIndex[char] = index);
function oneHot(char) {
const vector = Array(chars.length).fill(0);
vector[charToIndex[char]] = 1;
return vector;
}
const trainingData = [];
for (let i = 0; i < text.length - 1; i++) {
trainingData.push({
input: oneHot(text[i]),
output: oneHot(text[i + 1])
});
}
Здесь каждый элемент trainingData содержит
вход (текущий символ) и выход
(следующий символ), что формирует основу для обучения сети.
Для работы с простыми эмбеддингами обычно используют Feedforward Neural Network (прямого распространения).
const net = new brain.NeuralNetwork({
hiddenLayers: [10] // количество нейронов в скрытом слое
});
net.train(trainingData, {
iterations: 2000,
log: true,
logPeriod: 100,
learningRate: 0.01
});
hiddenLayers задаёт количество нейронов и слоёв, влияя
на способность сети выявлять закономерности в последовательности
символов.iterations определяет количество проходов
обучения.learningRate регулирует скорость корректировки
весов.После обучения нейронная сеть может предсказывать следующий символ на основе текущего:
function predictNext(char) {
const output = net.run(oneHot(char));
const maxIndex = output.indexOf(Math.max(...output));
return chars[maxIndex];
}
let result = 'a';
for (let i = 0; i < 10; i++) {
const nextChar = predictNext(result[result.length - 1]);
result += nextChar;
}
Такой подход позволяет генерировать последовательности символов, используя простые эмбеддинги.
map или lookup tables, сохраняя уникальность
символов, но уменьшая размер входных векторов.Использование простых эмбеддингов символов в Brain.js позволяет создавать эффективные модели для анализа текста, генерации последовательностей и экспериментов с нейронными сетями, оставаясь при этом легковесным и понятным инструментом для работы в среде JavaScript.