Stiker replay cerdas



Halo, Habr! Hari ini kami memulai kembali ICQ . Fungsi utama dari messenger baru ini didasarkan pada teknologi kecerdasan buatan: Stiker cepat dan sistem pesan teks Balas Cepat untuk menjawab pesan yang masuk, menyarankan stiker untuk frasa yang dimasukkan, pengenalan pesan suara dan lainnya.

Pada artikel ini saya akan berbicara tentang salah satunya - Balasan Cerdas. Fitur ini akan menghemat waktu pengguna, karena mereka hanya perlu mengklik stiker yang mereka sukai dari yang ditawarkan. Pada saat yang sama, fitur tersebut akan mempopulerkan penggunaan berbagai stiker dan meningkatkan emosi komunikasi.

Persiapan data


Tugas dari bidang NLP diselesaikan dengan bantuan pembelajaran mesin dan jaringan saraf. Pelatihan ini dilakukan pada data yang disiapkan khusus dari obrolan publik. Pasangan itu digunakan: sebuah fragmen dari dialog dan stiker yang dikirim oleh salah satu pengguna dalam menanggapi pesan terakhir dari teman bicara. Untuk lebih mempertimbangkan konteksnya, sebuah fragmen dialog terdiri dari pesan lawan bicara terakhir yang direkatkan bersama, dan dari pesan-pesan pengguna sebelum mereka. Anda dapat bereksperimen dengan jumlah pesan, misalnya, Google ML Kit menggunakan konteks 10 pesan [1] .

Salah satu masalah yang harus saya tangani adalah frekuensi penggunaan stiker, mulai dari yang paling populer, turun tajam. Selain itu, jumlah total stiker lebih dari satu juta. Gambar di bawah ini menunjukkan frekuensi menurun penggunaan 4000 stiker paling populer. Oleh karena itu, 4000 stiker populer dengan penghapusan beberapa yang paling sering dipilih untuk pelatihan untuk mengurangi distribusi yang tidak merata dari set pelatihan.


Frekuensi penggunaan 4000 stiker paling populer dalam urutan menurun.

Untuk teks, normalisasi dilakukan dalam hal menghilangkan angka, mengulang huruf, karakter tunggal, tanda baca (kecuali tanda tanya dan tanda seru, yang penting artinya), mengurangi huruf menjadi huruf kecil. Secara umum, spesifikasinya adalah di ruang obrolan, pengguna kurang mengikuti tata bahasa.

Pemilihan model


Untuk prediksi, model DSSM siam digunakan, dengan analogi dengan model untuk Balas Cerdas di Mail.ru (arsitektur serupa dijelaskan dalam [2]), tetapi dengan perbedaan tertentu. Keuntungan dari model siam dalam efisiensi untuk inferensi, karena bagian yang sesuai dengan stiker dihitung terlebih dahulu. Untuk menjawab surat, model asli menggunakan sekantong kata-kata n-gram untuk mewakili teks, yang dibenarkan untuk menulis: teks bisa besar, dan kita perlu memahami spesifikasi umum dan memberikan jawaban singkat standar. Dalam hal obrolan dan stiker, teksnya pendek, dan kata-kata individual lebih penting di sini. Oleh karena itu, diputuskan untuk menggunakan embeddings kata individual sebagai fitur dan menambahkan layer LSTM untuk mereka. Gagasan serupa untuk menggunakan lapisan LSTM dalam kasus teks pendek digunakan, misalnya, untuk respons teks di Google Allo messenger [3] dan dalam model prediksi smiley yang sesuai dengan pesan pendek DeepMoji [4]. Gambar di bawah ini menunjukkan model secara skematis.


Model arsitektur.

Dalam gambar, lapisan awal adalah embeddings dari kata-kata yang masuk tokenized (kiri) dan stiker (kanan). Untuk tokenisasi kata, kamus digunakan, yang mencakup 100 ribu kata yang paling populer. Untuk memisahkan pesan dari pengguna yang berbeda, token khusus khusus digunakan. Pelatihan bersifat end-to-end. Setelah menghitung embedding untuk urutan kata-kata, kita pergi ke lapisan LSTM, yang kemudian ditransfer ke lapisan yang terhubung sepenuhnya dengan aktivasi tangen. Sebagai hasilnya, pada encoder kiri pada output kita mendapatkan vektor yang mewakili teks, dan di kanan - vektor yang sesuai dengan stiker. Produk skalar vektor menentukan bagaimana teks dan stiker cocok bersama. Dimensi embeddings, vektor keadaan internal LSTM, dan vektor keluaran diambil menjadi 300.

Fungsi objektif untuk pelatihan terlihat seperti ini:



di mana K adalah ukuran bets,

S (x i , y i ) adalah produk skalar dari vektor yang dihasilkan untuk contoh positif dari pasangan stiker-teks,

S (x i , y j )- produk skalar vektor untuk contoh negatif dari pasangan teks-stiker. Contoh negatif dari pasangan teks-stiker dihasilkan karena pencampuran acak dari pasangan yang benar asli. Karena, untuk stiker universal populer, ada kemungkinan bahwa ketika mencampur lagi ternyata menjadi pasangan yang benar, pada tahap pelatihan ulang, kontrol tambahan digunakan sebagai bagian dari bets sehingga tidak ada teks yang serupa untuk pasangan positif dan negatif dengan satu stiker. Selama percobaan bekerja lebih baik jika contoh negatif menggunakan kurang dari K . Mengingat kebisingan data, pelatihan dalam kelompok besar bekerja lebih baik. Komplikasi model dan penambahan lapisan perhatian tidak memberikan peningkatan yang nyata dalam akurasi, yang, sebaliknya, menunjukkan keterbatasan yang terkait dengan data dan kualitasnya.

Karena kenyataan bahwa pendekatan dengan kamus kata-kata individual, bukan karakter n-gram, dipilih, fleksibilitas model sehubungan dengan kesalahan ketik hilang. Eksperimen dilakukan dengan pelatihan penyisipan fastText, yang dilatih langsung dalam jaringan, sehingga mengurangi dampak kesalahan. Dalam hal ini, pelatihan menjadi lebih buruk, dan penambahan lapisan perhatian sangat membantu. Setelah mempertimbangkan indikator kualitas dan faktor-faktor lain, diputuskan untuk memikirkan model yang lebih sederhana. Dalam kasus ini, masalah salah ketik diselesaikan dengan menggunakan pemeriksa ejaan dalam situasi di mana kata tersebut tidak ada dalam kamus. Dalam mode normal, pemeriksa ejaan tidak digunakan, karena beberapa kata dengan kesalahan adalah fitur obrolan informal.

Mendapat Jawaban


Bagaimana cara kerja model pada tahap inferensi?

Kami menghitung vektor stiker yang dihitung oleh enkoder yang tepat sebelumnya. Pada tahap pemrosesan permintaan, hanya enkoder kiri yang digunakan untuk mendapatkan vektor untuk teks yang masuk. Selanjutnya, Anda perlu mendapatkan daftar stiker dalam urutan menurun dari produk skalar dari teks dan vektor stiker. Ini dapat dilakukan secara langsung dengan mengalikan semua vektor stiker, atau menggunakan algoritma pencarian tetangga terdekat untuk metrik ini. Misalnya, dalam [2] diusulkan untuk menggunakan Kuantisasi Hirarki untuk Pencarian Produk Batin Maksimum (MIPS). Kami menerapkan algoritma pencarian HNSW, dan ini memberikan akselerasi yang signifikan dibandingkan dengan pencarian lengkap.

Membuat jawaban beragam


Tahap berikutnya adalah diversifikasi stiker yang diusulkan, karena sering kali stiker top-end bisa sama.

Tiga stiker yang disarankan untuk frasa "Halo": tanpa diversifikasi dan diversifikasi.

Beberapa opsi untuk diversifikasi telah diuji. Cara termudah adalah dengan memilih stiker N atas, dengan mempertimbangkan batas skor, kemudian pilih stiker atas, dan pilih dua lainnya dengan jarak maksimum antara satu sama lain, sambil membatasi perbedaan yang diijinkan dalam jarak ke stiker atas. Pendekatan ini dapat dikombinasikan dengan menggunakan hasil penandaan stiker secara manual dengan pewarnaan emosional (positif, negatif, netral), dan pilih dari atas N stiker dengan warna yang berbeda, jika ada.

Pilihan lain adalah mengelompokkan stiker dengan embeddings mereka, dan saat mengeluarkan hasil, pilih tidak lebih dari satu stiker dari cluster. Untuk pengelompokan, bundel UMAP + HDBSCAN digunakan. UMAP adalah algoritma pengurangan dimensi efektif baru yang melampaui t-SNE yang sudah terbukti. Reduksi dimensi diterapkan pada dua, dan kemudian digunakan algoritma pengelompokan HDBSCAN. Sekitar 100 cluster diidentifikasi. Tugas ini tidak sepenuhnya diselesaikan secara otomatis, dengan berbagai pengaturan dimungkinkan untuk mencapai pengelompokan hingga 70% stiker, tetapi kemudian revisi manual, diperlukan verifikasi. Oleh karena itu, kami memilih opsi yang lebih sederhana yang dijelaskan di atas, karena hasilnya bagus.


Stiker klaster pada embed.

hasil


Hasilnya, kami mendapat stiker replay cerdas yang sederhana dan efektif, yang menunjukkan kualitas jawaban yang sangat baik. Menurut tes untuk 1.000 frasa berbeda, dari yang sederhana hingga yang relatif kompleks, menurut responden, stiker paling atas disebut sangat cocok di lebih dari 75% kasus. Dalam pengujian 100 frasa yang lebih sederhana dan lebih populer, hasilnya bahkan lebih mengesankan: stiker atas disebut benar-benar cocok di 93% kasus.

Contoh stiker yang ditawarkan oleh model jawaban.

Apa kerugiannya?

Karena ketidakseimbangan dalam dataset pelatihan, beberapa kata memiliki dampak besar yang tidak perlu. Misalnya, kata "cinta" dalam beberapa konteks sering mengarah pada usulan berbagai stiker "romantis", karena ada bias dalam arah ini dalam data pelatihan. Pengenalan bobot tambahan untuk kata dan stiker frekuensi, serta penambahan frase, tidak sepenuhnya menyelesaikan masalah, tetapi sebagian memperbaiki situasi.

Kami tidak berpuas diri, dan proses peningkatan kualitas model kami terus berlanjut, percobaan dilakukan untuk memodifikasi arsitektur dan mekanisme untuk mempersiapkan dan menggunakan data.

literatur


  1. Google updates ML Kit with Smart Reply API for third-party Android and iOS apps. 9to5google.com/2019/04/05/ml-kit-smart-reply
  2. Matthew Henderson, Rami Al-Rfou, Brian Strope, Yun-Hsuan Sung, Laszlo Lukacs, Ruiqi Guo, Sanjiv Kumar, Balint Miklos, and Ray Kurzweil. Efficient Natural Language Response Suggestion for Smart Reply. arXiv:1705.00652v1, 2017.
  3. Pranav Khaitan. Chat Smarter with Allo. ai.googleblog.com/2016/05/chat-smarter-with-allo.html
  4. Bjarke Felbo, Alan Mislove, Anders Søgaard, Iyad Rahwan, Sune Lehmann. Using millions of emoji occurrences to learn any-domain representations for detecting sentiment, emotion and sarcasm. arXiv:1708.00524v2, 2017.

All Articles