Chatbot untuk kesehatan mental
Pembaruan (2024)
- Masalah tetap yang terkait dengan skrip Python yang tidak berfungsi karena versi dan metode perpustakaan yang sudah ketinggalan zaman
- Persyaratan tambahan.txt untuk pemasangan dependensi yang mudah
Sebelum Anda menjalankan skrip, pastikan Anda memiliki versi Python <= 3.8 diinstal (lebih disukai Python 3.8; diperlukan untuk menginstal beberapa perpustakaan seperti TensorFlow).
Proyek ini dilakukan untuk proyek penelitian di bawah seorang profesor di universitas saya dengan dataset yang dikeluarkan sendiri. Dataset yang kami gunakan bersifat rahasia; Oleh karena itu, saya telah menggunakan sampel Kaggle Dataset. Saya memutuskan untuk membuat skrip terbuka untuk membuat kompilasi chatbot yang berbeda dari awal di Python karena saya berjuang dengan sumber daya seperti itu selama penelitian saya.
Motivasi di balik proyek ini
Pada 2017, Survei Kesehatan Mental Nasional melaporkan bahwa satu dari tujuh orang di India menderita gangguan mental, termasuk depresi dan kecemasan. Meningkatnya kesadaran kesehatan mental telah menjadikannya perhatian utama perkembangan. Hampir 150 juta orang di India membutuhkan intervensi, di mana kelas rendah dan menengah menghadapi lebih banyak beban daripada orang-orang yang kaya. Proyek ini merupakan upaya untuk membuat kesehatan mental lebih mudah diakses. Agen percakapan ini dapat dilengkapi dengan dokter untuk membuatnya lebih efektif dan bermanfaat.
Klasifikasi chatbots
Chatbots dapat diklasifikasikan berdasarkan atribut yang berbeda -

Penelitian saya terkait dengan pendekatan desain, yaitu, berbasis aturan, pengambilan berbasis, dan berbasis generatif.
- Chatbot berbasis aturan: Chatbot berbasis aturan menggunakan pemetaan atau pencocokan pola berbasis aturan sederhana untuk memilih respons dari set respons yang telah ditentukan. Sistem ini tidak menghasilkan teks baru; Sebaliknya, mereka memilih jawaban dari daftar yang telah ditentukan.
- Chatbot berbasis pengambilan: Chatbot berbasis pengambilan menggunakan ansambel pembelajaran mesin sebagai heuristik untuk evaluasi. Mirip dengan chatbot berbasis aturan, mereka tidak menghasilkan teks baru.
- Chatbots berbasis generatif: Model generatif tidak bergantung pada respons yang telah ditentukan. Mereka datang dengan balasan baru dari awal. Teknik terjemahan mesin biasanya digunakan dalam model generatif, tetapi alih -alih menerjemahkan dari satu bahasa ke bahasa lain, kami "menerjemahkan" dari input ke output (respons). Model generatif digunakan untuk pembuatan karena mereka belajar dari awal.
Gambaran umum bot yang dilatih
Dataset diambil dari Kaggle - Mental Health FAQ. Dataset ini terdiri dari 98 FAQ tentang kesehatan mental. Terdiri dari 3 kolom - pertanyaan, pertanyaan, dan jawaban.
Perhatikan bahwa untuk melatih chatbot pengambilan, file CSV secara manual dikonversi ke file JSON . Karena ini bukan dataset asli yang digunakan untuk penelitian (baca intro), saya hanya menggunakan 20 baris pertama untuk melatih model.
Repositori terdiri dari tiga buku catatan untuk tiga jenis chatbots.
Untuk berbasis aturan, TF-IDF digunakan dengan tokenizer NLTK untuk preproses data. Data yang diproses diuji terhadap hasil yang diharapkan dan kesamaan kosinus digunakan untuk evaluasi.
Untuk berbasis pengambilan, beberapa model pembelajaran mesin dan pembelajaran mendalam dilatih,
- Vanilla RNN
- LSTM
- Bi - LSTM
- Gru
- Model pengambilan CNN dilatih pada file JSON. Untuk semua model di atas, regularisasi digunakan, dan berdasarkan akurasi dan kehilangan pelatihan dan validasi, model terbaik disimpan untuk perbandingan akhir. Diamati bahwa arsitektur CNN memberikan hasil terbaik . Model terdiri dari 3 lapisan - jaringan saraf konvolusional (CNN) + lapisan embedding + dan lapisan yang sepenuhnya terhubung.
Untuk chatbots berbasis generatif, NLP digunakan karena NLP memungkinkan chatbots untuk belajar dan meniru pola dan gaya percakapan manusia . Ini memberi Anda perasaan bahwa Anda berbicara dengan manusia, bukan robot. Ini memetakan input pengguna ke niat, dengan tujuan mengklasifikasikan pesan untuk respons yang mungkin ditentukan sebelumnya.
- Model encoder-decoder dilatih pada file CSV. Endoder-Decoder adalah model SEQ2SEQ, juga disebut model encoder-Decoder menggunakan memori jangka pendek jangka pendek-LSTM untuk pembuatan teks dari corpus pelatihan.
- Apa yang dilakukan model SEQ2SEQ atau Encoder-Decoder dengan kata-kata sederhana? Ini memprediksi sebuah kata yang diberikan dalam input pengguna, dan kemudian masing -masing kata berikutnya diprediksi menggunakan probabilitas kemungkinan kata yang terjadi.
JSON vs. CSV
Selama proyek ini, kebingungan terbesar yang saya miliki adalah mengapa chatbot menggunakan file JSON alih-alih CSV untuk model berbasis pengambilan. Saya telah mendaftarkan beberapa poin yang membuat perbandingan antara kedua jenis file -
- JSON menyimpan data secara hierarkis, yang lebih baik untuk chatbot berbasis pengambilan, mengingat bahwa chatbot akan membutuhkan tag dan konteks.
- Chatbot berbasis pengambilan dilatih untuk memberikan respons terbaik berdasarkan kumpulan jawaban yang telah ditentukan sebelumnya. Respons yang telah ditentukan ini terbatas jumlahnya. Tag perlu disediakan untuk pemetaan input-ke-output. Sederhananya, input yang diberikan oleh pengguna (konteks) diidentifikasi oleh tag yang disediakan. Berdasarkan tag terbaik yang diprediksi, pengguna ditampilkan salah satu respons yang telah ditentukan . Oleh karena itu, menyimpan data semacam ini dalam file JSON lebih mudah karena kekompakan dan struktur hierarkisnya.
- File CSV telah digunakan untuk menyimpan data chatbot generatif. Chatbot generatif tidak memerlukan tag untuk membuat prediksi . Data ini lebih mudah disimpan dalam file CSV karena kami hanya membutuhkan dua kolom - teks input dan teks output. Menambahkan atau menghapus data akan lebih mudah dalam kasus ini dibandingkan dengan file JSON.
Cita cita
Saya ingin meneliti kemungkinan chatbot berbasis generatif lebih lanjut. Model encoder-decoder saat ini tidak dapat menangkap semua dependensi pada lapisan dekoder karena sifat kompak LSTM. Lapisan perhatian dapat ditambahkan setelah lapisan LSTM untuk memecahkan kode setiap output secara dinamis.