Chatbot‘lar: Bilmeniz gereken her şey

Bir buçuk senedir chatbot’larla içli dışlıyım, geçen sene RPA için chatbot geliştirirken bugün İngiltere’de on binden fazla insanın kullandığı bir arkadaş geliştiriyorum. Chatbot’ların ne yapıp ne yapamadığı konusunda çok fazla bilgi kirliliği olduğunu farkettim, bunun dışında sadece bu konu üstüne çalışmayan şirketlerin çoğunun (in-house) bu konuda en iyi pratikleri bilmediğini gözlemledim, bu yüzden bir yazı kaleme almak istedim.

Öncelikle, chatbot nedir?

Chatbot sohbet edebilen bir sanal asistandır, Alexa, Siri gibi asistanlar chatbot’ların ses ve konuşma tanıyıp sesli cevap verebilen halidir. Bunun dışında chatbot’lar her yerde karşımıza çıkıyor; uçak/otel rezervasyonunda, satış pazarlamada kişiselleştirmede, banka işlemlerinizde, ya da Replika gibi sadece bir arkadaş olarak.

Chatbot’lar beş seviyeden oluşur. Birinci seviye broadcast mesajlar, telefonunuza gelen bir SMS gibi düşünebilirsiniz. Broadcast’lere cevap veremezsiniz. İkinci seviye FAQ (Sıkça Sorulan Sorular) asistanlarıdır, bunlar sizi anlar, cevap verir, ancak verdikleri cevap kişiselleştirilmiş değildir ve bağlamdan yoksundur. Üçüncü seviye ise bağlamdan haberdar bot’lar, (contextual assistants, bağlamın ne olduğuna birazdan değineceğim) üçüncü seviyeye 2019'da ulaştık. Dördüncü seviye ise sizin şu ana kadarki kayıtlarınıza göre size özel mesajlar yazabilen bot’lar, buna şu anda ulaşmaya çalışıyoruz. Beşinci seviye ise tamamen özerk, ve bütün işlemlerinizi yapabilen bot’lar.

Peki chatbot’lar nasıl çalışır?

Eğer makine öğrenmesi hakkında fikriniz varsa sorunun cevabı çok basit, chatbot’lar üç tane görevi yerine getirerek çalışıyor: niyet tanıma (intent recognition), varlık tanıma (entity recognition) ve diyalog yönetimi. Gerçekten klasik bir örnek olarak pizza siparişini örnek verelim, burada bir niyet örneği pizza sipariş etmek olabilir, “Ben bir margerita istiyorum” yazdığınızda asistan direkt sipariş vermek istediğinizi anlayıp size adresinizi soracaktır. Burada bağlam ise yemek siparişi verme üstünedir. Herhangi bir yemek siparişi verdiğiniz uygulamada “İtalyan” dediğiniz zaman burada kastettiğiniz şey yemek olan “İtalyan”dır, millet olan değil. Bağlamın önemi burada ortaya çıkıyor. Gerçek hayatta da konuşmalarımızda farketmeden bağlamı kullanıyoruz. Bunun dışında bir pizza sipariş botunda “margerita”, “domates” gibi kelimeler “varlık”ları işaret eder. Bu varlıkları tanıyarak bütün süreçlerinizi otomatize edebilirsiniz. Son problem de diyalog yönetimidir, bu da sizin niyetlere tanımladığınız cevaplar, kullanıcının veritabanındaki bilgileri, eğer varsa o konuşma senaryosunun eğitim verisinde olup olmamasına bağlıdır. Örneğin, eğer kullanıcının adresi hali hazırda tanımlıysa kullanıcıya adresi sorulmadan direkt hangi ödeme seçeneğini seçeceğini sorabilirsiniz. Bunun dışında “evet” “hayır” gibi cevaplar senaryodan senaryoya göre anlam değiştirir, bu yüzden eğitim verinizde niyet ve varlık dışında diyalog senaryoları da tanımlamanız gerek. Chatbot’larda diyalog yönetimi hem kural bazlı hem de yapay zeka bazlı çalışır, bugün hem niyet/varlık tanımada hem diyalog yönetiminde transformer modellerini kullanıyoruz. Burada Rasa’daki araştırmacıların geliştirdiği bir maskeli transformer modeli var, bu modelde isterseniz dilediğiniz bir dil modelinden ön eğitimli kelime gömülmelerini (pre-trained embeddings) kullanabilirsiniz. Bunu yapmak istemezseniz de eğer yeterli veriye sahipseniz model sizin için sizin verinizden kelime gömülmelerini çıkarıyor, fakat bu model sadece bundan ibaret değil, gerçekten ince düşünülmüş, ve görev odaklı (task-specific) olduğu için hassas ayar çekilmiş (fine-tuned) BERT’ten altı kat daha hızlı çalışıyor. Bu modelden önce klasik LSTM’ler kullanılıyordu. Diyalog yönetiminde ise kural bazlı stratejiler tercih ediliyor, bir örnek vermem gerekirse: niyeti tanıdınız, varlıkları çektiniz, peki bu niyetten sonra kullanıcıdan bilgi almak gerekiyor mu, yoksa niyeti çok düşük olasılıkla tanıdıysak kullanıcıya “bunu mu demek istediniz?” diyip onay almak gerekir mi, bu tarz kurallardan geçirip bir sonraki aksiyona karar vermek gerekiyor. Düşük ihtimalle tanımak, ya da kullanıcıdan kötü geri bildirim almak bizim “fallback” dediğimiz durumu tetikliyor. Gerçek hayatta da bir insanla konuşurken duyamadığımızda, anlamadığımızda “Tekrar eder misin?” “Daha yavaş konuşur musun?” “X mi demek istedin?” gibi sorular sorarız, ya da karşıdakinin söylediğinden ne anladıysak ona karşılık vermeyi seçeriz, chatbot’lar da bu fallback stratejileriyle çalışır. İyi bir fallback yönetimi müşteri deneyimi için çok önemlidir, tekrarlı şekilde “Seni anlamadım, tekrar eder misin” demek ya da sürekli anlamış gibi davranmak gerçekten yapılacak yanlışlardan biri. Bunun yerine bir kez “Seni anlamadım, tekrar eder misin?” diye sorup, tekrar edilen de anlaşılmadıysa insana yönlendirmek daha mantıklı bir çözüm.

Yukarıda benim çalıştığım uygulamayı görebilirsiniz. Burada botu iyileştirmek için yapabileceğiniz küçük şeyler var, kullanıcı sizinle işi bittiği zaman “Şimdi ne yapalım?” “Sana nasıl yardımcı olabilirim?” diyerek konuşmayı sürdürmek bunlardan biri (eğer jenerik konuşmalar hedefliyorsanız). Bunun dışında niyeti anladığınızda niyeti anladığınıza dair cevap vermeniz kullanıcı bağlılığını arttırır, “migrenim var” dediğiniz zaman “migrenin olmasına çok üzüldüm, sana yardım etmeye çalışacağım” şeklinde cevap vermek buna bir örnek.

Tamam, elimde veri var, nereden başlayabilirim?

Hazır bir chatbot framework’ü seçip veriyi ve senaryoları bu framework’e yedirebilirsiniz, çok fazla seçeneğiniz var, açık kaynak bir framework olarak Rasa’yı tercih edebilirsiniz, Google’ın Dialogflow’unu tercih edebilirsiniz, direkt Facebook Messenger kullanabilirsiniz. Rasa’nın iyi tarafı size eğitim, diyalog yönetimi, bot’u yayınladığınız kanallar konusunda esneklik sağlaması. Bu linkte chatbot framework’leri karşılaştırılmış.

Modeli eğittim, ya sonra?

Her model gibi bunu da test etmeniz gerek. Niyet tanımayı test ederken cross validation yaparak F1-Score kullanmanız en mantıklı çözüm, diyalog test ederken ise eğer tamamiyle kural bazlı bir stratejiniz varsa test etmenize gerek yok. Diyalog yönetimini yapay zekaya bırakıyorsanız bir müşteri gibi test etmeniz daha mantıklı.

Bir kanal seçip bot’u yayınlamanız gerek, bu bir web sitesinden tutun da telefon uygulamasına, Whatsapp’a ya da Slack’e bile eklenebilir. Düşük güvenli tahminlerde ve kullanıcının kötü geri bildirim verdiği durumlar için de kullanıcı log’larını tutmanız gerekiyor ki üretim zamanı bot’u iyileştirebilesiniz. Normalde tablo verilerinde modele veriyi devamlı olarak verebilirsiniz, oysa chatbot’ta bu mümkün değil, çünkü niyet yanlış tahmin edilmiş olabilir, ve sağduyu yapay zeka tarafında hala çözemediğimiz bir durum. Bu yüzden her zaman bir insana ihtiyaç olacak. Bir taraftan, her log’u tutmamak kişisel verileri koruma açısından önemli, bu yüzden sadece geri bildirim içeren verileri tutmak buna bir çözüm olabilir.

Peki, chatbot’lar yüzünden (hatta herhangi bir doğal dil işleme algoritması yüzünden) insanlar işlerinden olur mu?

Cevap evet ve hayır. Her endüstri devriminde işler öldü ve yeni işler çıktı, ayrıca henüz fallback senaryoları yüzünden hala insana yönlendirmeye ihtiyaç var. RPA’in gelişmesiyle tekrarlanan işler (canlı yardım dahil) tarihe karışacak gibi duruyor. Diğer tarafta chatbot’lar ve diğer insanlarla etkileşimli işlerde bilişsel sinir bilimcilerden hesaplamalı dil bilimcilere, bilgisayar mühendislerine iş alanı açılıyor. Bugün chatbot’lar şirketleri operasyonel masraflarının %30'undan kurtarıyor ve bu dramatik bir iyileştirme, bu yüzden şirketlerin en çok tercih ettiği yapay zeka uygulamalarından biri.

Okuduğunuz için teşekkürler, görüşmek üzere.

Referanslar:

https://blog.rasa.com/conversational-ai-your-guide-to-five-levels-of-ai-assistants-in-enterprise/

machine learning engineer & data scientist

machine learning engineer & data scientist