iPavlov Media

iPavlov NLP: RNNs - генерация текста

Молодцы, что остались с нами! Мы сможем вместе рассмотреть задачу генерации текста на конкретном примере с использованием нейросети Char-RNN (символьная нейросеть).

Разобьем наш текст на последовательность символов по буквам (причина, по которой нейросеть обладает таким названием). Наш арсенал будет состоять из 33 букв русского алфавита и знаков препинания. Так как размерность такого словаря невысокая, будем использовать One-hot Encoding. В словарь символов внесем “Beginning of Sentence” (BOS), с которого начинается генерация слов, и “End of Sentence” (EOS), на котором завершается весь процесс. Наша задача - получить такую сеть, которая по каждому элементу будем выдавать следующий элемент. На вход даем BOS - хотим получить “h”, даем “h” - хотим получить “e” и так далее, когда дадим EOS - сеть должна ввернуть “o”.
Умножим первый вектор последовательности на входную матрицу , умножим вектор предыдущего состояния, положенный равным нулю для BOS, на свою матрицу, сложим их вместе и получим новый вектор, который отправим сразу в два пункта назначения: в output layer предсказывать следующий символ и в клетку на вход следующей копии нашей нейросети, которая уже имеет обновленные веса. Если тренировку на корпусе текста проводить достаточно долго, то нейросеть сгенерирует связный грамотный текст.
undefined

Интересно проследить, какой текст получается на разных этапах итераций. На 300 итерации появляются реалистичные последовательности символов, на 2000 - уже слова, предложения, абзацы. Максимальная длина контекста, на которой можно проводить тренировку, составляет примерно сотни символов, дальше процесс обрывается и нейросеть уже будет обучаться на новом корпусе текста.
undefined

Рассмотренные нейронные сети получили свое название благодаря своей простоте алгоритма “Vanilla RNNs” и несут собой проблему сильных зависимостей. Так называют ситуацию, когда слова из начала контекста сильно влияют на генерацию далеко стоящих от них слов. Чтобы нейросеть была похожа на человеческую память, на каждой итерации надо с некоторым коэффициентом забывать информацию с предыдущих шагов. Кроме того, возникают трудности с обучением нейросети во время backpropogation (метод обратного распространения ошибки - метод вычисления градиента, который используется при обновлении весов многослойной нейросети), так как чтобы градиент дошел с конца до начала, он должен сотни раз быть умножен на наши матрицы, что требует больших вычислительных мощностей. Чтобы этого избежать, разработчики используют хитрую архитектуру рекуррентных нейронных сетей, которая носит название LSTM (Long-short term memory, долгая краткосрочная память). 
undefined

www.ipavlov.ai 

iPavlov NLP: 
Часть 1.
iPavlov NLP: о тайнах в мире Искусственного Интеллекта и Цифровизации!
https://zen.yandex.ru/media/id/5fb59c3be146c2727a6f5f68/ipavlov-nlp-o-tainah-v-mire-iskusstvennogo-intellekta-i-cifrovizacii-606de08cdcd0546954398081
Часть 2.
iPavlov NLP: Word embedding: word2vec или one-hot encoding?
https://zen.yandex.ru/media/id/5fb59c3be146c2727a6f5f68/ipavlov-nlp-word-embedding-word2vec-ili-onehot-encoding-6076be8f8360a20f2fe69194
Часть 3.
iPavlov NLP: Recurrent Neural Networks (RNNs)
https://zen.yandex.ru/media/id/5fb59c3be146c2727a6f5f68/ipavlov-nlp-recurrent-neural-networks-rnns-610d0f3a6a385b554230dff5
Часть 4.
iPavlov NLP: RNNs - генерация текста
https://zen.yandex.ru/profile/editor/id/5fb59c3be146c2727a6f5f68/610d1817e54ec275aceba141/edit
Articles NLP