facebook ВКонтакте twitter Одноклассники
ЭЛЕКТРОННЫЙ ЛИТЕРАТУРНЫЙ ЖУРНАЛ. Выходит два раза в месяц. Основан в апреле 2014 г.
Книжный магазин Bambook        Издательство Лиterraтура        Социальная сеть Богема
Мои закладки
/ № 121 июль 2018 г.
» » Борис Орехов: Нейросеть как алгоритм для генерации текстов

Борис Орехов: Нейросеть как алгоритм для генерации текстов


Борис Орехов о машинах, которые умеют писать стихи

Предсказать погоду и расшифровать данные томографа? Обыграть сильнейшего гроссмейстера мира? Спрогнозировать финал «Игры престолов»? Нейроинтеллект бросает вызов человеку во многих сакральных сферах. И всё чаще побеждает.
Самые талантливые нейросети уже вовсю пишут стихи [1]. Как они это делают, спросим у одного из первых исследователей поэзии рекуррентных нейросетей в России, кандидата филологических наук, доцента НИУ ВШЭ Бориса Орехова.

Борис Валерьевич Орехов (род. 1982) — лингвист. Окончил Башкирский государственный университет со степенью магистра филологии. Кандидат филологических наук (2008). С 2013 года доцент Школы лингвистики Национального исследовательского университета «Высшая школа экономики», сотрудник Центра цифровых гуманитарных исследований НИУ ВШЭ.

Автор Словаря языка французских стихотворений Ф. И. Тютчева и около 150 научных работ. Соавтор учебника «Поэзия» (М.: Б.С.Г.-Пресс : ОГИ, 2016).

С Борисом Ореховым беседовал Владимир Коркунов
(автор благодарит Алексея Шубенкова, из бесед с которым о поэзии и нейросетях родились многие из этих вопросы)
_________________



— Борис Валерьевич, как давно появились нейросети и зачем?

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

— Приведите пример, понятный читателю.

— Есть старый советский черно-белый фильм «Мозг и машина» (Моснаучфильм, 1960), в котором с помощью прототипа нейронных сетей пытались наладить систему контроля на производстве: где должна располагаться деталь, сколько времени ее нужно обрабатывать, как на этот процесс влияет влажность воздуха и т.д. Оказалось, человеку эти процессы сложнее отследить, чем машине.

— Рекуррентные нейросети способны порождать текст. Они обучаются на уже существующих произведениях и во многом повторяют особенности «прочитанных» ими текстов. Что первым делом может воспроизвести рекуррентная нейросеть? Стиль, грамматику?

— А что такое стиль? Мы не можем на примере двух слов определить, какой у текста стиль. Это как с программой «Угадай мелодию», где тебе даются три ноты. Угадаешь или нет, во многом результат случая. Воспроизведет нейросеть черты стиля на первых этапах обучения или нет — мы не знаем. Это зависит от того, что мы понимаем под стилем. С грамматикой иначе. Грамматика — это сложная многоаспектная система с согласованием множества элементов, и нейросеть должна обучаться на большом объёме текстов, чтобы её понять, но здесь мы можем точно определить, получилось высказывание грамматичным или нет. Быстрее всего она воспроизводит даже не грамматику в смысле согласования слов, а отдельные морфемы, суффиксы причастий, префиксы глаголов… То, что чаще всего встречается в тексте, первым делом появляется и в модели.

— Есть ли возможность предобучить сеть, скажем, грамматике, чтобы уменьшить число необходимых для обучения сети текстов?

— Да, это возможно. Нейронной сети, тренирующейся на художественных текстах, необходимо выучить две вещи: язык и эстетические особенности этого языка. Сеть действительно можно обучить на множестве текстов, и она будет знать, как устроен конкретный язык грамматически, а потом дообучить её на, скажем, стихах XIX века или прозе Набокова. И тогда она будет создавать образные тексты. Нечто подобное происходит и с изображениями. Нейронной сети дают множество картинок, она обучается опознавать какие-то общие вещи, а затем программист берет предобученную сеть и тренирует её, чтобы она распознавала, скажем, котов. 

— Для компьютера кот и собака изначально одно и то же… 

— Я бы сказал, для него это просто пиксели.

— Изучит нейросеть по сто изображений котов и собак, и всё равно отличий не увидит. Четыре лапы, хвост, уши. Одно и то же животное. Но если натренировать её на миллионе изображений, то выявить различия будет проще. Удлинённая морда у собак, острые когти у котов…

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

— И всё же тексты для нас интереснее котов. Я правильно понимаю, что после каждого чек-поинта (шага, сохраняющего состояние сети) порождённые на выходе тексты опять подаются на вход?

— Брать с выхода и подавать на вход — свойство любой сети. Узлы-нейроны получают информацию, обрабатывают её и передают следующему слою нейронов, которые объединяются в слои. Таким образом, что-то подаётся на вход, а потом с каждым выходом — снова на вход. Так действуют абсолютно все нейронные сети, в которых больше одного слоя. Отличие рекуррентных сетей от, скажем, сверточных, в том, что их устройство не сложно понять гуманитарию, который знаком с концепцией Лессинга. Если помните, это идея про временные и пространственные виды искусства. Здесь она работает в полную силу. Если мы посмотрим на картину, — говорил Лессинг, — то сразу составим о ней впечатление. А чтобы воспринять произведение во «временных» видах искусства — музыке или литературе, — нужно слушать или читать до конца. Примерно так же работают сверточные и рекуррентные нейронные сети. Сверточная берет, например, картинку и обрабатывает её целиком, а рекуррентная работает с частями, сначала один кусочек, потом другой. Запоминает предыдущий шаг, но при этом что-то забывает. И так далее.

— Для чего нужны шаги/чек-поинты? Чтобы не было переобучения (когда сеть зацикливается и подаёт одну и ту же информацию на вход)?

— Не совсем так. Чек-поинты — это резервная копия. На случай «падения» сервера. Чтобы недообучившаяся сеть не пропала и её не пришлось обучать заново. Переобучение происходит, когда модель, которая получилась в результате обучения, «заточена» под данные, которые сеть уже видела. Получая новые тексты, она уже не способна их обработать. Например, если сети показать несколько миллионов фотографий котов и не показывать при этом собак, мы получим переобучение на котах. 

— Может ли нейросеть породить на выходе один из текстов, на которых она тренировалась?

— Это и есть эффект переобучения сети. Если мы неправильно построим процесс обучения, то переподгонка будет выглядеть именно так. Нейронная сеть выдаст не новые тексты на основе обучающего корпуса, а тексты из обучающего корпуса в исходном виде. Но технологии, лежащие в основе современных разновидностей рекуррентных сетей, позволяют избегать переобучения. Это происходит благодаря процессу концепции lstm (long short-term memory). Немного парадоксальное название. С одной стороны — длинная память, а с другой — короткая, и все в одном термине. Но в этом и суть. Как я уже сказал, рекуррентная сеть и запоминает поданную на вход информацию, и одновременно что-то забывает. Забывание не дает ей переобучаться.

— Как нейросети появились в области анализа/генерации текстов?  Они были созданы для нужд бизнеса или, может, кому-то захотелось написать стихотворение?

— Рекуррентные сети синтезируют текст и делают это довольно-таки эффективно. Что было у нас до сих пор? Люди думали, что знают грамматику языка. На самом деле это не так. Есть множество нюансов, которые не описаны даже в хорошо изученных языках вроде английского. Мы можем научить компьютер расставлять слова в предложении, но выяснилось, что адекватно описать язык не получается. Нужно огромное количество человеко-часов, а экономическая отдача небольшая. А если натренировать систему на корпусе текстов, то результат получится довольно-таки адекватным. Это находит применение и в бизнес-сфере. Например, в техподдержке. Специалисты одинаково отвечают на множество одинаковых запросов. У пользователя не включается принтер или пропал интернет. А решения одни и те же. Есть такой сериал «Компьютерщики» («IT Crowd») — и там на телефоне службы техподдержки стоял автоответчик. На каждый звонок от отвечал: если у вас возникла проблема, выключите и включите компьютер. Подобного рода задачи можно решить с помощью рекуррентных нейронных сетей. В сервисах-переводчиках их также начинают использовать. Нейросети учатся на последовательностях. Рекуррентные нейросети — на последовательности символов, то есть, на буквах.

— Как это происходит в случае перевода?

— Нейросеть сопоставляет последовательности символов на русском и, например, французском языках. Улавливает закономерности. В процессе перевода сеть продолжает учиться — и результат со временем улучшается. Нейросеть гораздо эффективнее прежних переводчиков, основанных на правилах языка, — она пытается понять смысл слова в зависимости от того, что видит в предложении.

— Человек-переводчик способен превзойти сеть?

— Сеть эффективнее там, где нужно обработать большой массив данных. Или быстрее выполнить рутинные операции. Но она плохо справляется с задачами при дефиците данных. На переводах это тоже сказывается. Если встречаются  редкие слова или контексты, которых не было в обучающей выборке, система не сможет их адекватно перевести. Не так давно Google Translate перешел на нейронные сети — и тут же породил множество мемов. Оказалось, если написать на русском «шашаша» (или другие однотипные буквосочетания) и попробовать перевести на монгольский, система выдаст что-то смешное [2].

— Я тоже с этим забавлялся. Но Google уже исправился…

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

— Элементы стиля нейросеть воспроизводить умеет. Но сможет ли она порождать сюжеты?

— Действительно, кажется, что рекуррентная сеть к этому ближе всего, потому что сюжет предполагает последовательность — цепь событий, нарратив. Но сюжет всё ещё объект более высокого уровня, чем нейросеть способна охватить. Она работает с символами и словами, которые складываются из этих символов. А путь от символа до сюжета далёк. Пока рекуррентная сеть не умеет «проглатывать» стихотворение целиком, как удав слона. Повторюсь, она разрезает текст на кусочки и двигается по ним. И тех фрагментов, которые у неё в данный момент в памяти, не хватает, чтобы понять закономерности, на уровне которых существует сюжет.

— Как долго и на чём учится рекуррентная нейросеть?

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

— Компьютер требуется мощный?

— Чем мощнее, тем лучше. Программисты обычно арендуют облачные сервисы, например, Amazon. Несколько лет назад, когда рекуррентные нейросети только набирали популярность, некая девушка (это, кстати, было отдельным инфоповодом) арендовала на Amazon вычислительный сервис и натренировала на нем сеть, которая порождала тексты эротических рассказов — уж не знаю почему именно эротических [3]. Я же использую разные машины и разный софт. Как-то работал с красноярским суперкомпьютером, а сейчас у меня есть свободный ноутбук, на котором я могу обучить несложную нейросеть.

— Это можно сделать на обычном домашнем компьютере?

— Да, но лучше иметь машину помощнее.

— Почему нейросети недоступны большинству пользователей? Нехватка мощностей? Сложная архитектура?

— Смотря что считать доступностью. Продукты, основанные на нейротехнологиях, доступны всем. Например, это Google Translate или Google Assistant (то, что работает в телефоне, если произнести  «О’кей, Google!»). Если вы имеете в виду инженеров, которые способны создать нейросеть, кажется, у них нет недовольства. В той мере, в которой это необходимо, вычислительные ресурсы для создания нейросети доступны им всем. Понятно, что человек, которых не связан с IT-тематикой и программированием в частности, разобраться в устройстве нейросетей сможет не сразу. Но современный программист построит нейросеть без особых проблем.

— Предположим, я задумал создать дома рекуррентную нейросеть. Есть ли готовые решения в Интернете? Или придётся привлечь специалиста?

— Скажите, а пельмени — это готовый продукт или нет? С одной стороны, да, там есть фарш, они слеплены, но их все равно нужно сварить. Бывают менее готовые продукты, кусок мяса, с которым много чего можно сделать, а бывают более готовые, например, салат в контейнере, который не нужно дополнительно готовить, открыл и съел. Если вы имеете в виду рекуррентную нейросеть, которую можно скачать и запустить, нажав на кнопочку, то я о таких не знаю. Всё зависит от спроса. Тот же проект Fake App. Многие развлекались «пересаживанием» лица Николаса Кейджа на персонажей разных фильмов. За пределами IT-сообщества рекуррентные сети пользователям малоинтересны.

— Но коды в сети есть?

— Огромное количество. Если мы зайдем на такой популярный хостинг для исходного кода, как GitHub, то обнаружим десятки, если не сотни готовых решений для генерации стихотворных текстов. Интерес среди программистов к ним огромный, многим хочется на чем-то потренироваться. Оказывается, тренироваться интереснее всего на стихах. Англоязычные айтишники выбирают Шекспира (а не прозаика-Диккенса), китайские программисты тренируются на своих средневековых произведениях.

— В статье о нейросетях вы писали про обновление коммуникации [4] «поэт—стихотворение—читатель». Можно ли сказать, что новая коммуникация выглядит так: «поэт—текст—разрушение текста—порождение текста—читатель»?

— Я бы не сказал, что это именно разрушение. Если мы переведем символы в нули и единицы, как их понимает компьютер, это не будет разрушением. Информация остается. А вот происходит ли на глубинном уровне разрушение текста…

— Может быть, деконструкция?

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

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

— Здесь мы заходим в область теории компьютерных наук, в которой, как и в гуманитарной науке, есть место разным точкам зрения и классификациям. Я не могу сказать, что глубоко их знаю, в этой сфере я выступаю как практик.  Но если говорить о концептуальной стороне computer science, то сейчас появилась новая идея, гораздо более мощная. Она называется «генеративные нейросети» и представляет собой две НС, которые соревнуются между собой. Одна пытается скрыть данные, вторая их выявить. Это применимо и к игре в шахматы, например: одна сеть пытается выиграть у другой. Нейросети учатся не только на заложенном в них материале, но и на взаимодействии друг с другом. Оказалось, это безумно эффективный способ обучения, который сделал возможным и пресловутый Fake App, и другие подобные разработки.

— Известна шутка, что Каспаров проиграл Deep Blue, потому что заснул во время партии.

— Шутка смешная, но надо уточнить, что Каспаров никогда не играл с нейронными сетями. Deep Blue основан на других технологиях — на этом компьютере работала по нынешним меркам довольно примитивная шахматная программа. Ни одна из современных шахматных программ типа Fritz или Stockfish не основана на нейротехнологиях. Они алгоритмические и в них загружены библиотеки дебютов и т.д., по которым они разыгрывают партии. Хотя недавно появилась нейросетевая программа, которая научилась играть в шахматы самостоятельно. Называется она AlphaZero, и недавно она победила…

— Магнуса?

— Нет-нет, люди давно не играют с шахматными компьютерами, это бессмысленно. Программы побеждают вчистую. Интересна конкуренция между двумя системами. AlphaZero победила Stockfish с разгромным счётом.

— Насколько автоматизирован процесс добавления новых текстов? Участвуете ли вы в их предобработке или это делает машина?

— Самый удобный способ обучить сеть — взять готовый корпус текстов (не по одному!) и начать тренировку сети. Предобработка обычно связана с «прополкой» текста. Скажем, взяли мы материал с сайта. И если я не хочу, чтобы в нейросеть попали элементы меню, реклама, копирайты и прочий мусор, я их убираю. А книжные интервалы и отступы сразу подаются на вход нейросети.

— В нули и единицы нейросеть текст сама переводит?

— Для этого существует буферная обвязка, которая обрабатывает текст так, чтобы он был понятен нейронной сети.

— Еще один вопрос о предподготовке данных. Для читателей поясню, что машина обучается на объектах, каждый из которых имеет ряд признаков. Что в данном случае является признаками и каков их характер? Является ли стихотворение одним из объектов?

— Нет. Стихотворения как такового для нейросети не существует. Нейросеть имеет дело с корпусом текстов. Один уровень большой — это корпус текстов целиком. Другой минимальный, состоящий из отдельных букв. То, о чем вы говорите — про объекты и признаки, — характерно для других способов машинного обучения. Алгоритмов типа «случайный лес» или «дерево принятия решений», когда мы работаем с объектом, самостоятельно расчленяя его на признаки. Нейросеть действует иначе, она идет по каждой букве. Признаков у них нет, кроме одного — одна это буква или другая. Условно в признаки можно записать и всю предыдущую последовательность букв, с которой столкнулась нейросеть.


Пример порождённого нейросетью текста

Борис Орехов обучил нейросеть на корпусе текстов, написанных с 1900-го по 1930-й год. Объем обучающей выборки составил 22 млн. символов. Это минимальный необходимый объем, чтобы компьютер уловил закономерности на уровне грамматики. Но это гораздо больше тех объемов, которые составляют собрания сочинений одного автора.

 Обучившись, сеть выдала такой текст:

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

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





____________________
Примечания:

[1] В харьковско-московском издательстве KNTXT вскоре выйдет первый сборник нейролирики.
[2] Вот один из переводов с русского на монгольский множества букв «у»: «Каковы некоторые из лучших вещей в вашей жизни?». Режим доступа: https://lenta.ru/news/2017/10/28/translate.
[3] Режим доступа: https://geektimes.ru/post/253466.
[4] Режим доступа: http://nevmenandr.net/personalia/54738996.pdf.скачать dle 12.1




Наверх ↑
Поделиться публикацией:
777
Опубликовано 16 май 2018

ВХОД НА САЙТ