Bag of Words (BoW) — это метод представления текста в виде векторной формы, при котором каждое слово документа кодируется как отдельный признак. Этот подход широко используется для задач классификации текста, анализа тональности, распознавания тем и других задач обработки естественного языка (NLP).
В контексте Brain.js, Bag of Words применяется для подготовки текстовых данных перед подачей их в нейронную сеть. Brain.js работает с числовыми массивами, поэтому исходный текст необходимо превратить в числовое представление.
Токенизация текста Текст разбивается на
отдельные слова или токены. Например, предложение
"Привет мир" превращается в массив:
["привет", "мир"]Создание словаря Словарь содержит все уникальные слова из обучающего корпуса. Каждому слову присваивается индекс. Пример словаря:
const vocabulary = ["привет", "мир", "как", "дела"];Векторизация документа Для каждого текста создаётся вектор длиной словаря, где каждый элемент указывает на наличие или частоту соответствующего слова в документе. Существует два основных способа кодирования:
Пример бинарного кодирования для предложения
"Привет мир":
const vector = [1, 1, 0, 0]; // "привет" и "мир" есть, "как" и "дела" нет
Brain.js принимает на вход массивы чисел, что делает BoW идеальным методом для подготовки данных.
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
// Словарь всех слов из корпуса
const vocabulary = ["привет", "радость", "грусть", "плохо", "хорошо"];
// Функция преобразования текста в вектор
function textToVector(text) {
const tokens = text.toLowerCase().split(/\W+/);
return vocabulary.map(word => tokens.includes(word) ? 1 : 0);
}
// Обучающие данные
const trainingData = [
{ input: textToVector("привет, я рад"), output: { positive: 1 } },
{ input: textToVector("мне грустно"), output: { negative: 1 } },
{ input: textToVector("всё хорошо"), output: { positive: 1 } },
{ input: textToVector("плохо себя чувствую"), output: { negative: 1 } },
];
// Обучение сети
net.train(trainingData, {
iterations: 2000,
log: true,
logPeriod: 100,
learningRate: 0.3
});
// Тестирование
const testVector = textToVector("я чувствую радость");
const output = net.run(testVector);
console.log(output);
В этом примере каждый текст преобразуется в фиксированный вектор, который затем используется как вход нейронной сети. Подход Bag of Words позволяет сети выявлять закономерности присутствия слов и их комбинаций, что важно для задач классификации.
Для смягчения этих проблем часто применяют:
Bag of Words в Brain.js можно комбинировать с:
Использование BoW позволяет создать базовый и понятный pipeline обработки текста, который легко расширять и интегрировать с более сложными методами обработки естественного языка.