Вложения, векторы и кодировки

Когда я предлагаю представить смысл в виде ряда чисел, многие люди либо не верят, либо ужасаются. Как мы можем взять что-то столь прекрасное и столь же человечное, как высший смысл наших слов, и абстрагировать его в набор чисел? В этом посте я надеюсь показать вам, что действительно существуют способы представления значений слов в виде чисел, и что эти методы очень просты и невероятно эффективны.

Томас Миколов — это имя, которое не так громко звучит в залах науки о данных, как, возможно, следовало бы. Однако, будучи стажером-исследователем в Microsoft, Миколов и несколько других разработали средство для представления слов в виде векторов, которое было настолько эффективным, что первоначально статья была отклонена Международной конференцией по обучению репрезентации как слишком хорошая, чтобы быть истинный. Но это было правдой, и это определенно было хорошо. Созданная ими модель называлась Word2Vec и до сих пор широко используется во многих приложениях НЛП. Однако, прежде чем мы перейдем к Word2Vec, я думаю, что лучше всего начать с как можно более простого представления слов в векторах, а затем строить дальше.

Один горячий или нет

Первый способ представления слов в векторе — это горячее кодирование. Для тех, кто делал какую-либо регрессию с использованием категориальных переменных, это может показаться знакомым. По сути, у нас есть вектор длины нашего словаря с единственным значением 1 для позиции слова в словаре, как показано ниже:

Aardvark = [1,0,0,0,0,...]
Abalone  = [0,1,0,0,0,...]

Это, пожалуй, самый простой способ кодирования полного словаря. К сожалению, эти векторы не так много говорят нам об отношениях между этими словами, например, кошка и машина могут быть рядом друг с другом с точки зрения их представлений, но все это говорит нам о том, что последняя буква слова отличается. . Следовательно, это не будет особенно полезно для каких-либо задач НЛП, за исключением, возможно, части проверки орфографии для слов, которые отличаются на одну букву. Что, если вместо этого мы упорядочим наш словарь слов в зависимости от того, насколько они близки по смыслу? Вместо этого, возможно, кошка и собака ближе всего по смыслу, а не по написанию, поэтому мы представляем их друг от друга на расстоянии:

Cat = [...0,0,0,0,1,0,0,0...]
Dog = [...0,0,0,0,0,1,0,0...]

Это очень грубое представление значения, и оно может помочь в начале поискового запроса Где я могу завести домашнее животное…. Проблема в том, что близость этих слов в реальном мире сильно различается в зависимости от контекста, в котором они используются. Если поисковый запрос начинается со слов Тигр — это тип…, то приведенное выше представление не отражает близости тигров с кошками или вместо этого нам может понадобиться слово животное.

Все горячее

Вот тут-то и появляются Word2Vec и подобные модели. Что, если вместо одного горячего представления все значения в векторе являются горячими и представлены с плавающей запятой. Затем мы можем получить огромное количество текстовых данных и создать алгоритм глубокого обучения, который учится представлять эти слова в виде матриц 300x300 на основе контекста слов рядом, используя методы скип-граммы или непрерывного набора слов. Мало того, что у вас есть намного меньшие, более плотные векторы, у вас есть векторы, которые, если они созданы достаточно большим набором данных, способны представлять значение с точки зрения отношения одного слова к другому. Лучший способ продемонстрировать это на каноническом примере, поскольку эти представления являются векторами, мы можем выполнять очень простое сложение и вычитание векторов, поэтому:

king - man + woman = queen

Происходит то, что мы просто складываем векторы вместе, как обычно, и результирующий вектор не является вектором для ферзя, однако из наших смоделированных представлений вектор, который ближе всего к результату наших простых математических вычислений, это вектор для ферзя. Поначалу это кажется волшебством, но существуют различные библиотеки, например, spaCy, которые позволят вам попробовать это дома.

Большая картина

Вложения слов, подобные этому, имеют блестящие приложения для задач НЛП, таких как машинный перевод и текстовый вывод. Однако для меня самой интересной идеей здесь является то, что это говорит нам о лингвистических данных, на которых обучаются модели. В случае более крупных экземпляров Word2Vec обучался на индексе Google, который содержит несколько триллионов слов на английском языке. Это означает, что взаимодействия между векторами сообщают нам об отношениях между словами, которые составляют письменную информацию в Интернете. Другой канонический пример силы встраивания слов следующий:

london - england + france = paris

Это кажется интуитивно понятным: Лондон — столица и крупнейший город Англии, поэтому, если вы избавитесь от английской принадлежности и замените ее французской, вы получите столицу и самый большой город Франции — Париж. Однако при этом мы предположили, что значения в изменяемом векторе — это «Капитальность» и «Величина». Что, если мы попробуем то же самое с США? Мы могли бы разумно ожидать Вашингтон, округ Колумбия. Однако, если вы попробуете любую из домашних моделей Word2Vec, чтобы выполнить вышеуказанную векторную математику с США, а не с Францией, результат может вас удивить:

london - england + usa = new york

Нью-Йорк не является ни крупнейшим городом США, ни столицей. Это должно показать вам, что значения во встраиваниях слов не являются конкретными, четко определенными понятиями; модель учится полностью без присмотра. Хотя мы, возможно, не догадались о Нью-Йорке, тем не менее, это кажется интуитивно понятным. Нью-Йорк — крупный финансовый центр, как и Лондон, и, как и Лондон, он космополитичен. Географически он ближе к Лондону, чем к большинству других городов США. Мы могли бы продолжать размышлять о том, чем объясняется сходство Лондона и Нью-Йорка с точки зрения их векторных представлений, но это всегда будут только предположения; модель сама произвела значения. Это настоящая магия встраивания слов, они фиксируют очень интуитивные отношения между словами в данных, на которых они обучаются.

Это вызывает интересные вопросы; если вы вспомните наш предыдущий пример с королями и королевами и спросите у Твиттера, может ли мужчина быть королевой или нет, разразится буря. Споры о том, можно ли считать это образным по мере того, как язык и социальные установки изменились, разгорятся еще сильнее. Следующим рубежом для встроенных значений слов будет не только гонка за повышением точности, но и серьезное рассмотрение того, что означает эта точность.