Недавно я начал изучать машинное обучение для текста (до сих пор я работал с изображениями), и меня познакомили с StarSpace Facebook. Для тех, кто не знает о StarSpace, вот как это описывает Facebook Research.

StarSpace - это нейронная модель общего назначения для эффективного обучения встраиванию сущностей для решения широкого круга задач.

Одним из вариантов использования, упомянутых в репозитории, является TagSpace для генерации вложений слов / тегов, и именно об этом эта статья.

В этой статье не будет объяснения, что такое встраивание и зачем они нужны, поскольку я считаю, что статей, в которых это обсуждается, более чем достаточно.

Ранний подход к созданию встраиваемых слов

Есть несколько подходов к генерации вложений слов. Самыми популярными из них являются word2vec и GloVe. Чтобы понять, чем TagSpace отличается от них, нам нужно понимать, как работает любой из них. В этой статье мы просто обсудим word2vec.

Word2Vec

Word2Vec имеет довольно простой способ изучения встраивания слов. Учитывая предложение, мы берем слово (скажем, W) в предложении и вычисляем вложения всех слов вокруг него. Поскольку модель еще не обучена, эти вложения будут просто случайными числами. Затем мы используем эти вложения для предсказания самого слова (W). Использование этого подхода для обучения модели огромному корпусу предложений и огромному словарю должно в конечном итоге привести к тому, что нейронная модель будет генерировать вложения, содержащие некоторую информацию о самом слове. (Эта лекция профессора Кристофера Мэннинга должна дать лучшее понимание того, как это работает).

Чем отличается TagSpace?

Одно из основных различий между TagSpace и другими методами, такими как Word2Vec и GloVe, заключается в том, что TagSpace использует контролируемое обучение, в то время как другие используют неконтролируемое обучение. Алгоритмы неконтролируемого обучения тренируются с объектом реконструкции, то есть вложения используются для предсказания исходного текста. При обучении с учителем цель модели - пометить данный текст.

Данные для TagSpace

Самая большая проблема, с которой любой может столкнуться при обучении с учителем, - это получение данных с пометкой. Но для этого варианта использования есть простое решение. В сообщениях Facebook (и любых других сообщениях в социальных сетях) #hastags обычно служат ярлыком для того, о чем говорится в статье. Это данные, которые использует TagSpace. Он использует огромный корпус текста с хэштегами в / для этих сообщений в качестве ярлыков.

Модель TagSpace

Учитывая предложение длины l, мы генерируем вектор размерности d для каждого слова в предложении, в результате чего в матрице lxd. Затем мы добавляем отступ из векторов K - 1, где K - размер фильтра в сверточном слое. . Мы передаем матрицу (с заполнением) на слой свертки с фильтрами H. В результате получается матрица размером l x H. Затем идет слой Max pooling, слой активации (tanh) и линейный слой. В результате получается вектор размером d. Мы также создаем вектор размера d для тега. Затем мы используем эти векторы для ранжирования всех тегов.

Функция оценки для ранжирования тегов: f (w, t) = econv (w) · elt (t). Где econv - это встраивание документа (в данном случае сообщения), а elt - встраивание тег кандидата.

Обучение модели

Для каждой обучающей выборки мы отбираем положительный тег, а затем выбираем случайные теги до 1000 раз, пока

где m - поле. Затем выполняется ступенчатый градиент для оптимизации потерь в парном шарнире.

Для получения информации о результатах работы и более точных метриках использованных данных прочтите статью здесь.