Berdasarkan repo kode TC-Bot dan makalah Sistem Dialog Neural Penyelesaian Tugas End-to-End. Repo ini adalah versi TC-Bot yang disederhanakan, ia bekerja pada tingkat akurasi yang sama, meskipun tidak dapat dibandingkan secara langsung.
Ini menunjukkan cara melatih agen DQN sederhana dengan pembelajaran penguatan mendalam sebagai chatbot berorientasi tujuan menggunakan simulator pengguna sederhana. Kode ini adalah versi sederhana dari TC-Bot oleh MiuLab dengan perbedaan utama adalah kode ini tidak menyertakan komponen NLG atau NLU tetapi hanya melatih manajer dialog. Komponen NL tidak diperlukan untuk memahami bagaimana chatbot GO dilatih dengan DRL dan oleh karena itu tidak diimplementasikan.
Berikut adalah diagram dari makalah untuk TC-Bot, dan mirip dengan alur dialog yang digunakan dalam proyek ini selain komponen LU dan NLG:
Selain menghapus NL, ada perubahan pada kondisi sukses, pengoptimal agen DQN, dan beberapa perubahan kecil lainnya. Oleh karena itu, akurasi tidak boleh dibandingkan secara langsung antara TC-Bot dan repo ini.
Basis datanya adalah tiket film, DB yang sama yang digunakan di TC-Bot. Versi acar dan teks dari data dapat dilihat di direktori data.
Seri tutorial 5 bagian yang menjelaskan dan membahas kode ini secara mendetail dapat ditemukan di media di sini!
Anda dapat melatih agen dari awal dengan python train.py
.
Di konstanta.json Anda dapat mengubah hyperparameter termasuk "save_weights_file_path" dan "load_weights_file_path" (keduanya jalur relatif) untuk masing-masing menyimpan dan memuat bobot. Misalnya, untuk menggunakan bobot yang telah dilatih sebelumnya di folder bobot, tetapkan nilai "load_weights_file_path" ke "weights/model.h5". Bobot untuk model target (tar) dan perilaku (beh) keras disimpan setiap kali tingkat keberhasilan saat ini mencapai titik tertinggi baru.
Anda juga dapat menguji agen dengan python test.py
. Namun pastikan untuk memuat bobot dengan menyetel "load_weights_file_path" di konstanta.json ke jalur relatif dengan bobot perilaku dan target.
Semua konstanta cukup jelas selain "vanila" di bawah agen yang berarti DQN (benar) atau DQN Ganda (salah). Standarnya adalah vanilla DQN.
Catatan: Jika Anda mendapatkan kesalahan unpickling saat melatih atau menguji, jalankan python pickle_converter.py
dan itu akan memperbaikinya
Anda dapat menguji agen dengan memasukkan tindakan Anda sendiri sebagai pengguna (alih-alih menggunakan sim pengguna) dengan menyetel "sim pengguna" yang dijalankan di konstanta.json ke false. Anda memasukkan tindakan dan indikator keberhasilan setiap langkah episode/percakapan di konsol. Format input tindakan adalah: slot maksud/informasi/slot permintaan.
Contoh masukan tindakan:
Selain itu konsol akan meminta indikator apakah agen sudah berhasil (selain setelah input tindakan awal suatu episode). Input yang diperbolehkan adalah -1 untuk kerugian, 0 untuk belum ada hasil, 1 untuk sukses.
Hyperparameter yang digunakan dari konstanta.json.
Tabel episode (setiap 2000 dari 40000) berdasarkan tingkat keberhasilan maksimal suatu periode/frekuensi kereta (setiap 100 episode) hingga episode tersebut: