Рекуррентные нейросети

Погонял нейросеть на основе кода из http://karpathy.github.io/2015/05/21/rnn-effectiveness/. На примере истории чата из 75000 сообщений, 6MB данных. Увлекает.

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

Пример (выборка не наиболее удачная, выбранная как средне-репрезентативная + чтобы не спалить ничего приватного):

Слава:
Хочется, да :)

Пион:
Я прочувствуешь, что в итоге могут сильнее продолговать.

Пион:
Не

Слава:
штоа?

Пион:
Ничо так. В падику?

Слава:
Перестал это же в толпе с тобой подумать

Пион:
Даа, это твой метод напрягать капса с толкой книги не меняет

Слава:
Ну вот там же.

Пион:
О, она будет апдейтиться в такой жизни очень хорошее

Слава:
А ТЫ? :)

Что тут интересно:

  • Структуру входящего потока в виде «Пион:»/»Слава:» оно просекает почти сразу. Алгоритм инкрементальный, и проходит 30 «эпох» (полных перечитываний текста), на ранних эпохах содержание сообщений не содержит читаемых слов («я центрить назачиваешь аэтри, а КАВ НЕТЕСТА ПВО НИВ У ОЕД ЧТО У ТЕ СЛЕДАЮ УНОДАСЙ РЕМ»).
  • Аналогично со структурой предложений: пробел после запятой, длина слова.
  • Еще до этого оно осознало структуру уникода: изначальный алгоритм работает с байтами, а на выходе получаются символы. То есть \xd0 и \xd1 оно расставляет аккуратно и в тему.
  • Капс, смайлы, точки, сообщения с маленьких букв и с больших (я за этим не очень слежу, статистически правдоподобно, хотя в реальности я более последователен в этом на локальных интервалах.)
  • Склонение слов! В оригинале не было слова «прочувствовать», только «прочувствованное», «прочувствованные» и «прочувствовала» по одному разу.
  • Из наблюдения про склонение слов я делаю вывод, что структуру предложений, согласование существительных, глаголов и прилагательных оно тоже понимает на достаточно продвинутом уровне. В смысле, не просто по принципу цепей Маркова.
  • В примере этого нет, но я много использую скобки, и он обычно не забывает их закрывать.
  • Про авторский стиль: некоторые признаки того, что «Слава» выражается более похоже на меня, а «Пион» более похоже на Пион есть. Я чаще ставлю смайлы и скобки. При этом с родом есть косяки.

PS: Заодно опробовал Spot Instances на EC2. На ноутбуке со встроенной видеокартой недоступна CUDA, и ждать десять часов вчера вечером не хотелось. На EC2 On-Demand g2.2xlarge стоит $0.65/час, а Spot мне обошелся в $0.06/час. (со Spot Instances всегда есть риск, резкий рост цен приведет к потере виртуалки со всеми данными, но он маловероятен был в этом случае.)