Repositori ini menampung implementasi makalah "Meningkatkan Pembuatan Respon Neural dengan Perhatian Topikal Sadar Konteks".
THRED adalah sistem pembangkitan respons multi-putaran yang dimaksudkan untuk menghasilkan respons kontekstual dan sadar topik. Basis kode dikembangkan dari repositori Tensorflow NMT.
TL;DR Langkah-langkah untuk membuat agen dialog menggunakan kerangka kerja ini:
conda env create -f thred_env.yml
(Untuk menggunakan pip
, lihat Dependensi)MODEL_DIR
adalah direktori tempat model akan disimpan. Kami menyarankan untuk melatih setidaknya 2 GPU, jika tidak, Anda dapat mengurangi ukuran data (dengan menghilangkan percakapan dari file pelatihan) dan ukuran model (dengan memodifikasi file konfigurasi). python -m thred --mode train --config conf/thred_medium.yml --model_dir
--train_data --dev_data --test_data
python -m thred --mode interactive --model_dir
1 paket hanya diperlukan untuk mengurai dan membersihkan data Reddit. 2 hanya digunakan untuk menguji model dialog dalam mode interaktif baris perintah
Untuk menginstal dependensi menggunakan pip
, jalankan pip install -r requirements
. Dan untuk Anaconda, jalankan conda env create -f thred_env.yml
(disarankan). Setelah selesai dengan dependensi, jalankan pip install -e .
untuk menginstal paket ketiga.
Kumpulan data Reddit kami, yang kami sebut Reddit Conversation Corpus (RCC), dikumpulkan dari 95 subreddit terpilih (tercantum di sini). Kami memproses Reddit selama periode 20 bulan mulai dari November 2016 hingga Agustus 2018 (tidak termasuk Juni 2017 dan Juli 2017; kami menggunakan dua bulan ini bersama dengan data Oktober 2016 untuk melatih model LDA). Silakan lihat di sini untuk detail tentang bagaimana kumpulan data Reddit dibuat termasuk pra-pemrosesan dan pembersihan file mentah Reddit. Tabel berikut merangkum informasi RCC:
Korpus | #kereta | #pengembangan | #tes | Unduh | Unduh dengan kata-kata topik |
---|---|---|---|---|---|
3 putaran per baris | 9,2 juta | 508K | 406K | unduh (773MB) | unduh (2,5GB) |
4 putaran per baris | 4M | 223K | 178K | unduh (442MB) | unduh (1,2GB) |
5 putaran per baris | 1,8 juta | 100K | 80K | unduh (242MB) | unduh (594MB) |
Dalam file data, setiap baris berhubungan dengan satu percakapan yang ucapannya dipisahkan TAB. Kata topik muncul setelah ucapan terakhir, dipisahkan juga dengan TAB.
Perhatikan bahwa file 3 putaran/4 putaran/5 putaran berisi konten serupa meskipun dengan jumlah ucapan per baris yang berbeda. Semuanya diambil dari sumber yang sama. Jika Anda menemukan kesalahan atau ucapan yang tidak pantas dalam data, harap laporkan kekhawatiran Anda di sini.
Dalam file konfigurasi model (yaitu file YAML di conf), jenis penyematan dapat berupa salah satu dari yang berikut: glove840B
, fastText
, word2vec
, dan hub_word2vec
. Untuk menangani vektor penyematan terlatih, kami memanfaatkan Pymagnitude dan Tensorflow-Hub. Perhatikan bahwa Anda juga dapat menggunakan random300
(300 mengacu pada dimensi penyematan vektor dan dapat diganti dengan nilai sembarang) untuk mempelajari vektor selama pelatihan model pembangkitan respons. Pengaturan yang terkait dengan model penyematan disediakan di word_embeddings.yml.
Konfigurasi pelatihan harus ditentukan dalam file YAML yang mirip dengan Tensorflow NMT. Contoh konfigurasi untuk THRED dan baseline lainnya disediakan di sini.
Model yang diimplementasikan adalah Seq2Seq, HRED, Topic Aware-Seq2Seq, dan THRED.
Perhatikan bahwa meskipun sebagian besar parameter bersifat umum di antara model yang berbeda, beberapa model mungkin memiliki parameter tambahan (misalnya, model topikal memiliki parameter topic_words_per_utterance
dan boost_topic_gen_prob
).
Untuk melatih model, jalankan perintah berikut:
python main.py --mode train --config < YAML_FILE >
--train_data < TRAIN_DATA > --dev_data < DEV_DATA > --test_data < TEST_DATA >
--model_dir < MODEL_DIR >
Di
, file kosakata dan file model Tensorflow disimpan. Pelatihan dapat dilanjutkan dengan melaksanakan:
python main.py --mode train --model_dir < MODEL_DIR >
Dengan perintah berikut, model dapat diuji terhadap kumpulan data pengujian.
python main.py --mode test --model_dir < MODEL_DIR > --test_data < TEST_DATA >
Dimungkinkan untuk mengganti parameter pengujian selama pengujian. Parameter tersebut adalah: lebar berkas --beam_width
, bobot penalti panjang --length_penalty_weight
, dan suhu pengambilan sampel --sampling_temperature
.
Antarmuka baris perintah sederhana diterapkan yang memungkinkan Anda berkomunikasi dengan model yang dipelajari (Mirip dengan mode pengujian, parameter pengujian juga dapat diganti):
python main.py --mode interactive --model_dir < MODEL_DIR >
Dalam mode interaktif, model LDA terlatih diperlukan untuk memasukkan kata-kata topik yang disimpulkan ke dalam model. Kami melatih model LDA menggunakan Gensim pada korpus Reddit, yang dikumpulkan untuk tujuan ini. Itu dapat diunduh dari sini. File yang diunduh harus tidak dikompresi dan diteruskan ke program melalui --lda_model_dir
.
Silakan kutip makalah berikut jika Anda menggunakan karya kami dalam penelitian Anda:
@article{dziri2018augmenting,
title={Augmenting Neural Response Generation with Context-Aware Topical Attention},
author={Dziri, Nouha and Kamalloo, Ehsan and Mathewson, Kory W and Zaiane, Osmar R},
journal={arXiv preprint arXiv:1811.01063},
year={2018}
}