Як навчити чат-бота


10

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

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

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

  1. Набір даних, який я використовуватиму для завдання, - це дамп всієї моєї історії фейсбуку та Whatsapp. Я не знаю, наскільки вона буде великою, але, можливо, все ще недостатньо великою. Цільова мова не англійська, тому я не знаю, де швидко зібрати змістовні зразки розмов.

  2. Я буду генерувати векторну думку з кожного речення. Досі не знаю, як насправді; Я знайшов хороший приклад для word2vec на веб-сайті deepplearning4j, але жоден для пропозицій. Я зрозумів, як будуються слова вектори і чому, але не зміг знайти вичерпного пояснення для векторів речень.

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

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

Відповіді:


7

Я б порекомендував почати з читання цього посту в блозі . Ви, ймовірно, можете канібалізувати код, щоб створити RNN, який бере один вислів діалогу, а потім переходить до виведення відповіді на це твердження.

Це була б легка версія вашого проекту, все без векторів слів і думок. Ви просто вводите символи, тому помилки друку не повинні вас турбувати.

Наступним більш складним кроком буде введення векторів слів замість символів. Це дозволить вам узагальнити слова, які не входять до ваших навчальних даних. І це, мабуть, лише незначна зміна коду.

Якщо ви наполягаєте на використанні думок-векторів, вам слід почати читати переклад NN . І, ймовірно, спробуйте отримати заздалегідь підготовлену мережу кодерів. Або попередньо навчіть його на великому корпусі з перекладу для вашої мови.

З невеликим набором тренувань найкраще, що ви можете зробити, це, мабуть, масово перевитрати, поки ваша система не відтворить дослівно дані ваших тренувань. Використання векторів слів дозволить вашій системі дати ту саму відповідь "Я сьогодні побив кота". як ви давали дані тренувань, "я вчора вигнав собаку".

Я не впевнений, що думки векторів матимуть велике значення. Якщо ви отримаєте декодер, щоб навчитися взагалі.


Я вже прочитав першу статтю деякий час тому і відчуваю, що персонажі не є правильним рівнем абстракції. Я не задумувався над тим, щоб перейти з векторами слів один за одним, але, мабуть, це теж цікавий і менш складний спосіб. Я прочитаю документ, який, мабуть, був після мене ...
Тотем

Я знайшов бот-ядро для використання ... Але я застряг у створенні тексту. ai.stackexchange.com/questions/5963/… Що мені цікаво, не дивлячись на вектори та рівень навчання, він все ще не працює як слід ... Я переживаю, що це може бути недоліком бібліотеки, яку я є використовуючи, але я не думаю, що це може бути можливим для розміру шару 300 ... Або необхідна кількість тренувань пов'язана з розміром шару? Будь-яка допомога буде вдячна. Зверніть увагу, що бібліотека використовується.
FreezePhoenix

0

Відповідно до вашої концепції проекту, для початку я б просив вас застосувати деякі методи розробки тестових програм. По-перше, спробуйте створити базу даних менших розмірів, яку ви можете використовувати для обробки невеликої кількості наборів даних, що може дати бажане вдосконалення.

Це означає, що використовуйте цю базу даних для створення організованого дерева в рядку зі своїми даними, як вузли. Отже, якщо бот починає генерувати деякий зворотний зв'язок із бази даних, позначеної пунктами даних із вказаного набору даних. до наступного вузла на дереві.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.