Примечание: репозиторий не поддерживается. Если вы хотите заняться техническим обслуживанием, напишите мне в личку.
Заставьте seq2seq для keras работать. А также попробуйте другие реализации seq2seq.
Код включает в себя:
Предупреждение
Статьи
Хорошее фото
Настройка и запуск
git clone https://github.com/nicolas-ivanov/debug_seq2seq
cd debug_seq2seq
bash bin/setup.sh
python bin/train.py
а потом
python bin/test.py
Результаты
Хороших результатов пока не было достигнуто:
[why ?] -> [i ' . . $$$ . $$$ $$$ $$$ $$$ as as as as i i]
[who ?] -> [i ' . . $$$ . $$$ $$$ $$$ $$$ as as as as i i]
[yeah ?] -> [i ' . . $$$ . $$$ $$$ $$$ $$$ as as as as i i]
[what is it ?] -> [i ' . . $$$ . $$$ $$$ $$$ $$$ as as as as as i]
[why not ?] -> [i ' . . $$$ . $$$ $$$ $$$ $$$ as as as as i i]
[really ?] -> [i ' . . $$$ . $$$ $$$ $$$ $$$ as as as as i i]
Я предполагаю, что в этом подходе есть некоторые фундаментальные проблемы:
Поскольку векторы word2vec используются для представления слов, а модель возвращает приблизительный вектор для каждого следующего слова, эта ошибка накапливается от одного слова к другому, и, таким образом, начиная с третьего слова, модель не может предсказать что-либо значимое... Эта проблема может быть преодолеть, если мы заменим наш приблизительный вектор word2vec каждую метку времени «правильным» вектором, то есть тем, который соответствует реальному слову из словаря. Имеет ли это смысл? Однако для этого вам нужно покопаться в коде seq2seq.
Вторая проблема связана с выборкой слов: даже если вам удастся решить вышеупомянутую проблему, если вы будете использовать argmax() для выбора наиболее вероятного слова с каждой временной меткой, ответы будут слишком простыми и неинтересными, например:
are you a human? -- no .
are you a robot or human? -- no .
are you a robot? -- no .
are you better than siri? -- yes .
are you here ? -- yes .
are you human? -- no .
are you really better than siri? -- yes .
are you there -- you ' re not going to be
are you there?!?! -- yes .
Чтобы не ввести вас в заблуждение: эти результаты были достигнуты на другой архитектуре seq2seq, основанной на тензорном потоке.
Чтобы разнообразить выходные результаты, можно использовать выборку с температурой, однако это опять же должно быть сделано внутри библиотеки seq2seq.