Как стать автором
Обновить

Комментарии 18

Сложилось впечатление, что я открыл хорошо оформленный вопрос на stackoverflow.
«информационные нейронные сети» (ИНС)


А бывают «не-информационные»? А как же понятие «искусственные нейронные сети» (ИНС)?
Не выложили исходники?

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

Roman_Kh, попробовать можно, но может быть и такое, что сеть не работает, потому что неверный способ кодирования слов для неё.
Детский сад какой-то. Не хочу никого обидеть, но если человек кодирует слова числами и приводит их к диапазону 0,1, то он как очень, очень плохо знакомился с литературой.

А вообще задача мне кажется весьма сложной для НС. Я бы смотрел в сторону sequence2sequence моделей, которые что-то вроде вход — LSTM — hidden — LSTM — выход. Эмбеддинг скорее всего тоже надо. Ну и тренировать на сотнях тысяч диалогов.
Так тот вариант всего лишь пробный был. Вот как закодировать синонимичность в словах, именно синонимичность, а не факт, что эти слова чаще всего стоят рядом.
Синонимичность неплохо должна быть уловлена эмбеддингом (в случае если она вообще релевантна задаче)
де собака зарыта? Какой подход нужно использовать для получения ИНС, способной запоминать и понимать хотя бы 100 – 200 фраз?

Собака в том, что эта задача не для ИНС в чистом виде, а для Марковских цепей, например…
… у каждой из технологий ткн. «искусственного интеллекта» есть конкретные специфики применения, а попытка реализации чат-бота на ИНС это как сайты на ассемблере делать, в принципе возможно, но один хрен придётся реализовывать всю технологическую цепочку. ИНС на это в принципе способна, вопрос лишь в размерах и времени обучения, но без гарантий что «понимание» обученной сети будет именно тем, что вам требуется…
А зачем использовать нейронные сети при моделировании цепочек? НС подходят для классификационных задач. Для моделирования цепочек лучше использовать скрытые Марковские модели, например, или Conditional random fields (к сожалению, не знаю, как это по-русски). Также не совсем понятно, как можно синтезировать связный текст без привлечения синтаксического и морфологического анализа.
syntaxNet
позволяет преобразовать текст в в иерархическую структуру и назад выделяя морфологические виды слов
Результат как-то не очень. Такого и без ИНС несложно добиться.
300-мерные входные данные и всего 95 обучащюих пар?
Делать самостоятельно маленький текстовый корпус, когда есть готовые и большие?
Взять для работы с последовательностями прямую сеть вместо полагающейся рекуррентной?
Матлаб, а не ставший стандартным в этой области питон (theano/tensorflow etc)?

Необычно.

Но даже при такой реализации word2vec не делает нужных связей между словами с точки зрения русского языка.
Вот классическая реализация ворд2век. Она хорошо выискивает связи. Например, vec(“Madrid”) — vec(“Spain”) + vec(“France”) выдаст ~ vec(“Paris”)

ИНС не могла запомнить более 15 предложений
Обычно стремятся избежать, чтоб нейросеть запоминала обучающие примеры (переобучение). Заставляют генерализовать. Если хочется, чтобы модель быстро запоминала маппинг «вопрос»-«ответ», то это не к обычным нейросетям. Возможно, стоит глянуть one-shot learning.
После этих опытов да, потихоньку перехожу на Python TensorFlow/Keras.
По поводу обучения word2vec: возможно, на большом корпусе он будет лучше работать. А если нужных мне слов в этом корпусе нет? Всё же придётся добавлять самому.
Для диалога в целом: если делать робота с собственными мозгами, базу реплик, даже готовую, как минимум, прочесть придётся.
За one-short learning спасибо. Посмотрю, что этот метод может.
А вообще, хорошо бы и все примеры запомнить, и обобщить достаточно неплохо.
Можете попробовать библиотеку RecurrentJS https://github.com/karpathy/recurrentjs с реализацией рекуррентной нейронной сети на JavaScript. В репозитории есть демо пример character_demo.html использования библиотеки для генерации текстов посимвольно. В своем приложении ChatBot https://play.google.com/store/apps/details?id=svlab.chatbot2 для режима рекуррентная нейронная сеть я использовал эту библиотеку с небольшими изменениями демо примера. Вместо посимвольного кодирования я использовал кодирование по словам. Также использовал библиотеку Az.js https://github.com/deNULL/Az.js/tree/master в качестве морфологического анализатора. Почитать про алгоритм чат бота на основе рекуррентной нейронной сети можно в статье https://habrahabr.ru/post/304284/ или elibrary.ru/item.asp?id=27405153
Спасибо, vladshow! А вы не могли бы привести пример базы для обучения, которую использовали? Всю, конечно, не обязательно, хотя бы небольшой кусочек. И я собираюсь начать эксперименты с кодированием по словам.
Что думаете о проекте: http://www.simbrain.net/?

Интересно. Выглядит красиво, но нет, ещё не попробовал.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории