1 Введение в обработку естественного языка
Мы начинаем эту главу с обсуждения «Что такое НЛП».
1.1 Что особенного в НЛП
Почему естественные (искусственные) языки такие особенные? Естественный язык — это система, предназначенная для выражения семантики, и она не создается никакими формами материального представления. Из-за этого искусственный язык сильно отличается от зрения или любой другой задачи машинного обучения.
Большинство слов — это просто символы для гиперлингвистической сущности: слово — это токен, который сопоставляется с представлением (идеей или вещью). Например, слово «ракета» относится к понятию ракеты и в дальнейшем может указывать на экземпляр ракеты. Есть некоторые исключения для слов, такие как «Whooompaa», когда мы используем слова и буквы для представления сигналов. Кроме того, лингвистические символы могут быть закодированы различными способами: речью, жестами, текстом и т. д. Они могут посылать непрерывный сигнал в мозг, а сам мозг, кажется, непрерывно кодирует информацию. (Была проделана большая работа по философии языка и лингвистике, чтобы концептуализировать человеческий язык и идентифицировать слова по лингвистическим ссылкам и семантике).
1.2 Примеры применения
В НЛП есть разные уровни задач, от обработки речи до семантической интерпретации и обработки речи. В общем, цель НЛП — иметь возможность разрабатывать алгоритмы, чтобы компьютеры могли понимать естественный язык. Ниже приведены примеры приложений разного уровня сложности:
Простой
- Проверка орфографии
- Поиск по ключевым словам
- Найдите синонимы
средний
- Анализировать информацию отдела с веб-сайтов, документов
трудность
- Машинный перевод (например, с китайского на английский)
- Семантический анализ (в чем смысл оператора запроса)
- Местоимения (на что именно ссылается «это» или «он» в документе)
- Система ответов на вопросы (например, ответы на опасные вопросы)
1.3 Как выразить словами
Первая и самая важная общая нить для всех задач обработки естественного языка — это то, как слова представляются и используются в качестве входных данных для любой имеющейся у нас модели. Во многих предыдущих работах по НЛП слова использовались как атомарные символы, но мы не будем повторять эту работу в будущем, нам сначала нужно рассмотреть и иметь понятие сходства и различия между словами. Подобно векторам слов, мы можем легко добавлять эти функции между векторами (используя некоторую меру расстояния, такую как Жаккара, косинус, алгоритм Евклида и т. д.).
2 вектора слов
Подсчитано, что существует около 13 миллионов английских символов, между ними вообще нет связи? От кошачьих к кошкам, от отелей к мотелям? Я не думаю, что они вообще связаны. Итак, мы хотим преобразовать каждый символ слова в вектор, чтобы представить точку в каком-то словесном пространстве. Есть много причин для использования здесь векторов слов, но наиболее интуитивная из них заключается в том, что, возможно, действительно существует какое-то N-мерное векторное пространство, достаточное для того, чтобы вместить всю семантику искусственного языка. Каждое измерение кодирует смысл, передаваемый нашим языком. Например, семантическое измерение может представлять время (прошлое, настоящее и будущее), счет (единственное или множественное число), пол (мужской или женский).
Итак, давайте посмотрим на первый вектор слов и, возможно, самый простой,горячий вектор. Представьте каждое слово как IR|V|x1Вектор, этот вектор слов состоит из множества нулей и одной единицы (позиция 1 — это позиция индекса слова в отсортированном английском языке). В приведенных выше обозначениях |V| — размер словаря. Векторы слов, закодированные в этой форме, выглядят так:
Мы можем представить каждое слово как независимую сущность. Как мы обсуждали ранее, представления слов не дают интуитивного сходства между словами. Например:
Так что, возможно, мы можем попытаться преобразовать размер этого пространства из R|V|Сократите до чего-то меньшего, тем самым найдя подпространство, кодирующее отношения между словами.
3 метода, основанные на разложении по единственному значению (SVD)
Для этого класса методов для поиска вложений слов (также называемых векторами слов) сначала выполняется цикл по большому набору данных и накапливается количество совпадений слов из некоторой формы матрицы X, а затем выполняется разложение по сингулярным числам на матрице X, чтобы получить USVTЗатем мы берем U как вложение слов (или вектор слов) для всех слов в нашем словаре. Некоторые формы X обсуждаются ниже.
3.1 Матрица Word-Document
В качестве первой попытки мы рискнули предположить, что родственные слова часто встречаются в одном и том же документе. Например, «банк», «облигации», «акции», «деньги» и т. д. могут появляться вместе. Но «банк», «осьминог», «банан» и «хоккей» могут не встречаться вместе в одной статье. Мы полагаемся на этот факт, чтобы создать матрицу слова-документа X, которая формируется путем обхода миллиардов документов, и для каждого слова i, которое встречается в документе j, мы преобразуем XУвеличить на 1. Очевидно, X будет огромной матрицей (IR|V|xM) также связано с количеством документов (M). Так что у нас есть возможности для улучшения.
3.2 Матрица совместного возникновения на основе окна
Используя ту же логику, матрица X хранит количество совпадений слов, которые станут вспомогательной матрицей. В этом методе мы подсчитываем количество вхождений каждого слова в окне определенного размера и, таким образом, технику подсчета всех слов в корпусе. Ниже будет показан пример, где наш корпус содержит три предложения с размером окна 1:
- I enjoy flying.
- I like NLP.
-
Мне нравится глубокое обучение.Результирующая матрица счета будет:
Результаты объясняются ниже: Сначала запомните размер окна 1. Почему значение (I,I) в матрице равно 0? Для слова I мы сканируем первое предложение, потому что слово I появляется в слове Мне нравится летать, перед I пусто, за ним следует слово Наслаждайтесь, поэтому значение (I, I) равно 0; затем сканируем второе предложение также Нет I до и после, что означает, что (I, I) равно 0; после просмотра третьего предложения значение (I, I) по-прежнему равно 0. Почему значение (мне нравится) равно 2? После сканирования первого предложения в единице до и после И нет лайков. Во втором и третьем предложениях подобное стоит после I, поэтому окончательное значение (I, like) равно 2, и то же самое верно для других.
3.3 Использование разложения по сингулярным числам для матриц совпадений
Мы выполняем SVD на X, наблюдаем сингулярные значения (диагональные элементы данных результирующей матрицы S) и вырезаем по индексу k в соответствии с желаемой процентной дисперсией:
Затем мы превращаем эту подматрицу в нашу матрицу встраивания слов. Таким образом, можно дать k-мерное представление каждого слова в словаре.
Применить SVD к X:
Уменьшите размерность, выбрав первый k-vecchio:
Эти два метода могут предоставить нам векторы слов, которые кодируют достаточную семантическую и синтаксическую информацию, но также сопряжены со многими другими проблемами:
- Размерность матрицы меняется очень часто (добавляются новые слова и очень часто меняется размер корпуса)
- Большинство слов не встречаются одновременно, и матрица будет очень разреженной.
- Обычно размеры матрицы очень велики (около 106x106)
- Стоимость обучения относительно высока
- Для того чтобы образовался серьезный дисбаланс частоты слов, матрицу X необходимо «перетасовать».
Уже есть несколько способов решения упомянутых выше проблем: - Игнорируйте некоторые служебные слова, такие как «the», «he», «has» и т. д.
- Используйте нестандартное окно — подсчитайте количество совпадений на основе расстояния между словами в документе.
- Используйте коэффициент корреляции Пирсона и задайте необработанные значения отрицательными числами.
Как мы упоминали в следующем разделе, итерационные методы решают многие проблемы более элегантным способом.
4 Итеративный алгоритм - Word2vec
Давайте сделаем шаг назад и попробуем что-то новое вместо того, чтобы вычислять и хранить какой-то огромный набор данных (возможно, миллиарды предложений).
Идея состоит в том, чтобы разработать модель, параметры которой представляют собой вектор слов. Затем обучите модель определенной цели. На каждой итерации мы запускаем модель, оцениваем ошибку и следуем правилу обновления и замены параметров, вызвавших ошибку модели. Таким образом, мы заканчиваем тем, что изучаем векторы слов. Это старая идея, восходящая к 1986 году, и мы называем ее «обратным распространением». Чем проще модель и задача, тем быстрее ее можно обучить и изучить.
Некоторые методы были протестированы. [Collobert et al., 2011] разработали несколько моделей обработки естественного языка, первым шагом которых является преобразование каждого слова в вектор. Для каждой конкретной задачи (распознавание именованных объектов, семантическая маркировка и т. д.), хотя можно вычислить очень хорошие векторы слов, они обучают векторы слов в дополнение к параметрам обучающей модели, что в конечном итоге значительно повышает производительность модели. Другие интересные чтения можно прочитать [Bengio et al., 2003].
Точно так же мы опишем более простой, более продвинутый и более осуществимый метод: word2vec [Миколов и др., 2003].Word2vec представляет собой программный пакет, который включает в себя следующее:
- 2 алгоритма: непрерывный пакет слов (сокращенно CBOW) и скип-грамм (последовательность кроссвордов?). CBOW может предсказать центральное слово на основе контекста в серии векторов слов. Skip-gram — это прямо противоположное, предсказывающее распределение контекстных слов на основе центрального словаря.
- 2 метода обучения: отрицательная выборка и иерархический софтмакс (hierarchical softmax). Отрицательная выборка определяет объект путем выборки противоположных примеров, в то время как иерархический softmax определяет объект, используя древовидную структуру колледжей и университетов для расчета вероятности всех слов.
4.1 Языковые модели (униграммы, биграммы и т. д.)
Во-первых, нам нужно создать модель, которая будет назначать вероятность последовательности слов. В качестве примера возьмем следующий след:
«Кошка перепрыгнула через лужу»
Хорошая языковая модель придаст этому предложению высокую вероятность, потому что оно синтаксически и семантически полностью корректно. Вероятность того, что появится предложение «рыба, сваренная в бульоне, — это игрушка», мала, потому что оно не имеет никакого смысла. Математически мы можем вычислить вероятность предложения, содержащего n слов:
Мы используем подход Unigrams, а затем предполагаем, что слова в предложении появляются независимо друг от друга, тогда вероятность может быть записана как:
Мы знаем, что это выглядит нелепо, потому что появление следующего слова сильно зависит от предыдущей последовательности слов. И вероятность того, что такие простые примеры предложений действительно появятся, будет очень высока. Итак, мы пытаемся сделать так, чтобы вероятность предложения зависела от вероятности каждого слова и соседней с ним пары слов. Мы называем этот подход биграммами и обозначаем его как:
Опять же, этот подход кажется наивным, поскольку мы рассматриваем только пары соседних слов, а не оцениваем предложение в целом. Но мы видим, что этот подход продвигает нас на шаг вперед, в матрице слово-слово в семантическом контексте мы можем в основном узнать вероятности этих пар слов, но опять же, это требует вычисления и хранения глобальной информации для большого количества данных. .
Чтобы лучше понять, как рассчитываются вероятности последовательности слов, ниже мы изучим некоторые модели последовательности для этих вероятностей.
4.2 Модель непрерывного мешка слов (сокращенно CBOW)
Метод состоит в том, чтобы использовать {"The", "cat", "over", "the", "puddle"} в качестве контекста (или семантического фона), а затем предсказать и сгенерировать центральное слово "прыгнул" на основе этих слов. Модель мы называем моделью CBOW.
Пополнить:
CBOW Model:
Предсказать заглавное слово из контекста
Для каждого слова нам нужно выучить 2 вектора:
-v: вектор слов при использовании в качестве окружающих слов, также известный как входной вектор
-u: вектор слов при использовании в качестве центрального слова также становится выходным вектором.
Символы в модели CBOW:
• wi: i-е слово в словаре
• V ∈ Rnn×|V|: матрица входных слов
• vi: i-й столбец в матрице V, представляющий входной вектор слова wi
• U е R|V|×n: выходная матрица слов
• ui: строка i матрицы U, представляющая выходной вектор слова wi
Ниже мы обсудим модель CBOW более подробно. Во-первых, мы подготавливаем известные параметры и используем горячие векторы для представления параметров. В CBOW мы обозначаем входной однократный вектор или контекст как x(c), результат записывается как y(c), так как выход только один, мы снова назовем его y (горячий вектор центрального слова). Теперь определим неизвестные параметры в модели.
Создадим две матрицы, V ∈ IRn×|V|и ты|V|×n.где n может быть любого размера, который определяет размер пространства вложения. Входная матрица V. Когда слово wi используется в качестве входных данных модели, i-й столбец V является входным вектором wi, обозначаемым как vi. Точно так же выходная матрица U. Когда слово wj используется в качестве выходных данных модели, j-я строка U является выходным вектором слова wi, обозначаемого как uj. Обратите внимание, что мы фактически изучаем два вектора для каждого слова wi (т.е. вектор входного слова vi и вектор выходного слова ui).
Разобьем принцип модели на следующие шаги:
-
Сгенерируйте однократный вектор для контекста размера m:
[Ссылка] (http://www.cnblogs.com/Determined22/p/5804455.html) - Вычислить встроенный вектор слова контекста:
(vc-m =Vx(c-m), vc-m+1 = Vx(c-m+1), . . ., vc+m = Vx(c+m)еRn) -
Усредните векторы входных слов для контекста:
-
Вычислить вектор рейтинга:
Поскольку скалярное произведение двух похожих векторов выше, чтобы получить более высокий балл, формула будет соединять похожие слова.
-
Преобразовать рейтинги в вероятности:
-
Мы хотим, чтобы полученная вероятность y-hat соответствовала истинной вероятности, которая также работает для одного горячего вектора.
Это изображение объясняет, как работает CBOW
Теперь, когда у нас есть V и U, мы поймем, как работает CBOW, как будут изучаться эти две матрицы? Затем нам нужно создать целевую функцию. Много раз, когда мы пытаемся узнать вероятности из некоторых истинных вероятностей, мы рассчитываем использовать теорию информации, чтобы дать нам меру расстояния между нашими двумя распределениями. Здесь я решил использовать популярный метод расстояния/потери для вычисления кросс-энтропии H(y-hat,y). В дискретном случае функцию потерь можно использовать для вычисления перекрестной энтропии:
Поскольку y является однократным вектором, приведенную выше формулу можно сократить как:
В дополнение к этому используйте стохастический градиентный спуск для оптимизации V и U:
4.3 Модель Skip-Gram
Этот метод заключается в создании модели путем задания заглавного слова «прыгнул» для предсказания и генерации окружающих слов (или контекста заглавного слова) «The», «cat», «over», «the», «лужа». Здесь мы обращаемся к контексту «пропустить» и называем этот тип модели моделью Skip-Gram.
Skip-Gram подробно обсуждается ниже. По сравнению с CBOW инициализация в основном такая же, за исключением того, что нам нужно преобразовать x и y, т.е. x в CBOW теперь y и наоборот. Я обозначаю входной один горячий вектор как x и выходной вектор как y(c), V, U и модели CBOW одинаковы.
Вот шаги модели Skip-Gram:
- Преобразование центрального словаря в один горячий вектор x ∈ IR|V|
- Получить центральное слово, встраивающее вектор слова vc=Vx∈IRn
- Вычислить вектор рейтинга z=Uvc
-
Преобразование векторов оценок в вероятности:
-
Обновите V и U с помощью стохастического градиентного спуска, чтобы прогнозы были более тесно связаны с истинными вероятностями. Как и в модели CBOW, нам нужно сгенерировать целевую функцию для оценки производительности модели. Ключевое отличие состоит в том, что нам нужно использовать байесовскую теорию для разделения вероятностей. Все слова полностью независимы от центрального слова.
С помощью этой целевой функции после каждого итеративного обновления мы можем вычислить градиент неизвестных параметров с помощью стохастического градиентного спуска.
4.4 Отрицательная выборка
На самом деле отрицательная выборка и иерархический softmax — это две стратегии оптимизации для Skip-Gram и CBOW.
Оглядываясь назад на целевую функцию, мы видим, что сумма |V| огромна в вычислительном отношении. Нам требуется O(|V|) миллионов времени, чтобы обновить или оценить целевую функцию. Таким образом, простой способ - аппроксимировать целевую функцию.
Для каждого шага обучения вместо обхода всего словаря мы можем отобрать только несколько отрицательных примеров. из распределения шума (P(w)), с вероятностями, соответствующими порядку лексических частот, что дополняет наше описание проблемы. Нам нужно обновить следующее:
- целевая функция
- градиенты
- обновить правила
Миколов представлен в «Распределенных представлениях слов и словосочетаний и их композиционности».отрицательная выборка. Хотя отрицательная выборка основана на модели Skip-Gram, на самом деле ее можно использовать для оптимизации различных целей. Рассмотрим набор слов (word) и контекст (w, c), этот набор данных из наших обучающих данных? Обозначим вероятность того, что (w,c) получено из обучающих данных как P(D=1|w,c), и, соответственно, вероятность того, что (w,c) не получено из обучающих данных, как P(D=0 |ш,с). Во-первых, используйте сигмовидную функцию для моделирования P(D=1|w,c):
Изображение сигмовидной функции:
Теперь мы создаем новую целевую функцию, которая пытается максимизировать вероятность слова и контекста в данных корпуса, если слово и контекст находятся в корпусе, мы максимизируем вероятность слова и контекста в данных корпуса. Если слова и контекста нет в корпусе, мы максимизируем вероятность того, что слова и контекста нет в данных корпуса. Ниже приведен простой метод максимального правдоподобия, который мы используем для этих двух вероятностей. (Здесь мы принимаем q как параметр модели, в нашем случае V и U.)
Обратите внимание, что максимизация вероятности аналогична минимизации отрицательной логарифмической вероятности:
D' является "неправильным" или "отрицательным" корпусом. Вероятность появления неестественных предложений, таких как "бульонная рыба - это игрушка", будет очень низкой. Мы можем быстро и случайным образом сгенерировать отрицательный корпус D' из лексикона.
-
Учитывая центральное слово c и контекст c-m+j, новая целевая функция, полученная для Skip-Gram:
-
Для модели CBOW результирующая новая функция имеет вид:
предыдущая функция:
4.5 Иерархический Softmax (Иерархический Softmax)
Миколов также предлагает более эффективную схему замены обычного softmax на иерархический softmax. На практике иерархический softmax работает лучше для редких слов, в то время как отрицательная выборка лучше работает для частых слов и векторов меньшего размера.
Иерархический softmax использует двоичное дерево для представления всех слов в словаре, каждый конечный узел дерева является словом, а путь от корневого узла к конечному узлу уникален. В приемнике модели нет выходного представления слов, вместо этого каждый узел в графе (кроме корневого и листового узлов) связан с вектором, изученным моделью.
В методе по вектору слов w слова wiТогда вероятность слова w равна P(w|wi.), равный вероятности случайного перехода от корневого узла к соответствующему листовому узлу W. Основное преимущество этого метода расчета вероятностей заключается в том, что временная сложность снижается до O(log(|V|)).
Символы и знаки:
- L(w): относится к количеству узлов на пути от корневого узла до конечного узла w.
Например, на рис. 4 L(w2>) равно 3 - n(w,i) относится к вектору v сn(w,i) связанные узлы, где n(w,1) — корневой узел.
- n(w, L(w)) относится к родительскому узлу w.
- ch(n) дочерний узел узла n (например, всегда левый узел)
Тогда формула расчета вероятности такова:
где σ(▪) — сигмовидная функция.
Формула поясняется ниже:
Мы предполагаем, что ch(n), наконец, является левым дочерним элементом узла n, тогда, когда путь находится слева, [n(w,j+1)=ch(n(w,j))] возвращает 1; когда путь вправо, [n(w,j+1)=ch(n(w,j))] возвращает -1.
Возьмите w в Figure42Например, от корневого узла до w2node мы должны пройти дважды влево и один раз вправо, тогда
В этой модели нашей целью по-прежнему является минимизация отрицательного логарифмического правдоподобия P(w|wi). Однако вместо обновления выходного вектора для каждого слова мы обновляем векторы для узлов в двоичном дереве от корня до конечных узлов. Скорость этого метода зависит от метода построения бинарного дерева и метода присвоения слов листовым узлам, Миколов использует бинарное дерево Хаффмана для назначения кратчайших путей к часто встречающимся словам.
Рекомендация статьи