Шрифт:
Интервал:
Закладка:
Суть в том, что, поместив все слова лексикона на должное место в семантическом пространстве, мы сможем описывать “значение” каждого слова его положением в этом пространстве, то есть координатами, определяющими его контекстный вектор. Зачем нужны контекстные векторы? Оказывается, при использовании контекстных векторов в качестве численных входных сигналов, представляющих слова, нейронные сети справляются с задачами ОЕЯ гораздо лучше, чем при использовании описанных выше кодов активной единицы.
Как получить все контекстные векторы для слов лексикона? Существует ли алгоритм, который может поместить все слова лексикона сети на должное место в семантическом пространстве, чтобы наилучшим образом отразить множество оттенков смысла каждого слова? Решению этой задачи посвящена значительная часть исследований в сфере ОЕЯ.
Существует множество решений задачи о размещении слов в геометрическом пространстве, причем некоторые из них были предложены еще в 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
По завершении тренировки можно извлечь выявленные контекстные векторы для каждого слова лексикона. На рис. 36 показаны взвешенные связи между одним входным сигналом (соответствующим слову hamburger) и 300 скрытыми единицами. Веса, установленные в ходе тренировки, содержат информацию о контекстах, в которых встречается соответствующее слово. Все 300 весов становятся компонентами контекстного вектора, присваиваемого заданному слову. (При этом связи скрытых ячеек с выходными не принимаются в расчет, поскольку вся необходимая информация содержится во взвешенных связях входного сигнала со скрытым слоем.) Таким образом, каждый контекстный вектор, выявляемый этой сетью, имеет 300 измерений. Набор контекстных векторов всех слов лексикона образует “семантическое пространство”.
Как представить себе трехсотмерное семантическое пространство? Возьмите трехмерный график с рис. 34 и постарайтесь представить подобный график, имеющий в сто раз большую размерность и содержащий семьсот тысяч слов, каждое из которых описывается тремя сотнями координат. Шутка! Представить это невозможно.
Чему соответствуют эти триста измерений? Если бы мы были трехсотмерными существами, способными представить такое пространство, мы бы увидели, что каждое слово в нем находится близко к другим родственным словам с разными значениями. Так, вектор слова hamburger близок к вектору слова ordered, а также к векторам слов burger (“бургер”), hot dog (“хот-дог”), cow (“корова”), eat (“есть”) и так далее. Кроме того, слово hamburger близко к слову dinner (“ужин”), даже если они никогда не встречались в паре: достаточно и того, что слово hamburger близко к словам, которые близки к слову dinner в подобных контекстах. Если сеть видит словесные пары из фраз I ate a hamburger for lunch (“Я съел гамбургер на обед”) и I devoured a hot dog for dinner (“Я слопал хот-дог на ужин”) и если слова lunch и dinner появляются рядом в некоторых обучающих предложениях, то система может узнать, что слова hamburger и dinner также должны быть близки.