оригинал:Статья, чтобы понять, как CNN используется для НЛП
автор:Denny Britz
Перевод: Кайзер
Когда мы слышим «Сверточные нейронные сети» (конечно, CNN, а не CNN, которое Трамп сказал «Фейковые новости»), обычно на ум приходит компьютерное зрение. Крупные прорывы в классификации изображений, которые сегодня лежат в основе большинства систем компьютерного зрения, произошли благодаря CNN, от автоматической пометки фотографий {:facebook:} до беспилотных автомобилей.
Что касается вопросов, связанных с обработкой изображений свертки, ранее было несколько статей, заинтересованные читатели могут проверить:
- «Машинное обучение — это весело! 03" - Глубокое обучение и сверточные нейронные сети
- Свертка: как стать отличной нейронной сетью
- Как сверточные фильтры извлекают особенности изображения
Недавно мы также начали применять CNN к задачам обработки естественного языка и получили некоторые интересные результаты. В этой статье я кратко расскажу, что такое CNN и как ее можно использовать для НЛП. Принципы, лежащие в основе CNN, вероятно, лучше понятны с точки зрения компьютерного зрения, поэтому я начну с CV, а затем перейду к NLP.
Что такое свертка?
Самый простой способ понять свертку — представить ее в виде функции скользящего окна, которая перемещается по матрице. Это все еще звучит немного запутанно, но станет яснее, когда вы сможете:
Представьте, что матрица слева представляет собой черно-белую картинку. Каждый элемент соответствует пикселю, 0 — черный, 1 — белый (обычно число от 0 до 255, указывающее на изображение в градациях серого). Раздвижное окно естьЯдро свертки (kernel), фильтр или «детектор признаков».
На приведенном выше рисунке используется ядро свертки 3x3, которое умножается на соответствующие элементы исходной матрицы (обратите внимание, что это не матричное умножение), а затем суммируется, позволяя фильтру пройти через всю матрицу для получения окончательной полной свертки. Вы можете задаться вопросом, насколько это полезно, но вот несколько интуитивно понятных примеров.
Размытие изображения: найдите среднее значение каждого пикселя и его соседей
Обнаружение края: найдите разницу между пикселем и соседними пикселями
Если изображение плоское без каких-либо хроматических аберраций, то результат вычисления каждого пикселя за вычетом окружающих пикселей будет равен 0 или будет черным. Если есть острый край (большая разница между двумя сторонами), он останется белым после свертки.
GIMP manualЕсть еще несколько примеров, если вы хотите узнать больше о свертке, рекомендуется прочитатьСообщение Криса Олаха по теме.
Что такое сверточная нейронная сеть?
Теперь, когда вы знаете, что такое свертка, как насчет CNN? CNN на самом деле представляет собой множество слоев свертки плюс нелинейные функции активации, такие какReLUилиtanh.
В традиционной нейронной сети с прямой связью мы соединяем каждый нейрон с каждым нейроном следующего слоя. Это полносвязный слой или аффинный слой. В CNN мы этого не делаем, а сворачиваем входной слой, чтобы получить результат Это не «полное соединение», а «локальное соединение» — область входа связана с одним нейроном. Каждый слой применяет другое ядро свертки, подобное тому, что показано выше, в сотнях или даже тысячах, и объединяет результаты. Это слой пулинга (понижающей выборки), но об этом позже.
В процессе обучения, согласно параметрам задания, СНС автоматически запоминает значения фильтров. Например, при классификации изображений CNN может изучить обнаружение краев на исходном изображении первого слоя, затем изучить простые формы по краям во втором слое и, наконец, использовать форму для обнаружения расширенных функций, таких как лица.Последний уровень предназначен для используйте классификатор для расширенных функций.
В этом процессе расчета следует отметить еще два момента: инвариантность местоположения и композиционность. Например, вы хотите определить, есть ли на картинке слон, но вам все равно, где он находится.
Второй ключевой момент — (локальная) композиционность. Каждое ядро свертки извлекает набор низкоуровневых функций для более поздних высокоуровневых представлений, поэтому CNN особенно полезны в компьютерном зрении. Точно так же, как бег в линию, линия движется в плоскости.
Тогда что? Как это использовать в НЛП?
Вернемся к нашей теме — обработка естественного языка, ввод большинства задач — это уже не пиксели изображения, а предложения или документы, представленные матрицами. Каждая строка матрицы соответствует токену, обычно слову или символу. То есть каждая строка представляет вектор слов, обычно что-то вродеword2vecилиGloVeВстраивание слов (встраивание слов, низкоразмерное представление), но это может быть только один горячий вектор (один горячий вектор), предложение из 10 слов со 100-мерным встраиванием, тогда входная матрица 10x100, что является нашим "изображение".
В задачах со зрением ядро свертки скользит по «блоку» изображения, но в области естественного языка мы обычно используем ядро свертки, чтобы скользить по «строке» (слову) матрицы. Тогда «ширина» ядра свертки равна ширине входной матрицы, а «высота» может меняться, но обычно каждый раз сканируется 2-5 слов.
Подводя итог, сверточная нейронная сеть для НЛП выглядит так:
Вышеупомянутые «инвариантность положения» и «локальная композиционность» интуитивно понятны для изображений, но немного более загадочны в НЛП. Что вас может волновать, так это место появления слова в предложении. Соседние пиксели изображения также семантически связаны (все принадлежат одному и тому же объекту), но не для слов. Во многих языках фраза может быть разделена несколькими другими словами.
Композиционность также не очень очевидна.Хотя все мы знаем, что значение выражается через лексические комбинации, такие как прилагательные, модифицирующие существительные, то, как представления низкого уровня формируют представления высокого уровня, не является простым пространственным геометрическим отношением, таким как изображение.
Кажется, что CNN может не очень подходить для НЛП?Рекуррентные нейронные сети, Рекуррентные нейронные сетикажется более подходящим. RNN очень похожи на то, как мы, люди, обрабатываем язык (или, по крайней мере, мы так думаем): читаем последовательно слева направо.
К счастью, это не означает, что CNN нельзя использовать, как говорится,All models are wrong, but some are useful.. На самом деле CNN очень хорошо справляется с задачами НЛП, простойBag of Words modelЭто кажется чрезмерно упрощенным, а теоретическая предпосылка ненадежной, но это стандартная модель в течение многих лет, и она дает хорошие результаты.
Одним из больших преимуществ CNN является то, что он быстрый, очень быстрый.Свертка является основной частью компьютерной графики и уже может быть реализована на аппаратном уровне графического процессора. иn-gramsПо сравнению с другими методами CNN также более эффективен в представлении. Вычисление чего-либо большего, чем 3 грамма, может быть очень дорогим, поскольку словарный запас становится больше. Даже {:google:} не дает больше 5 граммов. Сверточные фильтры изучают представления автоматически, и им не нужно представлять весь словарь, а ядра свертки больше 5 являются обычным явлением. Я думаю, что многие ядра свертки в первом слое охватывают те же функции, что и n-граммы, но в более сжатой форме.
Гиперпараметры сверточной нейронной сети
Прежде чем объяснять, как CNN используются для задач NLP, давайте взглянем на выбор, который вам нужно сделать при построении CNN, Надеюсь, это поможет вам лучше понять.
Свертка: широкая или узкая
Ранее при объяснении сверток я упустил небольшую деталь применения ядер. Ядро 3x3 хорошо в центре изображения, но что, если оно будет по краям? Что делать, если для первого элемента матрицы нет соседних элементов слева и сверху? Мы можем использовать заполнение нулями. Все (не совсем) элементы, выходящие за пределы матрицы, дополняются нулями. Это позволяет применять ядро свертки ко всем элементам входной матрицы, что приводит к большему или одинаковому размеру выходных данных. Заполнение нулями также называется широкой сверткой.Если заполнение нулями не используется, это узкая свертка. Пример 1D выглядит следующим образом:
Если у вас очень большое ядро свертки (относительно размера входных данных), то широкие свертки по-прежнему очень эффективны и даже необходимы. На приведенном выше рисунке выходной размер узкой свертки равен, в то время как выход широкой свертки
. Общая формула для расчета выходного размера:
.
размер шага
Еще одним гиперпараметром ядра свертки является шаг, который представляет собой расстояние, на которое ядро свертки перемещается на каждом шаге. В предыдущем примере все шаги равны 1, а связанные друг с другом ядра свертки перекрывают друг друга. Чем больше шаг, тем меньше сверточных вычислений и меньше выходной размер. отStanford cs231 websiteНа следующих графиках показано влияние шага 1 и 2 при вводе 1D.
1 — самый распространенный шаг, а более крупные шаги можно использовать для создания чего-то вродеRecursive Neural Networkмодель, как дерево.
объединяющий слой
Почему бассейн? Есть много причин. Во-первых, при объединении в пул размер вывода остается фиксированным, что необходимо для классификации. Например, если у вас есть 1000 ядер свертки, которые используются для максимального объединения, независимо от того, насколько велик входной слой или фильтр, вы получите 1000-мерный результат.
Слой пула также является основной концепцией сверточных нейронных сетей и применяется после сверточного слоя. Слой пула «понижает дискретизацию» своих входных данных, наиболее распространенным методом являетсяОперация, то есть сохраняется только максимальное значение, конечно, не обязательно выполняется над всей матрицей, либо ее можно разбить на окна. Например, в следующем примере показано максимальное объединение с окном 2x2 (но в NLP мы обычно объединяем всю матрицу, сохраняя только одно число для каждого ядра свертки):
Объединение также уменьшает объем выходных данных, но (надеюсь) сохраняет наиболее важную информацию. Вы можете подумать, что задача каждого ядра свертки состоит в том, чтобы найти функцию, например определить, содержит ли предложение «не удивительно».Если эта фраза появляется в предложении, значение результата свертки в этой части будет больше, и другие части будут больше, меньше. После выполнения операции max определяется только существование этой функции, а конкретная информация о местоположении теряется. Так важна ли эта информация о местоположении? На самом деле это не имеет большого значения, как и модель n-грамм. Вы теряете глобальную информацию о позиции (где в предложении это произошло), но сохраняете локальную информацию, которую получил фильтр, то есть «не удивительно» происходит или нет, что полностью отличается от «удивительно не».
При распознавании изображений объединение также обеспечивает инвариантность к перемещению и вращению. Когда вы объединяете область, не имеет значения, перемещаете вы или поворачиваете несколько пикселей, потому что max все равно выберет исходное значение.
ряд
Последнее понятие, которое нам нужно понять, — это канал. Каналы — это разные «представления» входных данных. Например, при распознавании изображений каналы часто представляют собой каналы RGB (красный, зеленый, синий), и операции свертки могут выполняться для каждого канала для получения разных весов.
В НЛП мы также можем представить, что у нас есть несколько каналов: разные вложения слов (word2vec и GloVe) имеют разные каналы, или одно и то же предложение выражается на разных языках, образуя несколько каналов, или несколько выражений смысла.
Сверточные нейронные сети для обработки естественного языка
Давайте взглянем на применение CNN в НЛП, сначала я подытожу некоторые результаты исследований. Конечно, есть много интересных приложений, которые невозможно здесь описать, но я надеюсь рассказать хотя бы о некоторых из наиболее популярных.
Наиболее естественным подходом для CNN должны быть задачи классификации, такие как анализ настроений (Sentiment Analysis), обнаружение спама (Spam Detection) и классификация тем (Topic Categorization). Свертка и объединение теряют информацию о локальном порядке слов, поэтому немного сложнее использовать CNN для маркировки последовательностей, таких как тегирование PoS или извлечение сущностей (но не невозможно, вы также можете добавить позиционные функции к входным данным).
[1] оценили архитектуры CNN на нескольких наборах данных классификации, в основном, на анализе настроений и задачах классификации тем. CNN добились хороших результатов, даже достигнув уровня техники для отдельных наборов данных. В частности, архитектура CNN, используемая в этой статье, очень проста, но мощна. Входной слой представляет собой предложение, состоящее из вложений слов word2vec, за которыми следуют несколько ядер свертки, за которыми следует максимальное объединение и, наконец, классификация softmax. В документе также проводились эксперименты с двумя разными каналами: статическим и динамическим встраиванием слов, причем один канал постоянно корректировался при обучении, а другой не менялся. В [2] упоминается похожая, но немного более сложная архитектура, а в [6] к сети добавляется слой «семантической кластеризации».
[4] обучили свёрточную нейронную сеть с нуля, без предварительного обучения векторов слов, таких как word2vec или GloVe, а напрямую свёртывая вектор горячих кодов. Авторы также предлагают компактное представление входных данных, подобное модели мешка слов, уменьшая количество параметров, которые сеть должна изучить. Авторы [5] расширили эту модель, включив неконтролируемые «региональные вложения» для прогнозирования контекста с CNN. Все методы, описанные в этих статьях, хорошо работают с длинными статьями (например, {:video-camera:}обзоры фильмов), но плохо работают с короткими статьями (например, {:twitter:}твиты). Интуитивно понятно, что введение предварительно обученных вложений слов поможет модели работать лучше с набором коротких текстовых данных.
Построение архитектуры CNN означает, что существует множество гиперпараметров на выбор, некоторые из которых упоминались ранее:
- Входное представление (word2vec, GloVe, one-hot)
- Количество и размер ядер свертки
- Стратегия объединения (макс., среднее)
- Функция активации (ReLU, tanh)
[7] провел эмпирическую оценку различных гиперпараметров CNN, чтобы исследовать их производительность и различия между запусками.Если вы хотите развернуть свои собственные CNN для классификации текста, этот документ можно использовать в качестве отправной точки. Некоторые результаты замечательны, например, максимальный пул всегда лучше, чем средний пул, важен идеальный размер ядра свертки, но каждая задача отличается, регуляризация не играет большой роли в НЛП. Эти данные относительно схожи по длине документа, поэтому опыт здесь может не применяться к данным с большими различиями в объеме текста.
[8] использовали CNN для задач извлечения отношений (Relation Extraction) и классификации отношений (Relation Classification). В дополнение к векторам слов авторы также используют относительные положения слов в качестве входных данных для сверточного слоя. Эта модель предполагает, что после определения положения слова каждый пример будет содержать связь. Подобные модели исследовались также в [9] и [10].
Другой интересный пример использования CNN для НЛП можно найти в [11] и [12] от Microsoft Research. В этих документах описывается, что семантические представления предложений могут использоваться для поиска информации. Пример, приведенный в статье, заключается в том, чтобы рекомендовать документы, которые могут заинтересовать пользователей, на основе материала, который они читают. Представления предложений обучаются на данных журнала поисковой системы.
Большинство архитектур CNN изучают вложения (малоразмерные представления) во время обучения, но не все статьи посвящены обучению или изучению того, насколько значимы изученные вложения. [13] использовали CNN для прогнозирования меток постов в Facebook, создавая значимые вложения для слов. Эти изученные вложения также можно использовать в других задачах — рекомендации по интересам на основе данных о посещаемости.
Сверточные нейронные сети на уровне персонажа
Большинство представленных до сих пор моделей были основаны на словарном запасе. Но есть также исследования, в которых CNN используется непосредственно на уровне персонажей. [14] изучили промисы на уровне символов, добавили их к встраиваниям слов, а затем применили CNN к речевым меткам. [15][16] позволяют CNN учиться непосредственно на персонажах, даже без предварительной подготовки вложений. Обратите внимание, что авторы использовали относительно глубокую сеть (9 слоев), которая затем использовалась для анализа настроений и классификации текста. Результаты показывают, что он хорош для больших наборов данных (миллионы выборок), но не так хорош, как простые модели для небольших наборов данных (сотни тысяч выборок). [17] использовали выходные данные CNN на уровне символов в качестве входных данных для каждого временного шага LSTM, который также использовался на нескольких языках.
Хорошей новостью является то, что все статьи, о которых мы упоминали выше, были опубликованы в последние 1-2 года (теперь на год вперед), хотя ранее были получены отличные результаты, такие какNatural Language Processing (almost) from Scratch, но публикация новых результатов и применение систем продолжают ускоряться.
Рекомендуемое чтение
Семинар TensorFlow «Фестиваль технологического опыта для девочек»
Этот комментарий ядовит! ——Общая процедура для классификации текста
Я сделал робота по имени Серсея, но она просто хотела, чтобы сир Грегор убивал меня на каждом шагу.
использованная литература
- [1] Ким Ю. (2014).Сверточные нейронные сети для классификации предложений.Труды конференции 2014 г. по эмпирическим методам обработки естественного языка (EMNLP 2014), 1746–1751.
- [2] Kalchbrenner, N., Grefenstette, E., & Blunsom, P. (2014) Сверточная нейронная сеть для моделирования предложений, Acl, 655–665.
- [3] Сантос, К. Н. Дос, и Гатти, М. (2014).Глубокие сверточные нейронные сети для анализа тональности коротких текстов.В COLING-2014 (стр. 69–78).
- [4] Johnson, R., & Zhang, T. (2015). Effective Use of Word Order for Text Categorization with Convolutional Neural Networks. To Appear: NAACL-2015, (2011).
- [5] Johnson, R., & Zhang, T. (2015). Semi-supervised Convolutional Neural Networks for Text Categorization via Region Embedding.
- [6] Ван, П., Сюй, Дж., Сюй, Б., Лю, К., Чжан, Х., Ван, Ф., и Хао, Х. (2015) Семантическая кластеризация и сверточная нейронная сеть для категоризации коротких текстов. Труды ACL 2015, 352–357.
- [7] Чжан Ю. и Уоллес Б. (2015 г.) Анализ чувствительности (и практическое руководство) сверточных нейронных сетей для классификации предложений.
- [8] Нгуен, Т. Х., и Гришман, Р. (2015) Извлечение отношений: перспектива сверточных нейронных сетей, Семинар по векторному моделированию для НЛП, 39–48.
- [9] Sun, Y., Lin, L., Tang, D., Yang, N., Ji, Z., & Wang, X. (2015) Моделирование упоминаний, контекста и сущности с помощью нейронных сетей для устранения неоднозначности сущности (Ijcai) , 1333–1339.
- [10] Цзэн Д., Лю К., Лай С., Чжоу Г. и Чжао Дж. (2014 г.) Классификация отношений с помощью сверточной глубокой нейронной сети, Колинг, (2011 г.), 2335–2344.
- [11] Gao, J., Pantel, P., Gamon, M., He, X., & Deng, L. (2014). Modeling Interestingness with Deep Neural Networks.
- [12] Шен Ю., Хе Х., Гао Дж., Дэн Л. и Менил Г. (2014 г.) Латентная семантическая модель со структурой сверточного объединения для поиска информации. Материалы 23-й Международной конференции ACM по Конференция по управлению информацией и знаниями – CIKM '14, 101–110.
- [13] Уэстон, Дж., и Адамс, К. (2014) # TAG S PACE: семантические вложения из хэштегов, 1822–1827.
- [14] Сантос, К., и Задрозны, Б. (2014).Изучение представлений на уровне символов для маркировки частей речи, Материалы 31-й Международной конференции по машинному обучению, ICML-14 (2011), 1818–1826.
- [15] Чжан, X., Чжао, Дж., и Лекун, Ю. (2015) Сверточные сети на уровне символов для классификации текстов, 1–9.
- [16] Zhang, X., & LeCun, Y. (2015). Text Understanding from Scratch. arXiv E-Prints, 3, 011102.
- [17] Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2015). Character-Aware Neural Language Models.