Токенизация — процесс преобразования текстовых данных в отдельные элементы, которые могут быть обработаны нейронной сетью. В контексте Brain.js токены обычно представляют собой слова, символы или подстроки фиксированной длины (n-grams). Правильная токенизация критически важна для обучения сети, так как она напрямую влияет на качество распознавания паттернов и генерации текста.
В Brain.js входные данные для текстовой сети должны быть представлены в числовой форме. Для этого каждый токен кодируется в виде вектора чисел, обычно бинарного или с плавающей точкой, где каждый элемент вектора соответствует наличию или частоте токена.
Словарь — это структура, сопоставляющая каждому уникальному токену числовой идентификатор или вектор. В Brain.js словарь используется для двух задач:
Этапы построения словаря:
Пример структуры словаря для сети с символами:
const tokens = ['a', 'b', 'c', 'd'];
const dictionary = {};
tokens.forEach((token, index) => {
dictionary[token] = index;
});
One-hot кодирование — базовый способ представления токенов для Brain.js. Для каждого токена создается вектор длиной N, где N — количество уникальных токенов. Вектор состоит из нулей, за исключением позиции, соответствующей токену, где стоит единица.
Пример one-hot вектора для токена 'b' из словаря
['a','b','c','d']:
[0, 1, 0, 0]
Такое представление подходит для большинства небольших текстовых задач и обеспечивает корректную обработку категориальных данных.
Brain.js предоставляет классы NeuralNetwork и
recurrent.LSTM для работы с текстом. Входные данные для
обучения должны быть заранее токенизированы и преобразованы в числовую
форму:
const brain = require('brain.js');
const net = new brain.recurrent.LSTM();
const trainingData = [
{ input: 'hello', output: 'world' },
{ input: 'hi', output: 'there' }
];
net.train(trainingData, {
iterations: 2000,
log: true,
logPeriod: 100
});
Внутри сети токены автоматически кодируются в векторы, но для сложных текстов рекомендуется предварительное ручное создание словаря и нормализация текста (например, перевод в нижний регистр, удаление пунктуации), чтобы уменьшить размер словаря и улучшить обучение.
При построении словаря часто встречаются токены, встречающиеся лишь
один раз или не встречающиеся в обучающих данных. Для них обычно
создается специальный токен <UNK> (unknown). Все
неизвестные элементы текста заменяются на этот токен, что предотвращает
ошибки на этапе предсказания.
Тщательная токенизация и построение словаря позволяют нейронным сетям Brain.js эффективно анализировать текст, находить закономерности и корректно генерировать последовательности. Эти процессы лежат в основе качественного обучения и точного предсказания текстовых данных.