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

Или что, если бы компьютеры могли так хорошо понимать человеческий язык, что могли бы оценить вероятность, говорящую вам, насколько вероятно встретить любое случайное предложение, которое вы ему дадите?

Или, может быть, он мог бы генерировать полностью поддельные фрагменты кода ядра Linux, которые выглядят настолько аутентично, что они так же пугают, как и настоящий исходный код (ну, если вы сами не являетесь программистом ядра)?

Что, если бы компьютеры могли безукоризненно переводить с английского на французский или более чем на 100 языков со всего мира?

Или «увидеть» изображение и описать предметы, найденные на фото?

Источник: https://arxiv.org/pdf/1412.2306v2.pdf

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

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

Обработка естественного языка (NLP)

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

Давайте рассмотрим несколько задач обработки естественного языка и поймем, как глубокое обучение может помочь людям с ними:

Языковое моделирование

Языковые модели стремятся кратко представить историю наблюдаемого текста, чтобы предсказать следующее слово. Проще говоря, это задача предсказать, какое слово будет следующим в последовательности.

Источник: http://web.stanford.edu/class/cs224n/lectures/lecture8.pdf

Обратите внимание, что языковая модель должна использовать слова, которые уже встретились в последовательности, чтобы сделать прогноз. Чем длиннее последовательности слов, которые модель может использовать во время предсказания, тем лучше она справится с этой задачей.

Например:
если модель использует только два последних слова — «открыл их» — чтобы сделать прогноз, возможности для следующего слова будут быть намного больше, чем если бы использовались последние 3 слова — «студенты открыли свои». Следовательно, в первом случае предсказание будет не столь точным.

Таким образом, хорошая модель «запомнит» то, что она уже прочитала.

И это то, в чем рекуррентные нейронные сети довольно хороши. В частности, более продвинутые версии, называемые GRU (Gated Recurrent Unit) и LSTM (Long Short-Term Memory), дают весьма замечательные результаты благодаря встроенным в них модулям «памяти».

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

Генерация шекспировского текста/исходного кода Linux(!)/джазовой музыки(!!)/уровней Super Mario(!!!)

Все эти вирусные посты в Твиттере, которые звучат примерно так:

«Я заставил ИИ прочитать все, а затем заставил его написать собственную историю, похожую на . Вот первая страница..”

Все они возможны с использованием RNN!

Допустим, вы хотели создать историю в стиле Шекспира. Что бы вы сделали, так это обучили бы RNN на наборе данных существующих рассказов Шекспира и позволили бы ему научиться моделировать их. Таким образом, он научится предсказывать следующее слово в рассказе Шекспира (просто для ясности, это не будет на 100% точным, но вполне удовлетворительным). Что мы можем сделать сейчас, так это заставить его предсказывать наиболее вероятное слово снова и снова и снова…

Слова продолжают добавляться, пока мы не получим совершенно новый «шекспировский» шедевр!

Что еще?

Вы можете моделировать не только текст, но и любые последовательности, используя похожие RNN. Например:

Обратите внимание, что в приведенных выше примерах используются RNN на уровне символов. Здесь вместо того, чтобы предсказывать следующее слово в последовательности, модель предсказывает следующий символ. Это позволяет RNN изучать произвольные типы последовательностей, таких как уровни Super Mario!

Анализ настроений

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

Источник: https://xkcd.com/1036/

Ранние подходы к анализу тональности основывались на токенизации письменных предложений и попытке определить тональность на основе правил грамматики. Излишне говорить, что они были не слишком эффективны.

Но сегодня системы анализа на основе RNN развертываются гигантскими социальными сетями, чтобы помечать и выявлять неприемлемый контент на своих платформах. Они работают вместе с модераторами-людьми и помогают им удалять токсичный контент.

Источник: http://web.stanford.edu/class/cs224n/lectures/lecture8.pdf

Языковой перевод

За последние 3 года технология машинного перевода была полностью переписана. Используя технологию, называемую обучением от последовательности к последовательности, программисты теперь могут создавать одни из лучших систем перевода в мире.

Эти последовательные архитектуры основаны на рекуррентных нейронных сетях.

Источник: http://cs224d.stanford.edu/lectures/CS224d-Lecture15.pdf

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

Эти последовательные архитектуры полезны не только для языкового перевода. Они также используются для создания чат-ботов с искусственным интеллектом! Идея здесь довольно проста:

Вместо обучения энкодера и декодера на 2-х языках мы обучаем их на 2-х сторонах разговора. Таким образом, возможно, кодировщик будет представлять сообщения запросов пользователей, а декодер будет представлять соответствующие сообщения группы поддержки. Так система учится «переводить» между запросами пользователей и ответами службы поддержки.

Использование CNN для задач НЛП

Традиционно мы думаем, что сверточная сеть (CNN) — это нейронная сеть, специализированная для обработки сетки значений, например изображения. А рекуррентная нейронная сеть (RNN) — это нейронная сеть, специализированная для обработки последовательности значений.

Но совсем недавно мы также начали применять CNN к задачам обработки естественного языка и получили некоторые интересные результаты.

Классификационные задачи

Поскольку CNN, в отличие от RNN, могут выводить только векторы фиксированного размера, кажется, что они естественным образом подходят для задач классификации, таких как анализ настроений, обнаружение спама или категоризация тем.

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

Первый слой показывает 6 фильтров: 2 пропускают по 2 слова за раз, еще 2 фильтра обрабатывают по 3 слова за раз и последние 2 фильтра обрабатывают по 4 слова за раз.

Источник: https://arxiv.org/pdf/1703.03091.pdf

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

Важным аргументом в пользу CNN является то, что они очень быстрые. Свертки являются центральной частью компьютерной графики и реализованы на аппаратном уровне на графических процессорах.

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

Генерация описаний изображений

Помните, как в моделях «последовательность к последовательности» кодировщик создает векторное представление входных данных, а декодер использует этот вектор для создания новой последовательности?

А что, если мы заменим RNN в этом кодере на CNN?

Это дало бы нам модель, которая может принимать изображение и генерировать последовательность на основе этого изображения!

Затем мы можем передать изображение в нашу модель, и она выведет предложение, описывающее изображение.

Источник: https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Vinyals_Show_and_Tell_2015_CVPR_paper.pdf

Автоматическое описание содержимого изображения — фундаментальная проблема искусственного интеллекта, которая связывает компьютерное зрение и обработку естественного языка. Способность автоматически описывать содержимое изображения с помощью правильно построенных английских предложений — очень сложная задача, но она может иметь большое значение. Например, он может помочь слабовидящим людям лучше понять содержание изображений в Интернете. Автоматическое описание содержимого изображения — фундаментальная проблема искусственного интеллекта, которая связывает компьютерное зрение и обработку естественного языка. Способность автоматически описывать содержимое изображения с помощью правильно построенных английских предложений — очень сложная задача, но она может иметь большое значение. Например, он может помочь слабовидящим людям лучше понять содержание изображений в Интернете.

Источник: https://www.cv-foundation.org/openaccess/content_cvpr_2015/papers/Vinyals_Show_and_Tell_2015_CVPR_paper.pdf

Вот два важных документа, посвященных этой проблеме:

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

Конечно, это захватывающее время, чтобы быть в этой области. Так что приступайте к делу прямо сейчас и тренируйте свои собственные нейронные сети!

Первоначально опубликовано на сайте blog.exxactcorp.com 27 декабря 2018 г.