[Концепции глубокого обучения] · Понимание сверточных нейронных сетей для НЛП

искусственный интеллект Python

Понимание сверточных нейронных сетей для НЛП

Когда мы слышим о сверточных нейронных сетях (CNN), мы обычно думаем о компьютерном зрении. CNN несут ответственность за крупные прорывы в классификации изображений и сегодня лежат в основе большинства систем компьютерного зрения, от автоматической пометки фотографий Facebook до беспилотных автомобилей.

Недавно мы также начали применять CNN к задачам обработки естественного языка и получили некоторые интересные результаты. В этом посте я попытаюсь обобщить, что такое CNN и как их можно использовать в НЛП. Интуиция, лежащая в основе CNN, несколько проста для понимания случаев использования компьютерного зрения, поэтому я начну с этого и постепенно перейду к НЛП.

 

Что такое свертка?

пониматьзапутанныйСамый простой способ сделать это — представить это как функцию скользящего окна, примененную к матрице. Это немногословно, но, глядя на визуализацию, становится очень ясно:

Свертка выполняется с использованием фильтра 3×3. Источник: http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution.

Представьте, что матрица слева представляет собой черно-белое изображение. Каждая запись соответствует пикселю, где 0 соответствует черному цвету, а 1 — белому (обычно от 0 до 255 для изображений в градациях серого). Скользящее окно называетсяядро, фильтрилиДетектор признаков.Здесь мы используем фильтр 3x3, умножаем значения его элементов на исходную матрицу и складываем их вместе. Чтобы получить полную свертку, мы делаем это для каждого элемента, перемещая фильтр по всей матрице.

Вам может быть интересно, что вы на самом деле можете сделать. Вот несколько интуитивных примеров.

Усреднение каждого пикселя с использованием его соседей размывает изображение:

 

 

 

Используйте разницу между пикселем и его соседями для обнаружения краев:

(Чтобы понять это интуитивно, рассмотрим, что происходит с гладкой частью изображения, где цвет пикселя равен цвету его соседей: добавьте отмену, и результирующее значение равно 0 или черному. Если интенсивность имеет острые края, например , от белого к черному переходы, вы получаете большую разницу, и выдаете белое значение)

 

 

 

существуетРуководство по GIMPЕсть и другие примеры. Чтобы узнать больше о том, как работает свертка, я также рекомендую посмотретьПост Криса Олаха на эту тему.

Что такое сверточная нейронная сеть?

Теперь вы знаете, что такое свертка. Но как насчет CNN? CNN — это всего лишь несколько слоев свертки, гдеНелинейная функция активации какReLUилиtanhприменяется к результату. В традиционной нейронной сети с прямой связью мы соединяем каждый входной нейрон с каждым выходным нейроном в следующем слое. Это также известно как полносвязный слой или аффинный слой. В CNN мы этого не делаем. Вместо этого мы используем свертку на входном слое для вычисления выходных данных. Это приводит к локальным связям, когда каждая область входа связана с нейроном на выходе. Каждый слой применяет отдельный фильтр, обычно сотни или тысячи, как показано выше, и объединяет его результаты. Также существует нечто, называемое объединением слоев (субдискретизацией), но об этом я расскажу позже. На этапе обучения,CNN будетв зависимости от задачи, которую вы хотите выполнитьавтоматически узнать значение своего фильтра. Например, при классификации изображений CNN может научиться обнаруживать края необработанных пикселей в первом слое, затем использовать края для обнаружения простых форм во втором слое, а затем использовать эти формы для предотвращения признаков более высокого уровня, таких как лица. формы, начиная с более высокого уровня. Последний слой — это классификатор, который использует эти расширенные функции.

卷积神经网络(Clarifai)

Следует отметить два аспекта этого расчета:позиционная инвариантностьикомпозиционность. Предположим, вы хотите классифицировать, есть ли на изображении слоны. Поскольку вы проводите фильтром по всему изображению, вам все равно.Тамслон бывает. на практике, объединениеТакже дает вам инвариантность к перемещению, вращению и масштабированию, но об этом позже. Второй ключевой аспект — (местный) состав. каждый фильтрсочинениеПреобразуйте локальные патчи функций более низкого уровня в представления более высокого уровня. Вот почему CNN так сильны в компьютерном зрении. Интуитивно вы можете создавать края пикселей, формы краев и более сложные объекты в формах.

Итак, как они применимы к НЛП?

Вместо пикселей изображения входными данными для большинства задач НЛП являются предложения или документы, представленные в виде матриц. Каждая строка матрицы соответствует токену, обычно слову, но может быть и символом. То есть каждая строка представляет собой вектор, представляющий слово. Как правило, это векторывложение слов(низкоразмерное представление), напримерword2vecилиGloVe, но они также могут быть однократными векторами, индексирующими слова в словаре. Для предложения из 10 слов с использованием 100-мерного вложения мы будем использовать в качестве входных данных матрицу 10 × 100. Это наш «имидж».

В зрении наши фильтры скользят по локальным участкам изображения, но в НЛП мы обычно используем фильтры (слова), которые скользят по целым строкам матрицы. Поэтому «ширина» нашего фильтра обычно равна ширине входной матрицы. высота илиразмер площадиМожет варьироваться, но обычно скользящие окна содержат более 2–5 слов за раз. Собрав все вышеперечисленное вместе, сверточная нейронная сеть для НЛП может выглядеть так (потратьте несколько минут, чтобы попытаться понять эту картину и то, как вычисляется размерность. Вы можете пока игнорировать объединение, мы объясним позже):

用于句子分类的卷积神经网络(CNN)架构的例证。 这里我们描述了三个滤波器区域大小:2,3和4,每个都有2个滤波器。 每个过滤器对句子矩阵执行卷积并生成(可变长度)特征映射。 然后在每个地图上执行1-max池化,即,记录来自每个特征地图的最大数量。 因此,从所有六个图生成单变量特征向量,并且这六个特征被连接以形成倒数第二层的特征向量。 然后最终的softmax层接收该特征向量作为输入并使用它来对句子进行分类;  这里我们假设二进制分类,因此描述了两种可能的输出状态。 资料来源:hang,Y。和Wallace,B。(2015年)。

Иллюстрация архитектуры сверточной нейронной сети (CNN) для классификации предложений. Здесь мы описываем три размера области фильтра: 2, 3 и 4, в каждой по 2 фильтра. Каждый фильтр выполняет свертку матрицы предложений и создает карту объектов (переменной длины). Затем на каждой карте выполняется объединение 1-max, т. е. записывается максимальное число из каждой карты объектов. Следовательно, одномерные векторы признаков генерируются из всех шести карт, и эти шесть признаков объединяются, чтобы сформировать вектор признаков предпоследнего слоя. Затем последний слой softmax получает этот вектор признаков в качестве входных данных и использует его для классификации предложения; здесь мы предполагаем двоичную классификацию, таким образом описывая два возможных выходных состояния. Источник: Чжан Ю. и Уоллес, Б. (2015).

Каково наше интуитивное представление о компьютерном зрении? Позиционная инвариантность и локальная композиционность имеют интуитивное значение для изображений, но в меньшей степени для НЛП. У вас может быть слово в предложении. Близкие друг к другу пиксели могут быть семантически связаны (частью одного и того же объекта), но это не всегда так для слов. Во многих языках часть фразы может быть разделена несколькими другими словами. Состав тоже не очевиден. Понятно, что слова образуются определенным образом, например, прилагательные, которые изменяют существительные, но как именно это работает, представление более высокого уровня на самом деле «означает», не так очевидно, как в случае с компьютерным зрением.

Учитывая все это, кажется, что CNN не подходят для задач НЛП. Рекуррентная нейронная сетьБолее интуитивный. Они похожи на то, как мы обрабатываем язык (или, по крайней мере, на то, как мы думаем, что делаем это): читаем последовательно слева направо. К счастью, это не означает, что CNN не работают. Все модели ошибочны, но некоторые из них полезны. Оказывается, CNN, примененные к задачам НЛП, работают достаточно хорошо. простоМешок слов модельОчевидно, это чрезмерное упрощение неверных предположений, но это был стандартный подход в течение многих лет с довольно хорошими результатами.

Важным аргументом в пользу CNN является то, что они быстрые. очень быстро. Свертка — это основная часть компьютерной графики, реализованная на аппаратном уровне на графических процессорах. иn-граммПо сравнению с классом вещей, CNN также с точки зрения представленияэффективныйиз. С большим словарным запасом вычисление чего-либо, превышающего 3 грамма, может быстро стать дорогостоящим. Даже Google не предлагает ничего больше 5 грамм. Сверточные фильтры автоматически изучают хорошие представления без необходимости представлять весь словарь. Наличие фильтра больше 5 вполне разумно. Мне нравится думать, что многие изученные фильтры на первом уровне захватывают функции, очень похожие (но не ограничиваясь ими) на n-граммы, но представляют их более компактно.

Гиперпараметры CNN

Прежде чем объяснять, как CNN можно применять к задачам НЛП, давайте рассмотрим некоторые варианты выбора, которые необходимо сделать при построении CNN. Надеюсь, это поможет вам лучше понять литературу в этой области.

узкая и широкая извилина

Когда я объяснял свертку выше, я упустил некоторые детали того, как мы применяем фильтр. Применение фильтра 3х3 в центре матрицы работает нормально, а как быть с краями? Как я могу применить фильтр к первому элементу матрицы, у которой нет соседних элементов сверху и слева? ты можешь использовать этозаполнение нулями. Обнулите все элементы, выходящие за пределы матрицы. Делая это, вы можете применить фильтр к каждому элементу входной матрицы и получить вывод большего или того же размера. Добавление нулевого заполнения также известно какширокая извилина ,Не использовать заполнение нулями было быузкая извилина. Пример в 1D выглядит так:

狭窄与广泛的卷积。 资料来源:用于建模句子的卷积神经网络(2014)

Узкая и широкая свертка. Размер фильтра равен 5, а размер ввода равен 7. Источник: сверточные нейронные сети для моделирования предложений (2014 г.).

Когда у вас есть большой фильтр по отношению к размеру входных данных, вы можете видеть, что обширная свертка полезна и даже необходима. В приведенном выше примере узкие свертки производят выходные данные размером(7-5)+ 1 = 3, а широкая свертка дает результат размером(7 + 2 * 4  -  5)+ 1 = 11. В более общем виде формула для выходного размера выглядит так:n_ {out} =(n_ {in} + 2 * n_ {padding}  -  n_ {filter})+ 1.

размер шага

Другой гиперпараметр вашей свертки:размер шага, определите, насколько вы хотите переместить фильтр на каждом шаге. Во всех приведенных выше примерах размер шага равен 1, и последовательные применения фильтра перекрываются. Чем больше шаг, тем меньше применяется фильтр и меньше выходной размер. Следующее изВеб-сайт Стэнфордского университета cs231Результаты показывают, что размеры шага 1 и 2 применяются к вводу 1D:

卷积步幅大小。 左:步幅大小1.右:步幅大小2.来源:http://cs231n.github.io/convolutional-networks/

Размер шага свертки. Слева: размер шага 1. Справа: размер шага 2. Источник: http://cs231n.github.io/convolutional-networks/

В литературе мы обычно видим размер шага равный 1, но более крупные шаги могут позволить вам построить поведение, похожее наРекуррентная нейронная сетьПодобные модели, т.е. похожие на деревья.

объединение слоев

Ключевым аспектом сверточных нейронных сетей является то, чтослой сбора,Обычно применяется после сверточных слоев. Слой пула выполняет субдискретизацию своего ввода. объединить его в最大Наиболее распространенный метод манипулирования результатами, применяемый к каждому фильтру. Вам не обязательно объединять всю матрицу, вы также можете объединять окна. Например, ниже показано максимальное объединение для окна 2×2 (в НЛП мы обычно применяем объединение ко всему выводу, что дает только одно число для каждого фильтра):

CNN中的最大合并。 资料来源:http://cs231n.github.io/convolutional-networks/#pool

Максимальный пул в CNN. Источник: http://cs231n.github.io/convolutional-networks/#pool

Почему бассейн? Есть несколько причин. Свойство объединения состоит в том, что оно обеспечивает выходную матрицу фиксированного размера, которая часто требуется для классификации. Например, если у вас есть 1000 фильтров и вы применяете максимальное объединение к каждому фильтру, вы получите 1000-мерный вывод независимо от размера фильтра или размера ввода. Это позволяет вам использовать предложения переменного размера и фильтры переменного размера, но всегда получать одни и те же выходные параметры для подачи в классификатор.

Объединение также уменьшает размерность вывода, но (надеюсь) сохраняет наиболее важную информацию. Вы можете думать о каждом фильтре как об обнаружении определенной функции, например, об обнаружении того, содержит ли предложение отрицание, например, «не удивительно». Если эта фраза встречается где-то в предложении, результат применения фильтра к этому региону даст большее значение, но меньшие значения в других регионах. Выполняя max, вы сохраняете информацию о том, появляется ли функция в предложении, но теряете информацию о том, где она появляется. Но так ли бесполезна эта информация о местах? Да, это чем-то похоже на то, что делает пакет моделей n-грамм. вы теряете глобальную информацию о местах (что происходит в предложениях),

В мнимом распознавании слияние также обеспечивает базовую инвариантность к переводу (смещению) и вращению. Когда вы объединяете область, даже если вы перемещаете/поворачиваете изображение на несколько пикселей, результат останется примерно таким же, потому что операция max будет выбирать одно и то же значение, несмотря ни на что.

ряд

Последнее понятие, которое нам нужно понять, этоканал. **Каналы — это разные «представления» входных данных. Например, при распознавании изображений у вас обычно есть каналы RGB (красный, зеленый, синий). Вы можете применять свертки по каналам с разными или равными весами. В НЛП вы можете представить все виды каналов: у вас могут быть отдельные каналы для разных лексических вложений (например,word2vecиGloVe), или у вас может быть канал того же предложения на другом языке или другим способом.

Сверточные нейронные сети для НЛП

Теперь давайте посмотрим на некоторые приложения CNN для обработки естественного языка. Я попытаюсь обобщить некоторые результаты исследования. Всегда есть много интересных приложений, по которым я буду скучать (пожалуйста, дайте мне знать в комментариях), но я надеюсь осветить хотя бы некоторые из наиболее популярных результатов.

Наиболее естественными для CNN, по-видимому, являются задачи классификации, такие как анализ тональности, обнаружение спама или классификация тем. Операции свертки и объединения теряют информацию о локальном порядке слов, поэтому маркировку последовательностей в маркировке PoS или извлечении сущностей довольно сложно вписать в чистую архитектуру CNN (хотя и не невозможно, вы можете добавить позиционные функции к входным данным).

[1] оценивает архитектуры CNN на различных наборах данных классификации, в основном включая анализ настроений и задачи классификации тем. Архитектуры CNN обеспечивают очень хорошую производительность для наборов данных и новый уровень техники для некоторых наборов данных. Удивительно, но сеть, использованная в этой статье, очень проста и настолько мощна. Входной слой является связнымword2vecПредложения, составленные из словесных вложений. Далее идет сверточный слой с несколькими фильтрами, затем слой максимального пула и, наконец, классификатор softmax. В работе также проводятся эксперименты на двух разных каналах в виде статического и динамического встраивания слов, где один канал настраивается во время обучения, а другой нет. Аналогичная, но более сложная архитектура была предложена ранее в [2]. [6] добавляет дополнительный уровень, который выполняет «семантическое кластерирование» в этой сетевой архитектуре.

 

Kim,Y。(2014)。 句子分类的卷积神经网络

Ким, Ю. (2014). Сверточные нейронные сети для классификации предложений

[4] обучают CNN с нуля без необходимости использования предварительно обученных векторов слов, таких как word2vec или GloVe. Он применяет свертку непосредственно к горячим векторам. Авторы также предлагают компактное представление входных данных в виде набора слов, что уменьшает количество параметров, которые сеть должна изучить. В [5] авторы расширили модель дополнительным неконтролируемым «региональным встраиванием», изученным с помощью CNN для прогнозирования контекста текстовых областей. Методы, изложенные в этих статьях, похоже, работают для длинных текстов (таких как обзоры фильмов), но их эффективность для коротких текстов (таких как твиты) неясна. Интуитивно понятно, что использование предварительно обученных вложений слов для коротких текстов даст больший выигрыш, чем их использование для длинных текстов.

Построение архитектуры CNN означает, что есть много гиперпараметров на выбор, некоторые из которых я рассмотрел выше: входное представление (word2vec, GloVe, one-hot), количество и размер сверточных фильтров, стратегия объединения (максимум, среднее) и функции активации ( ReLU, танх). [7] провели эмпирическую оценку влияния различных гиперпараметров в архитектурах CNN, исследуя их влияние на производительность и дисперсию при нескольких запусках. Если вы хотите реализовать свою собственную CNN для классификации текста, было бы неплохо использовать результаты этой статьи в качестве отправной точки. Некоторые результаты, которые выделяются, заключаются в том, что максимальный пул всегда превышает средний пул, что идеальные размеры фильтров важны, но зависят от задачи, и что регуляризация, похоже, не имеет большого значения для рассматриваемых задач NLP.

[8] исследовали CNN для задач извлечения отношений и классификации отношений. В дополнение к векторам слов авторы также используют относительное положение слова к интересующему объекту в качестве входных данных для сверточного слоя. Модель предполагает, что местоположения объектов заданы и что каждый входной пример содержит отношение. [9] и [10] исследовали подобные модели.

Другой интересный вариант использования CNN в НЛП можно найти в Microsoft Research [11] и [12]. В этих статьях описывается, как выучить семантически значимые представления предложений, которые можно использовать для поиска информации. Примеры, приведенные в документе, включают рекомендации пользователям потенциально интересных документов на основе того, что они сейчас читают. Тренируйте представления предложений на основе данных журнала поисковой системы.

Большинство архитектур CNN изучают вложения слов и предложений (малоразмерные представления) тем или иным способом в рамках своего учебного процесса. Не все статьи сосредоточены на этом аспекте обучения или исследуют последствия встраивания обучения. [13] предложили архитектуру CNN для прогнозирования хэштегов постов в Facebook при создании осмысленных вложений слов и предложений. Эти изученные встраивания затем были успешно применены к другой задаче — рекомендации потенциально интересных документов пользователям, обученным на данных о кликах.

CNN на уровне персонажей

Все модели, представленные до сих пор, основаны на словах. Но есть также исследования, в которых CNN применяется непосредственно к персонажам. [14] изучают вложения на уровне символов, объединяют их с предварительно обученными вложениями слов и используют CNN для маркировки частей речи. [15][16] исследовали использование CNN для обучения непосредственно на основе ролей без каких-либо предварительно обученных вложений. Примечательно, что авторы использовали относительно глубокую сеть с 9 слоями и применили ее к задачам анализа тональности и классификации текста. Результаты показывают, что обучение непосредственно на основе ввода на уровне символов очень хорошо работает на больших наборах данных (миллионы примеров), но плохо работает на меньших наборах данных (сотни тысяч примеров). [17] исследовали применение свертки на уровне символов к языковому моделированию, используя выходные данные CNN на уровне символов в качестве входных данных LSTM на каждом временном шаге. Одна и та же модель работает на разных языках.

Удивительно, но в основном все вышеперечисленные работы были опубликованы в течение последних 1-2 лет. Судя по всему, раньше CNN очень хорошо справлялась с НЛП.Обработка естественного языка в Scratch (почти) такая же, но темпы разработки новых результатов и новейших выпущенных систем явно ускоряются.

Вопросы или отзывы? Пожалуйста, дайте мне знать в комментариях. Спасибо за чтение!

 

Ссылка на документ