Sasaran dan tujuan
Dalam serangkaian artikel, kami mempertimbangkan pengklasifikasi panggilan suara, mengapa diperlukan, cara cepat membawanya ke produktif. Saya akan memberi tahu Anda tentang pendekatan yang akan mengurangi waktu dari menetapkan tugas hingga meluncurkan model dan mendapatkan hasil bisnis.
Untuk artikel ini, Anda dapat melihat laporan di tautan
Bagaimana Methodius menjadi Anna. Seri No. 1
Ayo mulai!
Nama saya Julia, saya seorang insinyur di departemen pembelajaran mesin dari penyedia besar. Sekitar 3.000 panggilan dari pelanggan tiba di pusat panggilan kami per hari. Setiap operator menerima rata-rata 100 panggilan per hari. Jadi apa Tampaknya ini menerima 100 panggilan. Tetapi ada banyak topik panggilan ke perusahaan, operator perlu memahami semua produk, layanan, dan proses perusahaan. Jika kami menerima permintaan pelanggan yang paling umum, maka mereka dapat dikelompokkan ke dalam 40 (!) Topik, dan masih ada aplikasi atipikal yang juga harus dapat diproses.

Karena beragam topik, pelatihan operator memakan waktu tiga bulan. Pertama, Anda perlu mempelajari semua instruksi dan hanya kemudian diizinkan untuk menerima panggilan. Sejumlah besar sumber daya dihabiskan untuk menciptakan operator baru yang kompeten. Maka muncul ide untuk membuat operator sejalan secara bertahap. Artinya, ia akan menerima panggilan hanya pada topik-topik yang telah ia kuasai, seiring waktu meningkatkan keterampilannya, mempelajari topik-topik lain.
Ide bagus, mengapa tidak membuat ... IVR sederhana? (sistem pesan suara pra-rekam yang merutekan panggilan di dalam pusat panggilan menggunakan informasi yang dimasukkan oleh klien pada keypad telepon menggunakan panggilan nada. wiki )

Tetapi hanya sedikit orang yang suka mendengarkan rekaman suara untuk waktu yang lama, untuk menunggu, angka apa yang harus ditekan, tetapi pada akhirnya mereka masih tidak mendapatkan informasi yang diperlukan.
Kami tidak ingin menyiksa pelanggan kami dengan IVR dan kami menetapkan tugas - untuk mengklasifikasikan permintaan pelanggan sesuai dengan kalimat pertama. Dengan demikian, sesuai dengan permintaan yang disuarakan, perutean antar operator akan terjadi.
Data
Operator dukungan teknis pada hasil setiap panggilan telah mengekspos subjek panggilan selama sekitar 10 tahun. Kami mengidentifikasi 16 grup paling banyak, dan markup muncul dari topik ini. Kemudian kami mengunggah rekaman percakapan 120k pada berbagai topik, mengenali rekaman percakapan klien menggunakan Yandex.SpeechKit, dan membaginya menjadi frasa dengan diam. Jadi kami mendapat potongan audio dengan frasa terpisah.
Biarkan saya mengingatkan Anda bahwa tujuan saya adalah untuk mengklasifikasikan permintaan awal klien, jadi hanya frasa pertama yang dipilih dari setiap panggilan. Secara total, data 120k frase pelanggan dalam format teks dengan markup dari operator. Pemrosesan teks standar: menghapus kata-kata penghenti, menormalkan teks, (trik: melampirkan partikel "tidak" ke kata berikutnya) dan data siap. Saya akan memberi tahu Anda lebih banyak tentang pipa pra-pemrosesan kami di artikel lain.
Klasifikasi
Kemudian, setelah menerima teks yang diproses, kami melakukan banyak percobaan, disortir melalui berbagai konfigurasi model dan embeddings.
Tabel dengan perbandingan hasil eksperimen Hasil terbaik diberikan oleh set standar TF-IDF dan regresi logistik. Tabel menunjukkan metrik skor-f. Dalam beberapa percobaan, selain teks, 11 tanda tambahan tentang klien (konteks) ditambahkan pada saat panggilan. Dengan harapan hal ini akan meningkatkan kualitas. Konteks - ini adalah tanda-tanda Boolean, apakah klien memiliki saldo negatif sekarang, apakah perbaikan ditugaskan ke alamat dan yang lain yang menjadi ciri klien saat ini. Tetapi bahkan dengan konteksnya, kualitasnya buruk, hanya 72% yang dicapai.
Analisis kesalahan
Tanpa analisis kesalahan, kualitas klasifikasi tidak dapat ditingkatkan. Setelah memeriksa kasus-kasus di mana model salah, kami mengidentifikasi masalah khas berikut:
- markup buruk
- ketidakseimbangan kelas
- sulit bagi orang untuk merumuskan pemikiran
- pengenalan suara
Markup
Markup sering salah karena fakta bahwa percakapan bisa dimulai dengan satu topik dan berakhir dengan yang lain, dan operator menetapkan subjek panggilan, yang dikatakan di akhir dialog. Mendistribusikan ulang kasus tersebut secara manual dan masalahnya hilang.
Keseimbangan kelas
Ada beberapa pendekatan untuk menyeimbangkan kelas.
Lebih detail- Under-sampling. Penghapusan contoh secara acak dari kelas besar.
- Pengambilan sampel secara berlebihan. Penambahan contoh secara acak dari kelas minor.
- Pengambilan Sampel Minoritas Sintetis. Penambahan contoh secara acak dari kelas terkecil, tetapi sedikit mengubahnya.
Pendekatan mana yang dipilih tergantung pada tugas dan jumlah data. Sebagai bagian dari tugas ini, dimungkinkan untuk menyeimbangkan dataset dengan menghapus contoh-contoh dari kelas frekuensi paling ke nilai median jumlah contoh, tetapi kelas-kelas kecil tetap tidak berubah.
Setelah membaca beberapa frasa pertama, kami perhatikan bahwa 36% dari permintaan berisi teks tidak informatif, misalnya: "Halo, halo" atau "Halo, saya punya pertanyaan." Hanya setelah operator bertanya: "Apa pertanyaan Anda?", Klien merumuskan masalah.
Jadi, salah jika hanya mengambil frasa pertama klien dari percakapan, seseorang tidak dapat langsung merumuskan permintaan. Oleh karena itu, untuk setiap frasa pertama, "kelonggaran" dihitung. Jika model tidak mengaitkan permintaan dengan kepercayaan tinggi ke salah satu kelas, yaitu, semua kelas menerima nilai probabilitas yang sama, maka pesannya tidak informatif dan Anda perlu mengambil frasa kedua. Dan jika kelas sudah ditentukan dengan probabilitas tinggi, maka kalimat pertama sudah cukup.
Di sini pertanyaan yang tepat mungkin muncul, tetapi apa yang harus dilakukan pada produk, karena akan ada pertanyaan yang kurang informasi yang sama. Saya akan membicarakan ini nanti di artikel selanjutnya.
Pengenalan ucapan
Saat menganalisis kesalahan, kami menemukan ketidakakuratan dalam pengenalan teks, yang karenanya kelasnya salah didefinisikan. Misalnya, kata "keseimbangan" kadang-kadang diganti dengan "pisang". Kami memutuskan untuk membandingkan pengakuan dari Yandex dan Google. Google menunjukkan dirinya lebih baik pada data kami, tetapi tidak terlalu banyak membayar untuk itu, harganya hampir dua kali lipat lebih tinggi.
Perbandingan pengenalan suara antara dua sistem. Ringkasan Analisis Kesalahan
Setelah menganalisis dan memperbaiki kesalahan, kami dapat meningkatkan kualitas ke skor rata-rata 84%, kualitas terbaik masih merupakan hasil dari regresi logistik.
Keuntungan kualitas untuk setiap kelas Kesimpulan
Merangkum tahap pertama pengembangan, kita bisa menarik kesimpulan berikut.
Pertama-tama, Anda harus berurusan dengan data dan markup. Anda seharusnya tidak segera melatih jaringan saraf, pada data yang salah tidak akan ada banyak manfaat dari ini. Untuk menghindari pemborosan waktu dan energi, cukup dengan menganalisis kesalahan pada model "sederhana".
Sampai jumpa di seri kedua , di mana kami akan berbicara tentang cara menjalankan model yang terlatih secara produktif. Kami akan mendengarkan contoh bagaimana Methodius robot menerima panggilan, dan kami akan mengerti mengapa ia menjadi Anna.