Некоторые ранние системы ОЕЯ искали отдельные слова или короткие последовательности слов, которые считали индикаторами тональности всего текста. Например, можно предположить, что такие слова, как “лишенный”, “мрачный”, “странный”, “тяжелый”, “тревожный”, “жуткий” и “посредственный”, и такие словосочетания, как “не зацепили” и “ни шарма, ни остроумия”, говорят о негативной тональности отзывов. В некоторых случаях это действительно так, но часто те же самые слова можно найти в позитивных рецензиях. Вот несколько примеров:
“Несмотря на тяжелую тему, в фильме достаточно юмора, который не позволяет ему стать слишком мрачным”.
“Не понимаю, что тревожного и жуткого люди находят в этом фильме”.
“Когда вышел этот великолепный фильм, я был слишком молод – и тогда он меня не зацепил”.
“Не посмотрев этот фильм, вы многого лишитесь!”
Для определения эмоциональной окраски сообщения недостаточно распознавать отдельные слова или короткие словосочетания: необходимо понять семантику слов в контексте всего предложения.
Вскоре после того, как глубокие сети начали блистать в сфере компьютерного зрения и распознавания речи, исследователи ОЕЯ попытались применить их к анализу тональности текста. Как обычно, идея в том, чтобы натренировать сеть на множестве размеченных людьми примеров предложений с позитивной и негативной тональностью, позволив ей самостоятельно выявить полезные признаки, позволяющие с уверенностью классифицировать новое предложение как “позитивное” или “негативное”. Но как вообще добиться, чтобы нейронная сеть обработала предложение?
Рекуррентные нейронные сети
Для обработки предложения или абзаца необходимы нейронные сети особого типа, непохожие на описанные в предыдущих главах. Так, в главе 4 мы анализировали работу сверточной нейронной сети, которая классифицировала изображения по категориям “собака” и “кошка”. Ее входным сигналом была насыщенность пикселей на изображении фиксированного размера (изображения большего и меньшего размера подвергались масштабированию). Предложения, напротив, состоят из последовательностей слов, а их длина не фиксирована. Таким образом, нам нужно найти способ, которым нейронная сеть сможет обрабатывать предложения переменной длины.
Применение нейронных сетей для решения задач, в которых фигурируют упорядоченные последовательности, такие как предложения, началось в 1980-х годах, когда были созданы рекуррентные нейронные сети (РНС), само собой, навеянные представлениями о том, как последовательности интерпретируются человеческим мозгом. Представьте, что вас попросили прочитать отзыв a little too dark to my taste (“на мой взгляд, немного мрачновато”) и определить его тональность – позитивную или негативную. Вы читаете предложение слева направо, по одному слову. Читая его, вы начинаете формировать свое впечатление о его тональности, и это впечатление получает подтверждение, когда вы дочитываете предложение до конца. К этому моменту у вас в мозге складывается репрезентация предложения в форме активаций нейронов, и она позволяет вам с уверенностью сказать, позитивный перед вами отзыв или негативный.
Структура рекуррентной нейронной сети следует такому последовательному чтению предложений и формированию их репрезентаций в форме активации нейронов. На рис. 32 сравниваются структуры традиционной и рекуррентной нейронной сети. Для простоты в каждой сети только две ячейки (белые круги) в скрытом слое и одна ячейка в выходном слое. В обеих сетях входной сигнал имеет связи со скрытыми ячейками, а каждая скрытая ячейка имеет связь с выходной ячейкой (сплошные стрелки). Ключевое отличие РНС в том, что у ее скрытых ячеек есть дополнительные “рекуррентные” связи: каждая из скрытых ячеек имеет связь с самой собой и другой скрытой ячейкой (пунктирные стрелки). Как это работает? В отличие от традиционной нейронной сети, РНС функционирует в соответствии с последовательностью моментов времени. В каждый момент времени РНС получает входной сигнал и вычисляет активацию своих скрытых и выходных ячеек, как и традиционная нейронная сеть. Но в РНС уровень активации каждой скрытой ячейки вычисляется не только на основе входного сигнала, но и на основе уровней активации скрытых ячеек в предыдущий момент времени. (В первый момент времени эти рекуррентные значения равняются 0.) Это дает сети способ интерпретировать слова, которые она “читает” сейчас, вспоминая контекст “прочитанного” ранее.
Чтобы понять, как работает РНС, лучше всего представить функционирование сети во времени, как на рис. 33, который показывает РНС с рис. 32 в каждый из восьми последовательных моментов времени. Ради простоты я показала все рекуррентные связи в скрытом слое единственной пунктирной стрелкой от одного шага времени к другому. В каждый момент времени уровни активации скрытых ячеек представляют собой составленный сетью код того фрагмента предложения, который она увидела к этому моменту. Продолжая обрабатывать слова, сеть совершенствует этот код. За последним словом в предложении следует специальный символ END, который, подобно точке, сообщает сети, что предложение закончилось. Обратите внимание, что это люди добавляют символ END в конец каждого предложения, перед тем как давать текст сети.
Рис. 32. A – схема традиционной нейронной сети; B – схема рекуррентной нейронной сети, где уровни активации скрытых ячеек в конкретный момент времени учитываются также в следующий момент
В каждый момент времени выходная ячейка этой сети обрабатывает уровни активации скрытых ячеек (“код”), чтобы определить степень уверенности сети в том, что входное предложение (то есть часть предложения, полученная сетью к этому шагу времени) имеет позитивную тональность. Применяя сеть к конкретному предложению, мы можем не обращать внимания на выходной сигнал, пока сеть не достигнет конца предложения. В этот момент скрытые единицы закодируют предложение целиком, а выходная единица выдаст итоговую степень уверенности сети (здесь – тридцатипроцентную степень уверенности в позитивной и, соответственно, семидесятипроцентную степень уверенности в негативной тональности предложения).
Рис. 33. Работа рекуррентной нейронной сети с рис. 32 на последовательности восьми моментов времени
Поскольку сеть перестает кодировать предложение, только встречая символ END, система теоретически может кодировать предложения любой длины в последовательность чисел – уровней активации скрытых ячеек – фиксированной длины. По очевидным причинам такие сети часто называют кодерами
[235].