Catatan untuk pengunjung:
python3 manage.py runserver
. Jika Anda tidak terbiasa menjalankan flask dengan cara ini, lihat dokumen untuk Flask-Script. Maaf atas ketidaknyamanan ini!Pada tanggal 9 Mei 2017, paket utama proyek ini adalah sebagai berikut:
python3 manage.py runserver
Dari sudut pandang pengguna/pengembang, proyek ini menawarkan antarmuka yang lebih bersih untuk mengutak-atik model urutan-ke-urutan. Hasil yang ideal adalah API chatbot dengan keterbacaan Keras, tetapi dengan tingkat fleksibilitas yang mendekati TensorFlow.
Di sisi 'klien', bermain-main dengan parameter model dan menjalankannya semudah membuat file konfigurasi (yaml), membuka interpreter python, dan mengeluarkan beberapa perintah. Cuplikan berikut, misalnya, adalah semua yang diperlukan untuk memulai pelatihan pada dataset cornell (tentu saja setelah mengunduhnya) dengan konfigurasi Anda:
import data
import chatbot
from utils import io_utils
# Load config dictionary with the flexible parse_config() function,
# which can handle various inputs for building your config dictionary.
config = io_utils . parse_config ( config_path = 'path_to/my_config.yml' )
dataset = getattr ( data , config [ 'dataset' ])( config [ 'dataset_params' ])
bot = getattr ( chatbot , config [ 'model' ])( dataset , config )
bot . train ()
Ini hanyalah salah satu cara untuk berinteraksi dengan proyek. Misalnya, pengguna juga dapat meneruskan parameter melalui argumen baris perintah, yang akan digabungkan dengan file konfigurasi apa pun yang mereka tentukan juga (argumen baris perintah diutamakan jika terjadi konflik). Anda juga dapat meneruskan lokasi chatbot yang disimpan sebelumnya untuk melanjutkan pelatihan atau memulai percakapan. Lihat main.py
untuk lebih jelasnya.
Corpus Dialog Ubuntu: pendekatan pra-pemrosesan dapat dilihat di ubuntu_reformat.ipynb di folder notebooks. Tujuan penggunaan kumpulan data ini adalah pemeringkatan respons untuk dialog multi-putaran, namun saya telah mengambil pendekatan yang agak sederhana dengan mengekstraksi pasangan ucapan dan menafsirkannya sebagai kalimat tunggal ke respons tunggal, yang sesuai dengan masukan untuk encoder dan decoder , masing-masing, dalam model.
Dialog Film Cornell: Saya memulai dengan versi korpus Cornell yang telah diproses sebelumnya, dan membuat sedikit modifikasi untuk mengurangi kebisingan.
Komentar Reddit: Kira-kira. 1,7 miliar komentar reddit. Saat ini sedang mengerjakan pra-pemrosesan dan mengurangi kumpulan data besar ini ke format yang sesuai untuk melatih model percakapan. Akan memposting tautan unduhan kumpulan data yang telah diproses setelah selesai!
DynamicBot: menggunakan pendekatan yang lebih berorientasi objek yang ditawarkan oleh kelas khusus di model_components.py. Hasilnya adalah penyematan gabungan batch online yang lebih cepat dan pendekatan chatting yang lebih alami. Itu menggunakan API python baru (fantastis) dalam rilis TensorFlow 1.0, terutama Dynamic_rnn. Ini juga mematuhi praktik pelingkupan variabel yang baik dan konvensi tensorflow umum yang saya amati dalam dokumentasi dan kode sumber, yang memiliki efek samping yang bagus seperti visualisasi grafik yang bersih di TensorBoard.
SimpleBot: Model bucket yang disederhanakan berdasarkan model 'ChatBot' yang lebih rumit di bawah. Meskipun kurang fleksibel dalam menyesuaikan partisi bucket dan menggunakan softmax yang jarang untuk seluruh kosakata dibandingkan pengambilan sampel, implementasinya jauh lebih transparan. Itu menggunakan tf.contrib secara minimal, dibandingkan dengan ChatBot, dan kurang lebih diimplementasikan dari "awal", dalam artian terutama mengandalkan metode tensorflow dasar. Jika Anda baru mengenal TensorFlow, mungkin berguna untuk membaca implementasinya untuk memahami konvensi umum dalam pemrograman tensorflow, karena ini adalah hasil dari saya membaca kode sumber semua metode di ChatBot dan menulis metode saya sendiri yang lebih ringkas interpretasi.
ChatBot: Versi model yang diperluas yang dijelaskan dalam tutorial TensorFlow ini. Karakteristik arsitektur: masukan yang dikelompokkan, dekoder menggunakan mekanisme perhatian (lihat halaman 69 catatan saya, dan masukan disematkan dengan fungsi sederhana yang disediakan di perpustakaan tf.contrib. Juga menggunakan contoh fungsi kehilangan softmax untuk memungkinkan ukuran kosakata yang lebih besar (halaman 67 catatan). Komentar tambahan: karena sifat model yang dimasukkan ke dalam keranjang, dibutuhkan waktu lebih lama untuk membuat model dibandingkan dengan yang lain. Hambatan utama tampaknya adalah ukuran keranjang yang terbesar dan bagaimana operasi gradien dibuat berdasarkan pada ukuran ember.
Direktori halaman web menampilkan cara sederhana dan hemat ruang untuk men-deploy model TensorFlow Anda di aplikasi Flask. Model 'dibekukan' -- semua komponen yang tidak diperlukan untuk chatting (misalnya pengoptimal) dihapus dan semua variabel yang tersisa diubah menjadi konstanta. Saat pengguna mengklik nama model, REST API untuk model tersebut dibuat. Ketika pengguna memasukkan kalimat ke dalam formulir, permintaan POST (AJAX) dikeluarkan, di mana responsnya adalah kalimat respons chatbot. Untuk detail selengkapnya tentang REST API, lihat views.py.
Aplikasi Flask mengikuti praktik terbaik, seperti penggunaan cetak biru untuk membuat instance aplikasi, database yang berbeda tergantung pada lingkungan aplikasi (misalnya pengembangan atau produksi), dan banyak lagi.
Di sini saya akan membahas lebih detail tentang bagaimana model dibuat dan bagaimana model tersebut dapat divisualisasikan. Bagian ini masih dalam proses dan belum selesai.
Daripada menggunakan argumen feed_dict
untuk memasukkan kumpulan data ke model, argumen ini jauh lebih cepat menyandikan informasi masukan dan teknik pra-pemrosesan dalam struktur grafik itu sendiri. Artinya, kami tidak memberikan apa pun kepada model pada waktu pelatihan. Sebaliknya, model ini menggunakan rangkaian antrean untuk mengakses data dari file dalam format protobuf Google, mendekode file menjadi rangkaian tensor, mengelompokkan dan memasukkan urutan secara dinamis, lalu memasukkan kumpulan ini ke dekoder penyematan. Semua dalam struktur grafik. Selanjutnya pemrosesan data ini dikoordinasikan oleh beberapa thread secara paralel. Kita dapat menggunakan tensorboard (dan praktik terbaik untuk pelingkupan variabel) untuk memvisualisasikan jenis pipeline ini pada tingkat tinggi.
(Deskripsi lebih lanjut segera hadir!)
Banyak penelitian telah dilakukan pada model ini, dan saya telah mendokumentasikan catatan saya pada makalah paling "penting" di sini, di bagian terakhir catatan pembelajaran mendalam saya di sini. Catatan tersebut juga mencakup bagaimana saya mencoba menerjemahkan materi dari makalah ke dalam kode TensorFlow. Saya akan memperbaruinya seiring dengan ide-ide dari lebih banyak makalah yang masuk ke dalam proyek ini.
Dokumen:
Sumber Daya Daring: