Chapter 3.
В прошлый раз мы научились находить ближайших соседей слова, а значит, что мы готовы перейти к следующему этапу - генерации текста! Если вы хотите постить смешные твиты, создавать стихи в одно касание по экрану или сокрушаетесь над тем, что любимый автор не успел дописать последнюю книгу, то алгоритмы генерации текстов были придуманы специально для Вас! Все перечисленное и даже больше можно реализовать, немного модифицировав уже известные нам архитектуры! Следуйте за iPavlov!
Прежде, когда мы говорили о skip-gram, мы имели дело с одним входом (слово, для которого ищем соседа) и с одним выходом (самый вероятный сосед). Такой принцип построения нейронных сетей получили название one-to-one. Но если мы захотим сгенерировать целый текст по заданному (условию), то нам необходимо подать на вход уже последовательность слов, и соответственно ожидать на выходе семантически связанное друг с другом сочетание слов. Иными словами, осуществляется принцип many-to-many. Более того, выбор последующего слова для генерации зависит не только от 2-х ближайших соседей, но и от более далеких предшествующих единиц языка, расположенных от данного слова несколько предложений назад. Это значит, что для генерации текстов мы уже не можем использовать в чистом виде знакомую нам модель skip-gram.
Для этой цели были разработаны рекуррентные нейронные сети (RNN), реализованные согласно подходу many-to-many. Они позволяют решать задачи с последовательностями символов или слов, фактически моделируя механизм человеческой памяти.
Попробуйте построить такую сеть с нуля вместе с iPavlov!
Возьмем обычную нейронную сеть, принимающую на вход вектор, умножающую его на матрицу весов и тренирующуюся за счет обновления элементов этой матрицы выдавать нам верные результаты. Сигнал с промежуточного слоя будем сохранять, конкатенировать (объединять) со следующим элементом последовательности и снова передавать на вход той же самой нейронной сети с той же самой матрицами весов. Далее, продолжим этот алгоритм на всю последовательность символов. Таким образом, сеть не только поэтапно обрабатывает все элементы последовательности, но и передает сама себе в будущее некоторое состояние, содержащее информацию “из прошлого”. Рекуррентную сеть можно рассматривать, как несколько копий одной и той же сети, каждая из которых передает информацию последующей копии, связывая информацию с текущей задачей. Результирующий выход сети, естественно, зависит от всего корпуса текста, как мы и хотели. Мы моделируем таким образом явление памяти и механизм, при помощи которого сеть запоминает контекст.
Аналогично можно обучать многослойную нейронную сеть, которая показывает более точные результаты, так как чем “глубже” нейронная сеть, тем лучше предсказания.
В следующий раз мы увидим, как подход many-to-many и RNNs используются для генерации текста! Оставайтесь с нами!
iPavlov NLP:
Часть 1.
iPavlov NLP: о тайнах в мире Искусственного Интеллекта и Цифровизации!
Часть 2.
iPavlov NLP: Word embedding: word2vec или one-hot encoding?
Часть 3.
iPavlov NLP: Recurrent Neural Networks (RNNs)
Часть 4.
iPavlov NLP: RNNs - генерация текста
https://zen.yandex.ru/profile/editor/id/5fb59c3be146c2727a6f5f68/610d1817e54ec275aceba141/edit