Как тренировать чатбота

10

Я хотел начать экспериментировать с нейронной сетью, и, как игрушечная проблема, я хотел научить ее общаться в чате, то есть внедрить чат-бота, такого как умный робот. Не так уж и умно.

Я искал документацию и нашел много учебников по общим задачам, но мало по этой конкретной теме. Тот, который я нашел, только показал результаты, не давая понимания о реализации. Те, которые сделали, сделали это довольно поверхностно (на странице документации tenorflow на seq2seq отсутствует imho).

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

  1. Набор данных, который я буду использовать для этой задачи, - это дамп всей моей истории чата на Facebook и WhatsApp. Я не знаю, насколько он будет большим, но, возможно, все еще недостаточно большим. Целевым языком не является английский, поэтому я не знаю, где можно быстро собрать содержательные образцы разговоров.

  2. Я собираюсь генерировать вектор мысли из каждого предложения. Все еще не знаю, как на самом деле; Я нашел хороший пример для word2vec на сайте deeplearning4j, но ни одного для предложений. Я понял, как строятся векторы слов и почему, но не смог найти исчерпывающего объяснения для векторов предложений.

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

  4. Тогда должна быть другая нейронная сеть, которая способна преобразовать вектор мысли в последовательность символов, составляющих предложение. Я прочитал, что должен использовать отступы, чтобы компенсировать различные длины предложений, но я скучаю по тому, как кодировать символы (достаточно ли кодовых точек?).

Тотем
источник

Ответы:

7

Я бы порекомендовал начать с чтения этого поста . Вы, вероятно, можете каннибализировать код, чтобы создать RNN, который принимает один оператор диалога и затем продолжает выводить ответ на этот оператор.

Это была бы простая версия вашего проекта, без векторов слов и векторов мышления. Вы просто вводите символы, поэтому опечатки не должны вас беспокоить.

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

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

С вашим небольшим тренировочным набором лучшее, что вы можете сделать, это, вероятно, массово переодеться, пока ваша система дословно не восстановит ваши тренировочные данные. Использование векторов слов позволит вашей системе дать тот же ответ на вопрос «Я бью кота сегодня». как вы указали в данных тренировки: «Я пнул собаку вчера».

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

BlindKungFuMaster
источник
Я уже читал первую статью некоторое время назад, и я чувствую, что персонажи не на должном уровне абстракции. Я не думал о переходе с векторами слов по одному, но думаю, это тоже интересный и менее сложный способ. Я прочитаю газету, о которой я, вероятно, и мечтал ...
Тотем
Я нашел ядро ​​бота для использования ... Но я застрял на генерации текста. ai.stackexchange.com/questions/5963/… Мне интересно, несмотря на векторы и скорость обучения, она все еще не работает должным образом ... Я беспокоюсь, что это может быть недостатком библиотеки, которой я являюсь используя, но я не думаю, что это могло бы быть возможно для слоя размером 300 ... Или количество необходимых тренировок связано с размером слоя? Любая помощь будет оценена. Обратите внимание на используемую библиотеку.
FreezePhoenix
0

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

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

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

quintumnia
источник