Перейти к содержимому

Слова тоже векторы

До этого мы рассматривали работу с какими-то абстрактными данными

Сейчас будет целый урок про достаточно конкретный пример (просто мне он показался хорошим примером интересного использования геометрии данных)Пусть мы хотим написать какую-нибудь нейросеть, работающую со словами

Или генератор синонимов

Или ещё что угодно, где при хранении слов мы хотим понимать их смысл просто записывая набор чисел

Мы будем заходить через линейную алгебру

Каждому слову сопоставим вектор из допустим 100 чисел

Но как к ним привязать смысл?

Главная идея алгоритмов построения проста: слова, встреченные в похожих контекстах, должны иметь близкие векторы.

Если слова «кошка» и «собака» часто встречаются рядом со словами «кормить», «пушистый», «ветеринар», то алгоритм подбирает координаты их векторов так, чтобы их косинусное сходство было максимально близко к 1:

cosα=vкошка,vсобакаvкошкаvсобака1\cos \alpha = \frac{\langle v_{\text{кошка}}, v_{\text{собака}} \rangle}{\Vert{}v_{\text{кошка}}\Vert{} \cdot \Vert{}v_{\text{собака}}\Vert{}} \approx 1

Геометрически это означает, что в d-мерном пространстве похожие по смыслу слова образуют компактные кластеры.

Так как наборы слов формируют честное векторное пространство, над ними работают все правила линейной алгебры: сложение, вычитание и сдвиги

Возьмём знаменитый пример:

vкорольvмужчина+vженщинаvкоролеваv_{\text{король}} - v_{\text{мужчина}} + v_{\text{женщина}} \approx v_{\text{королева}}

Разберём, что происходит с геометрической точки зрения:

  1. Операция вычитания vкорольvмужчинаv_{король} - v_{мужчина}

Мы берем вектор слова “король” и вычитаем из него вектор “мужчина”. В результате получается вектор разности, который выделяет абстрактное смысловое направление — :королевский титул / монархия без относительно пола” 2. Операция сложения +vженщина+ v_{женщина}:

Мы прибавляем полученную разность к вектору “женщина”, сдвигая точку в пространстве вдоль условного направления “гендера” 3. Поиск результата:

Итоговая точка в пространстве почти никогда не совпадёт идеально с координатой какого-то конкретного слова. Поэтому алгоритм ищет ближайший вектор по косинусному сходству среди всех слов в словаре. И этим ближайшим соседом оказывается вектор слова “королева""

Похожим принципом работают и многие современные нейросети

Их задача найти ближайшее по смыслу слово в данном контексте

И нужный смысл это точка в пространстве

А нейросеть выдаёт ближайшее к этой точке слово

Такой подход так же помогает просто искать скрытые зависимости между смыслами слов, которые в обычной речи могут быть не так очевидны