Ini adalah chatbot yang dilatih oleh seq2seq dan pembelajaran penguatan .
seq2seq
Seq2seq adalah model klasik untuk pembelajaran terstruktur, input dan outputnya keduanya berurutan
Model vanilla seq2seq dijelaskan dalam makalah NIPS '14 Sequence to Sequence Learning dengan Neural Networks, encoder dan decoder dipisahkan
Model seq2seq dalam repositori ini dibuat dengan 2 LSTM, mirip dengan yang dijelaskan dalam makalah ICCV '15 Sequence to Sequence -- Video to Text, encoder dan decoder memiliki bobot yang sama
RL
Setelah melatih chatbot dengan epoch yang cukup, saya menggunakan teknik RL yang disebut gradien kebijakan untuk lebih meningkatkan chatbot
Dengan melakukan ini, chatbot dapat menghasilkan respon yang lebih menarik terkait fungsi reward
Fungsi penghargaan saya mirip dengan yang dijelaskan dalam makalah EMNLP '16 Pembelajaran Penguatan Mendalam untuk Generasi Dialog
Izinkan saya menunjukkan beberapa hasil chatbot:
Hasil 1 (A & B keduanya merupakan chatbot terlatih)
A: Bisakah kamu membantuku?
B: Apapun.
A: Saya ingin kamu menjadi seorang ayah.
B: Tentu saja.
A: Maafkan aku, aku tidak bermaksud kasar, tapi.
B: Jangan mengerti, setidaknya sebanyak yang saya bisa.
Hasil 2 (A & B keduanya merupakan chatbot terlatih)
J: Saya tidak melakukannya! Saya tidak punya pistol!
B: Kamu pembohong. Anda masih ingin mendapatkan uang Anda kembali.
J: Ada yang salah dengan kebenarannya.
B: Aku tidak mau uang sedikit saja, aku tidak bisa mengambil begitu saja.
J: Ada apa.
B: Dengarkan aku. Saya takut sekarang.
A: Ah, kamu akan membutuhkan semua uang. Aku butuh bantuanmu.
Hasil 3 (A & B keduanya merupakan chatbot terlatih)
A: Saya lupa membeli Coca-Cola.
B: Ada sesuatu yang tersangkut di kepala.
A: Tidak apa-apa, menurutku itu cukup umum di banyak hal.
B: Maksudku, kita sudah bersama sejak kecil.
A: Alasannya lebih banyak lagi.
B: Bukan dia, itu salahnya dan dia buta karena Tuhan.
A: Dan itu adalah cerita yang aneh.
Anda dapat menemukan lebih banyak hasil dari chatbot di direktori ini
Konfigurasi jaringan saraf dari hasil tersebut dijelaskan dalam nama file
Apakah Anda takjub dengan hasil chatbot tersebut? :D
Anda dapat membuat dialog luar biasa itu sendiri!
Ikuti saja petunjuk di bawah ini:
instalasi pip -r persyaratan.txt
./script/download.sh
./script/simulate.sh <JALAN KE MODEL> <JENIS SIMULASI> <FILE MASUKAN> <FILE KELUARAN>
<JALAN KE MODEL>
untuk menghasilkan dialog seq2seq, ketik " model/Seq2Seq/model-77 "
untuk menghasilkan dialog RL, ketik " model/RL/model-56-3000 "
<JENIS SIMULASI>
bisa 1 atau 2
nomor tersebut mewakili # kalimat sebelumnya yang dipertimbangkan chatbot
jika Anda memilih 1, chatbot hanya mempertimbangkan kalimat terakhir
jika Anda memilih 2, chatbot akan mempertimbangkan dua kalimat terakhir (satu dari pengguna, dan satu lagi dari chatbot itu sendiri)
<MASUKKAN FILE>
Lihatlah hasil/sample_input_new.txt
Ini adalah format input chatbot, setiap baris adalah kalimat awal dialog.
Anda cukup menggunakan file contoh untuk kenyamanan.
<FILE KELUARAN>
file keluaran, ketikkan nama file apa pun yang Anda inginkan
Jika Anda ingin chatbot hanya menghasilkan satu respons untuk setiap pertanyaan
Ikuti petunjuk di bawah ini:
instalasi pip -r persyaratan.txt
./script/download.sh
./script/run.sh <JENIS> <FILE MASUKAN> <FILE KELUARAN>
<JENIS>
untuk menghasilkan respons seq2seq, ketik " S2S "
untuk menghasilkan respons pembelajaran penguatan, ketik " RL "
<MASUKKAN FILE>
Lihatlah hasil/sample_input_new.txt
Ini adalah format input chatbot, setiap baris adalah kalimat awal dialog.
Anda cukup menggunakan file contoh untuk kenyamanan.
<FILE KELUARAN>
file keluaran, ketikkan nama file apa pun yang Anda inginkan
Saya melatih chatbot saya dengan python2.7.
Jika Anda ingin melatih chatbot dari awal
Anda dapat mengikuti petunjuk di bawah ini:
Lihatlah python/config.py, semua konfigurasi untuk pelatihan dijelaskan di sini.
Anda dapat mengubah beberapa hyper-parameter pelatihan, atau hanya mempertahankan yang asli.
Saya menggunakan Cornell Movie-Dialogs Corpus
Anda perlu mengunduhnya, mengekstraknya, dan memindahkan semua file *.txt ke direktori data/
Kemudian unduh beberapa perpustakaan dengan pip:
instalasi pip -r persyaratan.txt
./script/parse.sh
./script/train.sh
Mari kita tunjukkan beberapa hasil model seq2seq :)
./script/test.sh <JALAN KE MODEL> <INPUT FILE> <OUTPUT FILE>
Dan tampilkan beberapa hasil dialog dari model seq2seq!
./script/simulate.sh <JALAN KE MODEL> <JENIS SIMULASI> <FILE MASUKAN> <FILE KELUARAN>
<JENIS SIMULASI>
bisa 1 atau 2
nomor tersebut mewakili # kalimat sebelumnya yang dipertimbangkan chatbot
jika Anda memilih 1, chatbot hanya akan mempertimbangkan ucapan pengguna
jika Anda memilih 2, chatbot akan mempertimbangkan ucapan pengguna dan ucapan terakhir chatbot
Anda perlu mengubah parameter training_type di python/config.py
'normal' untuk pelatihan seq2seq, 'pg' untuk gradien kebijakan
Anda harus berlatih terlebih dahulu dengan 'normal' untuk beberapa epoch hingga stabil (setidaknya 30 epoch sangat disarankan)
lalu ubah metodenya menjadi 'pg' untuk mengoptimalkan fungsi reward
./script/train_RL.sh
Saat pelatihan dengan gradien kebijakan (pg)
Anda mungkin memerlukan model terbalik
model terbalik juga dilatih oleh kumpulan data dialog film Cornell, tetapi dengan sumber dan target dibalik.
Anda dapat mengunduh model terbalik terlatih dengan
./script/download_reversed.sh
atau Anda bisa melatihnya sendiri
Anda tidak perlu mengubah pengaturan apa pun tentang model terbalik jika Anda menggunakan model terbalik yang telah dilatih sebelumnya
Mari kita buat beberapa hasil model RL, dan temukan perbedaannya dari model seq2seq :)
./script/test_RL.sh <JALAN KE MODEL> <INPUT FILE> <OUTPUT FILE>
Dan tunjukkan beberapa hasil dialog dari model RL!
./script/simulate.sh <JALAN KE MODEL> <JENIS SIMULASI> <FILE MASUKAN> <FILE KELUARAN>
<JENIS SIMULASI>
bisa 1 atau 2
nomor tersebut mewakili # kalimat sebelumnya yang dipertimbangkan chatbot
jika Anda memilih 1, chatbot hanya mempertimbangkan kalimat terakhir
jika Anda memilih 2, chatbot akan mempertimbangkan dua kalimat terakhir (satu dari pengguna, dan satu lagi dari chatbot itu sendiri)
OS: CentOS Linux rilis 7.3.1611 (Inti)
CPU: Intel(R) Xeon(R) CPU E3-1230 v3 @ 3,30GHz
GPU: Geforce GTX 1070 8GB
Memori: 16GB DDR3
Python3 (untuk data_parser.py) & Python2.7 (untuk yang lain)
Po-Chih Huang / @pochih