Это сообщение в блоге от Расы проясняет некоторые аспекты.
С Rasa вы сначала обучите векторизатор, который преобразует каждый документ в N
-мерный вектор, где N
размер вашего словарного запаса.Это именно то, что делает scikit-learn CountVectorizer .
Каждое вложение намерений вместо этого создается как горячий вектор (или вектор с большим числом 1
s, если вы «смешали»)намерения).Каждый из этих векторов имеет одинаковые размеры вложения документа, поэтому я думаю, N
может быть (размер словарного запаса) + (количество намерений).
В этот момент Rasa обучит нейронную сеть (по умолчанию)2 скрытых слоя), где функция потерь предназначена для максимизации сходства между документом d
и намерением i
, если d
помечено как i
в обучающем наборе (и минимизировать сходство d
со всемидругие намеренные вложения).Сходство по умолчанию рассчитывается как косинусное сходство.
Каждый новый, невидимый документ внедряется нейронной сетью, и его сходство вычисляется для каждого из намерений.Намерение, наиболее похожее на новый документ, будет возвращено в качестве прогнозируемой метки.
Старый ответ:
Это не LSTM.Они говорят, что их подход вдохновлен Facebook * StarSpace .
. Я не нахожу документ выше очень интересным, однако, глядя на репозиторий Starspace Github, сценарий для классификации текста говорят, что он имеет те же настройки, что и их предыдущая работа TagSpace .
Бумага TagSpace более понятна и объясняет, как они используют CNN для встраивания каждого документа впространство так, что его расстояние до связанного вектора класса минимизировано.И слова, документы и классы («теги») встраиваются в одно и то же d
-мерное пространство, а их расстояние измеряется с помощью косинусного сходства или внутреннего произведения.