Дипломная работа: Методы машинного обучения для анализа тональности коротких текстов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

У сетей RNN довольно необычная архитектура, отличающаяся от сетей прямого распространения. За счёт неё в рекуррентных сетях реализуется концепция памяти. Именно, в них имеется один скрытый слой (см. Рис.1), который, получив в момент на входе векторное представление слова , обновляется, при этом учитывая и своё предыдущее состояние, и полученное на входе слово. Таким образом, мы наблюдаем некий цикл, в результате действия которого каждому слову в тексте ставится в соответствие выход , зависящий от информации, полученной от последовательности предыдущих слов. Это позволяет учесть в модели контекстуальные связи между словами, а также их порядок.

Рисунок 1. Архитектура простейшей RNN

Более формально, прямой проход сети можно описать двумя формулами. Сначала обновляется скрытое состояние с помощью некоторого усреднения текущего входа и предыдущего состояния:

где - векторное представление слова, - матрицы весов соответствующих размеров, - вектор сдвига, также содержащий параметры модели, - нелинейная функция активации, зачастую - функция ReLU, т.к. с ней «меньше всего проблем», о которых речь пойдёт далее. Стоит отметить, что, разумеется, необходимо также задать начальное состояние , например, нулевым вектором.

По второй формуле рассчитывается выход сети , иначе говоря, предсказание нашей модели. При этом используется значение скрытого состояния, полученное на предыдущем шаге:

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

Важно отметить, что вышеперечисленные матрицы весов и векторы сдвига, содержащие параметры сети, постоянны для всех , что отражается на градиентах в виде их зависимости как от текущих, так и от всех предыдущих состояний сети. Обучение сети происходит за счёт минимизации функционала потерь методом Backpropagation Through Time [19], который отличается от стандартного «бэкпропа» тем, что мы дифференцируем не только «по слоям» в вертикальном направлении, но и по «времени» - в горизонтальном направлении, так как работаем с последовательностями слов:

Конечный вид градиентов по параметрам сети достаточно сложен, поэтому приводиться не будет. Но хотелось бы отметить, что именно с их видом связаны две очень часто встречающиеся проблемы, получившие название «затухающих» (vanished) и «взрывающихся» (exploding) градиентов.

Наличие первой проблемы грозит нам тем, что веса с «далёких» timestamp'ов затухают и не влияют на процесс обучения, поэтому отыскание зависимостей между словами, расположенными относительно далеко друг от друга, значительно затрудняется [20]. Наличие проблемы «взрывающиеся» градиентов приводит к тому, что при достаточно большой длине текста градиент может перестать быть числом и принять значение NaN. Слишком большие значения градиентов сложной мультимодальной функции также могут привести к тому, что, используя стохастические методы оптимизации (например, стохастический или усреднённый градиентный спуск), решения задачи оптимизации будет неправильными, и качество модели будет нестабильным по мере увеличения числа эпох.

Обнаружить проблему «взрывающихся» градиентов достаточно просто, критерий был обозначен выше, а решать же её можно установлением верхнего порога для -норм градиентов. С «затухающими градиентами» ситуация сложнее, обнаружить эту проблему достаточно тяжело, т.к. слабое качество модели не обязательно связано с затуханием градиентов. Возможно, задача просто слишком сложна. Частично c этой проблемой можно бороться применением в качестве функции активации - функции ReLU, производная которой равна на положительных значениях аргумента. Тем не менее, на отрицательных значениях риск получить «затухающий» градиент всё же остаётся. Гораздо более осмысленным видится подход c использованием несколько модифицированных архитектур рекуррентных нейронных сетей, созданных для предотвращения проблемы «затухающих» градиентов - LSTM [21] и GRU [22].

1.2.2 Архитектура LSTM (Long short-term memory)

Нейронные сети с архитектурой LSTM отличаются от стандартной RNN тем, что запоминание информации на долгое время для них - естественный процесс, не требующий «аккуратного» обучения. Наряду с этим, в LSTM информация проще «проходит» через скрытые слои. Эти два свойства и позволяют эффективно отыскивать долгосрочные зависимости между словами [23].

Архитектурно, в LSTM-блоке уже будет содержаться не один скрытый слой, а четыре. Следовательно, и число параметров возрастает в четыре раза по сравнению с RNN, что делает обучение LSTM довольно ресурсоёмким. На рисунке 2 можно увидеть развёрнутую структуру LSTM-блока, на которой слоям соответствуют жёлтые прямоугольники. Отметим, что для поступления информации в сеть уже есть два пути - стандартно, через скрытое состояние, а также через так называемую ячейку памяти (memory cell), которая и обеспечивает долговременное запоминание информации (см. также Рис.3, на котором ячейка памяти выделена отдельно).

На рисунках 2, 3 также видно, что слои LSTM-блока не имеют доступа к ячейке памяти, и что в каждый момент времени сеть возвращает не только вектор , но и вектор ячейки памяти .

Рисунок 2. Архитектура сети типа LSTM

Рисунок 3. Ячейка памяти (memory cell) внутри LSTM-блока

Собственно, вся внутренняя структура LSTM-блока создана для использования ячейки памяти. Объём информации в сети регулируется с помощью нескольких фильтров, рассмотрим их более подробно.

· Фильтр забывания (forget gate)

Мы хотим, чтобы сеть могла при необходимости забывать ненужную информацию, за это отвечает фильтр забывания. Он выделен на рисунке 4.

Более строго, получая на шаге входной вектор и вектор c предыдущего шага, фильтр забывания выдаёт вектор , значения которого означают, какую информацию следует выбросить из ячейки памяти:

где , - соответствующие вектору матрицы весов, - вектор сдвига, а - сигмоидальная функция активации.

Рисунок 4. Фильтр забывания (forget gate)

анализ тональность агрессивный комментарий

· Входной фильтр (input gate)

Далее, нужно определить объём новой информации, который следует поместить в ячейку памяти. Эту функцию выполняет входной фильтр (см. Рис.5). Получив на входе те же значения, что и фильтр забывания, входной фильтр подсчитывает значения векторов и . Первый говорит о том, какую информацию в ячейке памяти следует обновить, второй же несёт в себе уже новую информацию для хранения в ячейке памяти:

где - гиперболический тангенс или же иная другая нелинейная функция активации.

Рисунок 5. Входной фильтр (input gate)

· Обновление ячейки памяти

На первых двух шагах получена вся информация, необходимая для обновления значения для ячейки состояния:

Здесь для расчёта мы воспользовались произведением Адамара (поэлементное умножение векторов) [24, гл. 2], первое произведение - это та информация, которую необходимо забыть, второе произведение - та информация, которую необходимо добавить в ячейку памяти (см. Рис.6).

Рисунок 6. Обновление ячейки памяти

· Выходной фильтр (output gate)

Наконец, мы можем определить выходы (предсказания) сети (см. Рис.7). Для этого нам понадобится значение выходного слоя - вектор , вычисляющийся по формуле:

По сути, этот вектор означает объём информации, которую мы хотим вывести из ячейки памяти. Кроме того, нам нужно применить нелинейное преобразование ячейки памяти в зависимости от поставленной задачи. Например, если целевая переменная имеет значения в диапазоне , то в можно использовать гиперболический тангенс:

Рисунок 7. Выходной фильтр (output gate)

Таким образом, за счёт специфичной архитектуры LSTM, в модели появился хотя бы одни короткий путь для информации и, соответственно, градиентов - путь от значения ячейки памяти до значения . Именно его наличие и позволяет избежать проблемы затухающих градиентов. Более того, при использовании LSTM, информация о предыдущих словах забывается не постепенно с течением времени, как это происходит в обычных RNN, а под управлением фильтра забывания, когда это нужно.

1.2.3 Архитектура GRU (Gated Recurrent Units)

Альтернативой сетям LSTM может быть архитектура управляемых рекуррентных блоков (GRU), в которой число параметров больше всего в три раза по сравнению с простейшей RNN, что даёт значительный прирост скорости обучения в сравнении с сетями LSTM практически без потерь качества моделей [25].

Архитектурное отличие от LSTM заключается в том, что в сетях GRU уже нет ячейки памяти и число слоёв и фильтров, соответственно, уменьшено до трёх и двух (см. Рис.8). Рассмотрим внутреннюю структуру GRU-блока.

Рисунок 8. Архитектура сети типа GRU

· Фильтр сброса (reset gate)

Данный фильтр контролирует то, какой объём информации из предыдущего состояния поступит в информационный вектор .

Более строго, получая на шаге входной вектор и вектор c предыдущего шага, фильтр сброса выдаёт вектор , который далее используется при расчёте так называемого информационного вектора :

где , - соответствующие вектору матрицы весов, - вектор сдвига, а - сигмоидальная функция активации.

где, - несёт в себе новую информацию, а вместо гиперболического тангенса может использоваться иная другая нелинейная функция активации в зависимости от поставленной задачи. Таким образом, фильтр сброса действует похоже на входной фильтр в архитектуре LSTM.

· Фильтр обновления (update gate)

Данный фильтр контролирует баланс между сохранением информации с предыдущих шагов и записью новой информации. Получив входы аналогичные фильтру сброса, вычисляется «балансовый» вектор , и затем на его основе вычисляется выходной вектор сети :

где мы вновь использовали произведение Адамара. Первое произведение в последней формуле - есть доли информации с предыдущего шага, которую необходимо сохранить, а второе произведение - есть доли новой информации для записи.

Данная архитектура, аналогично LSTM, упрощает запись градиентов, и при грамотном подборе инициализирующих параметров позволяет избежать проблемы их «затухания».

Для того, чтобы оценивать контекст с обоих сторон от подающегося на вход сети слова, можно строить модели BiLSTM и BiGRU [26], внутри которых будет по две сети, считывающих слова в одном и том же тексте, но в противоположных порядках. В итоге получится два результирующих вектора для одного и того же текста, их можно объединить посредством конкатенации, это и будет конечным выходом для модели.

1.2.4 Свёрточные нейронные сети (CNN)

Можно сказать, что в 2012 году данный вид нейронных сетей произвёл революцию в области компьютерного зрения, когда с их помощью исследователям удалось обновить рекорд по качеству классификации картинок в соревновании ImageNet на 10% [27]. Получив мировое признание, они стали повсеместно применяться для решения разнообразных задач компьютерного зрения, но их также можно использовать их для некоторых задач анализа текстов. Удачный кейс применения CNN в этой области можно увидеть в работе Y.Kim [28], далее более подробно поясним предложенную автором архитектуру для решения задачи многоклассовой классификации текстов (см. Рис.9).

Рисунок 9. Архитектура сети типа CNN

На вход сети поступает векторное представление текста - это могут быть заранее обученные word2vec - представления слов [29], векторы GloVe [30], или же выходы предшествующих слоёв, например, блока GRU. Пусть в тексте присутствует слов, каждому из которых соответствует вектор , тогда на вход сети подаётся некий «общий» вектор размерности :

где - есть обозначение для конкатенации. Здесь, как и в дальнейшем, очевидно, наблюдается аналогия с пиксельным представлением изображений.

Характерная особенность CNN - это наличие в них свёрточного слоя, применяющего операцию свёртки к входному вектору с использованием определённого фильтра ( - число подряд идущих слов). Аккуратно в нашем случае её можно записать так (визуальную интерпретацию можно увидеть на Рис.9):

где - есть выход свёрточного слоя для -й подпоследовательности последовательно идущих слов (всего таких подпоследовательностей будет - следовательно, таким будет и размерность «выходного» вектора свёрточного слоя), - вещественное число или сдвиг, - нелинейная функция активации, такая как, например, гиперболический тангенс.

Таким образом, мы проходим фильтром по всем «окнам» - подпоследовательностям слов определённой длины, и получаем выход свёрточного слоя, который может быть интерпретирован как идентификатор какого-то свойства, например, агрессии в тексте:

Можно использовать несколько фильтров, изменяя его ширину, формируя много векторов признаков. Далее, чтобы выделить наиболее важные признаки к каждому фильтру применяется процедура max-пулинга:

получается вектор размерности, равной числу использованных фильтров. Наконец, этот вектор подаётся в качестве входа на полносвязный слой, использующий процедуру dropout'a (обнуление некоторых выходов предыдущего слоя как средство регуляризации). Ко входу в задаче многоклассовой классификации применяется нелинейное преобразование. Например, для задачи многоклассовой классификации можно использовать активационную функцию Softmax.

Источник: https://otherreferats.allbest.ru/download/1181134/