Шрифт:
Интервал:
Закладка:
В начале 2000-х гг. стандартный подход к моделированию языка был основан на n‑граммах. Например, мы можем подсчитать, сколько раз в обучающем корпусе встречались триграммы «свежи были розы», «свежи были штампы», «свежи были фтагн» и так далее для каждого слова-кандидата. Теперь в качестве прогноза вероятности слова «розы» вслед за словами «свежи были» мы можем использовать отношение числа вхождений в обучающий корпус триграммы «свежи были розы» к суммарному числу вхождений в него триграмм, начинающихся на «свежи были». Однако у этого подхода есть несколько серьёзных недостатков.
Во-первых, какую длину n-граммы выбрать? При уменьшении n предсказательная сила модели быстро падает. Действительно, в нашем корпусе (конечно, если он включал в себя соответствующую цитату из Мятлева, вынесенную Тургеневым в название одного из своих стихотворений в прозе) слова «как хороши, как свежи были» в большинстве случаев продолжались именно «розами». Чего не скажешь об одиночном слове «были». После «были» нередко встречается «на», «в» и так далее, причём куда чаще, чем «розы». С другой стороны, при увеличении n наша выборка n-грамм быстро становится нерепрезентативной. Мы всё чаще попадаем в ситуацию, когда число n-грамм, совпадающих с текущим контекстом (т. е. с предшествующими словами, которые мы стремимся продолжить), крайне мало, а иногда и вовсе равно 0. И что вообще значит, что слова «свежи были» в обучающем корпусе никогда не продолжались словом «фтагн»? Значит ли это, что вероятность такого продолжения равна 0? Возможно, до выхода в свет моей книги такое продолжение в литературе действительно не встречалось, но ведь теперь ситуация изменилась! Значит, вероятность всё-таки не была нулевой. С проблемами подобного рода боролись обычно, создавая комбинированные модели, например, из униграмм, биграмм и триграмм, используя в качестве прогноза модели взвешенную сумму их прогнозов. Вместо нулевой вероятности можно использовать некоторую крайне малую, но ненулевую величину либо применить какой-то иной способ сглаживания модели.
Во-вторых, с увеличением n быстро растут требования к объёму используемой памяти. Действительно, в какой-то момент размер оперативной памяти для хранения статистики n‑грамм становится недостаточным. Конечно, эту статистику можно пересчитывать на лету, но для этого потребуется в момент расчёта вероятностей заново анализировать весь обучающий корпус, что чаще всего неприемлемо из-за ограничений по времени. Поэтому в начале 2000‑х гг. обычно использовались модели, в которых самыми длинными были триграммы.
В-третьих, n-граммные модели ничего не знают о похожести слов и вообще об их семантике. Например, если в обучающем корпусе встречается фраза «Петя щёлкнул Васю по», продолжением которой является слово «лбу», то это никак не поможет модели понять, что последовательность «Вася щёлкнул Петю по» также с большой вероятностью будет продолжена тем же самым словом. Для модели «Вася» и «Петя» — это не имена мальчиков, а просто два разных слова. Несложно заметить, что трудности n-граммных моделей аналогичны трудностям моделей, использующих в качестве текстовых представлений мешки слов и one-hot-векторы.
Эти недостатки n-граммных моделей не нашли удовлетворительного решения.
Требовался новый подход, и в 2003 г. свет увидела важная работа Йошуа Бенджио и его коллег под названием «Нейронная вероятностная языковая модель» (A Neural Probabilistic Language Model)[2109]. Изложенная в ней идея заключалась в том, чтобы вместо one-hot-векторов использовать векторы признаков [feature vectors], обладающие меньшей размерностью и представляющие собой наборы вещественных параметров (своих для каждого слова), значения которых можно было бы получить в процессе обучения модели. Бенджио экспериментировал с векторами размерностью 30, 60 и 100 при размере словаря около 16 000–18 000 слов (в зависимости от корпуса). В зависимости от настроек сеть Бенджио принимала на вход соединение (конкатенацию) векторов, соответствующих трём, четырём или пяти предыдущим словам (т. е. при размерности вектора признаков, равной 100, и длине контекста, равной 4, на вход сети подавалось 4 × 100 = 400 вещественных чисел), и представляла собой полносвязный перцептрон — в большинстве экспериментов с одним промежуточным слоем, в котором могло быть 50 или 100 нейронов.
Реализацию идеи Бенджио можно представить как добавление ко входу сети нескольких идентичных нейронных сетей (по одной для каждого из слов контекста). Каждая из этих сетей состоит из двух слоёв нейронов и преобразовывает one-hot-векторы, соответствующие словам, в векторы признаков. Все нейроны её первого слоя (получающего на вход one-hot-векторы) связаны со всеми нейронами второго слоя (выходы которого и составляют векторы признаков). Такое соединение часто называют проекцией [projection].
Число параметров такой сети равно произведению числа слов в словаре и размерности вектора признаков. Таким образом, при 16 000 слов в словаре и размерности вектора признаков 100 число параметров будет равно 16 000 × 100 = 1 600 000. Поскольку сети, применяемые к каждому из слов, идентичны (т. е. содержат копии одного и того же набора весов), увеличение длины контекста никак не влияет на число параметров модели. Если бы вместо такого набора сетей мы использовали полносвязный слой, то число параметров в нём было бы при длине контекста 4 равно (4 × 16 000) × (4 × 100), то есть в 16 раз больше, чем в модели Бенджио.
Слой, образуемый описанными выше сетями, добавленными ко входу сети Бенджио, в наши дни носит название «слой словарного вложения» [word embedding layer], впрочем, специалисты по машинному обучению называют его обычно «словарным эмбеддингом» или попросту «эмбеддингом» (также термином «эмбеддинг» или «векторы эмбеддинга» часто обозначаются и сами встраиваемые векторы).
Несложно углядеть здесь аналогию со слоем свёртки в свёрточных нейронных сетях — в нём каждая из операций свёртки также осуществляется при помощи одного и того же набора весов.
Бенджио не был первым исследователем, предложившим использовать векторные представления слов естественного языка. Почти за полвека до него этот подход начал применяться для решения задач в области поиска информации и тематического моделирования, например в рамках так называемого латентно-семантического анализа (Latent semantic analysis, LSA) — метода обработки информации на естественном языке, анализирующего взаимосвязь между библиотекой документов и встречающимися в них терминами. Различные идеи по решению задач в области обработки текстов на естественном языке, в том числе для построения языковых моделей, выдвигались в 1980-е и 1990-е гг. многими ведущими коннекционистскими исследователями, в том числе Шмидхубером,