Что значит «поразительного качества»? Миколов и его коллеги показали публике несколько небольших арифметических трюков, которые мгновенно облетели весь мир. Если взять вектор слова «король», вычесть из него вектор слова «мужчина», прибавить вектор слова «женщина» и поискать в словаре ближайший к получившемуся, в большинстве случаев находился вектор слова «королева». Если из вектора «Париж» вычесть «Франция» и прибавить «Италия», получался «Рим». Из «иду» минус «идти» плюс «бегать» получалось «бегу». Эти соответствия модель никто не закладывал; она выучила их сама, по статистике совстречаемости слов в большом текстовом массиве.
Для людей, занимавшихся обработкой языка, это было поразительно. Получалось, что в самом подсчёте сочетаемостей слов скрыта геометрия, в которой слова, имеющие общие свойства, оказываются в одной плоскости. Пол: мужской-женский, единственное-множественное число, прошедшее-настоящее время, страна-столица; всё это автоматически выходило в виде определённых векторных направлений. Никаких лингвистических правил никто в модель не вкладывал; она сама их нашла, просто читая много текста.
word2vec за несколько месяцев стал самым популярным инструментом обработки естественного языка. Стартапы, исследовательские группы, поисковые компании начали повсеместно использовать его как первый шаг любой системы. Если до 2013 года слово в компьютере было индексом или мешком букв, то после 2013 года оно стало точкой в трёхсотмерном пространстве, и эта точка очень многое говорила о смысле.
Миколов, между тем, продолжал думать о том, что можно сделать с языком ещё. Векторы слов были началом, но они описывали изолированные единицы. Хотелось обрабатывать целые предложения, потом — целые тексты. Хотелось, чтобы машина могла читать одно предложение на одном языке и выдавать его перевод на другом. Хотелось перейти от изолированных слов к последовательностям.
Здесь начались разные истории, в зависимости от того, кто рассказывает. По версии Миколова, он несколько раз обсуждал такую идею с Ильёй и с другим коллегой по Google Brain по имени Куок Ле. По его собственным позднейшим словам, он предлагал: давайте обучим нейроязыковую модель на парах предложений из двух языков, а потом, увидев одно предложение, она будет генерировать его перевод. По версии Ильи и Куока, история выглядела иначе и Миколов в формировании идеи участвовал намного скромнее. Кто из них прав, мы точно не узнаем; научные приоритеты редко удаётся восстановить однозначно, особенно когда работа делалась в коридорных разговорах за обедом. Что известно точно: к лету 2014 года команда из трёх человек — Илья Суцкевер, Ориол Виньялс и Куок Ле — написала статью, которая называлась «Sequence to Sequence Learning with Neural Networks».
Идея, изложенная в этой статье, была элегантна и проста. Возьмём две нейронные сети. Назовём первую кодировщиком, вторую декодировщиком. Обе будут типа LSTM, особой разновидности рекуррентной нейронной сети, придуманной в 1997 году немецкими исследователями Юргеном Шмидхубером и Сеппом Хохрайтером.
Зепп Хохрайтер, 2025
Кодировщику будем подавать на вход слова исходного предложения, по одному. После каждого слова внутреннее состояние кодировщика обновляется: оно теперь содержит «суммарное значение» прочитанного. Когда исходное предложение закончилось, в скрытом состоянии кодировщика лежит, в каком-то смысле, его сжатое представление. Назовём этот вектор контекстом.
Дальше контекст подаётся декодировщику. Декодировщик по очереди генерирует слова целевого предложения, на другом языке. Каждое следующее слово зависит от контекста и от уже сгенерированной части перевода. Когда декодировщик решает, что предложение закончено, он выдаёт специальный символ конца.
Обе сети обучаются совместно на огромном двуязычном массиве данных: парах фраз вроде «I am tired» и «Я устал», «The dog barks» и «Собака лает», и так далее. В каждой обучающей паре сеть пробует предсказать русский перевод по английскому исходнику, считается ошибка, и веса обеих сетей корректируются по уже знакомому нам алгоритму обратного распространения.