Словесные вложения — это векторное представление синтаксической единицы (слова или словосочетания), позволяющее уловить контекст. Такие векторы активно используются для широкого спектра задач, к примеру, для определения общей эмоциональной окраски текста.
Пример. Рассмотрим два похожих предложения: “Хорошего Вам дня” и “Отличного Вам дня”. Компьютеру понять разницу в их значении довольно сложно, пока мы не создадим исчерпывающий словарь V = {Вам, дня, отличного, хорошего}.
Давайте создадим вектор быстрого кодирования (One-Hot Encoding) для каждого элемента словаря V. Мы получим векторы из нулей и единиц, где единицы представляют место слова в V:
- Вам = [1, 0, 0, 0]
- дня = [0, 1, 0, 0]
- отличного = [0, 0, 1, 0]
- хорошего = [0, 0, 0, 1]
Если мы попытаемся визуализировать эти кодирования, мы сможем представить себе четырехмерное пространство, где каждое слово занимает одно из измерений и не имеет ничего общего с остальными (без проекции по другим измерениям). Это означает, что “Вам” и “дня” так же близки по значению, как “отличного” и “хорошего”, а это неверно.
Наша цель состоит в том, чтобы слова с похожим контекстом занимали близкие пространственные позиции. С точки зрения математики, косинус угла между такими векторами должен стремиться к единице, то есть угол стремиться к нулю.
Здесь возникает идея распределенных представлений. Мы интуитивно вводим некоторую зависимость одного слова от другого, чтобы устранить словарную независимость быстрого кодирования. С этим прекрасно справляется метод Word2Vec и его разновидности — скип-грам (Skip-Gram) и СBOW (Continuous Bag of Words — “Вещественный мешок слов”).
Посмотрим, как работает этот метод на Python. Импортируем библиотеку Gensim:
Определим тренировочные данные:
Обучим модель:
Выведем словарь:
Отобразим вектор для слова “предложение”:
Понравилась статья? Поддержите нас, поделившись статьей в социальных сетях и подписавшись на канал. И попробуйте наши курсы по Машинному обучению на Udemy.