Как получить все контекстные векторы для слов лексикона? Существует ли алгоритм, который может поместить все слова лексикона сети на должное место в семантическом пространстве, чтобы наилучшим образом отразить множество оттенков смысла каждого слова? Решению этой задачи посвящена значительная часть исследований в сфере ОЕЯ.
Word2vec
Существует множество решений задачи о размещении слов в геометрическом пространстве, причем некоторые из них были предложены еще в 1980-х годах, но сегодня в основном используется метод, разработанный специалистами Google в 2013 году[240]. Он называется word2vec (word to vector, “слово в вектор”). Этот метод автоматически выясняет контекстные векторы всех слов лексикона с помощью традиционной нейронной сети. Специалисты Google обучали свою сеть на фрагменте огромного массива документов, имевшихся у компании, а по завершении обучения сохранили и разместили все итоговые контекстные векторы на веб-странице, чтобы любой мог скачать их и использовать в качестве входных сигналов для систем обработки естественного языка[241].
Метод word2vec воплощает принцип “слово познается в компании слов”. Чтобы создать обучающий набор данных для программы word2vec, специалисты Google скачали огромное количество документов с сервиса “Google Новости”. (В современной ОЕЯ ничто не сравнится с доступом к “большим данным”!) В обучающий набор данных для word2vec попали пары слов, в которых каждое из слов встречалось вместе с другим словом пары в документах “Google Новостей”. Чтобы система работала лучше, особенно часто встречающиеся слова, такие как the, of и and, не учитывались.
Допустим, слова в каждой паре стоят бок о бок в предложении. В таком случае предложение A man went into a restaurant and ordered a hamburger (Мужчина зашел в ресторан и заказал гамбургер) сначала будет преобразовано в последовательность man went into restaurant ordered hamburger. Отсюда будут выделены следующие пары: (man, went), (went, into), (into, restaurant), (restaurant, ordered), (ordered, hamburger), а также обратные версии тех же пар – например, (hamburger, ordered). Суть в том, чтобы обучить сеть word2vec прогнозировать, какие слова с большой вероятностью будут образовывать пары с заданным входным словом.
На рис. 35 показана схема нейронной сети word2vec[242]. В этой сети используется кодирование активными единицами, которое я описывала выше. В представленной на схеме сети 700 тысяч входных ячеек, что близко к объему лексикона, использованного исследователями из Google. Каждый входной сигнал соответствует одному слову лексикона. Так, первый входной сигнал на схеме соответствует слову cat (“кошка”), 8378-й входной сигнал – слову hamburger, а семисоттысячный входной сигнал – слову cerulean (“лазурный”). Номера я назвала наобум – порядок слов в лексиконе не имеет значения. В сети также есть 700 тысяч выходных ячеек, каждая из которых соответствует одному слову лексикона, и относительно небольшой скрытый слой из 300 ячеек. Крупными серыми стрелками показано, что каждый входной сигнал имеет взвешенную связь с каждой скрытой ячейкой, а каждая скрытая ячейка – с каждой выходной ячейкой.
Рис. 35. Схема работы нейронной сети word2vec с парой слов (hamburger, ordered)
Специалисты Google тренировали свою сеть на миллиардах словесных пар из статей сервиса “Google Новости”. При получении словесной пары, например (hamburger, ordered), входной сигнал, соответствующий первому слову в паре (hamburger), устанавливается на 1, а все остальные входные сигналы – на 0. В ходе тренировки уровень активации каждой выходной ячейки трактуется как степень уверенности сети в том, что соответствующее слово лексикона встречалось рядом с входным словом. Здесь правильные выходные активации присвоят высокую степень уверенности второму слову в паре (ordered).
Рис. 36. Схема извлечения контекстного вектора из обученной сети word2vec