Doğal Dili Anlama : Chatbot Nasıl Anlar ?
Merhabalar herkese, yine bir chatbot yazısıyla karşınızdayım. Bir önceki yazımda size chatbotun ne olduğunu anlatmıştım. İncelemeyenler, gözünden kaçanlar için buraya bırakıyorum. Bugün size chatbotlarda kullanılan yöntemlerden bahsedeceğim ve doğal dili anlama yöntemi hakkında bilgiler vermeye çalışacağım.
Hatırlarsanız Facebook 2017 yılında Alice ve Bob adında iki tane chatbot çıkartıp birbirleriyle konuşturmuştu. Bir süre sonra Facebook, bu iki chatbotun kendi aralarında konuşurken yeni bir dil çıkardıklarını görünce direkt olarak onları kapattı. Aslında Alice ve Bob yeni bir dil çıkarmadılar, onlar tıpkı iki bebek gibi kendi aralarında sadece kendilerinin anlayabildiği şekilde konuşuyorlardı. Peki bunu nasıl yaptılar?
Makinelerin insan dilini anlayabilmeleri için geliştirilen metodlara NLP (Doğal Dil İşleme) denmektedir. NLP (Natural Language Processing) metodlarının içerisine girmeye kalkarsam bu yazının sonu gelmeyecektir ancak size çok kısa bir şekilde aktarmaya çalışacağım. NLP metodları kullanıcıların chatbota yazmış olduğu cümleyi kullanılan dile göre bazı işlemlerden geçirmektedir. Bu işlemler sonrasında yazılan cümle artık ilk yazıldığı gibi chatbota aktarılmamaktadır. Örneğin “kredi kartımın borcunu ödeyeceğim” cümlesini ele alalım ve bu cümlenin bir banka chatbotuna yazıldığını düşünelim. Bu cümle chatbota kelimelerin kök halleriyle gitmektedir. Çünkü makineler için zaman kavramı yoktur yani “ödeyeceğim” ile “ödeyecektim” chatbot için aynı anlamı ifade etmektedir. Bu doğrultuda cümle “kredi kart borç ödemek” olarak dönecektir. Buna göre de belirli sınıflarla etiketlenmiş niyetler arasından en doğrusuyla eşleşip cevabı kullanıcıya verecektir chatbot. Tabi cümlelerde yer alan kelimelerin doğru kelime köküne ayrılması için eğitim verisinin doğru ve geniş olması çok önemli. Çünkü Türkçe sondan eklemeli dil olduğu için bir çok programlama dilinde Türkçe desteği maalesef yok. Chatbotla uğraşan kişilerin/kurumların kendi NLP algoritmalarını oluşturmaları gerekmektedir. Bu konu hakkında daha fazla bilgi almak isterseniz Zemberek NLP’yi araştırabilirsiniz.
Bazı NLP yöntemlerinden bahsetmek gerekirse;
Sentiment Analysis : Türkçesi duygu analizi olan bu yöntem, girilen metnin konuya olan tutumunun olumlu mu, olumsuz mu veya tarafsız mı olduğunun belirlenmesi işlemidir
Normalization : Metinde yer alan yazım hatalarını giderme işlemlerine normalizasyon denir. Chatbot, kullanıcının yazım hatalarını bulmaya ve doğru kelimeyi tahmin etmeye çalışır.
Tokenization : Yapısal olmayan veriyi cümlelere, daha sonra da kelimelere parçalama işlemidir. Elde edilen belirteçleri bir dizin içine alarak tokenları elde etme işlemedir. Burada noktalama işaretlerini, sayı ve diğer sembolleri doğru ve tutarlı işleme oldukça önemlidir.
Named Entity Recognition : Kişi, yer, organizasyon gibi önceden tanımlanmış kategorilerin metin dokümanları üzerinden çıkarılma işlemidir. Bilgi çıkarımının(Information Extraction) bir alt dalı olup makine çevirilerinden tutun da duygu analizine kadar birçok Doğal Dil İşleme probleminde kullanılmaktadır.
Facebook’un chatbotları kendi aralarında konuşurken bizlerin anlayamayacağı dilde konuşmaları kendi aralarında yeni bir dil bulmalarından değil sistemde gerçekleşen bir hatadan kaynaklanıyordu. Peki chatbotlar kendilerine yazılan bir cümleyi nasıl algılayıpda doğru cevabı veriyorlar. Bunun için üç ayrı yöntem bulunmaktadır. Bunlar anahtar kelime yöntemi, kurallarla hareket ve doğal dili anlama yöntemleridir.
Bu yöntemler kullanılarak yapılan üç ayrı chatbot modeli vardır. Bunlar;
- Kelime Bazlı Chatbotlar,
- Kural Bazlı Chatbotlar,
- Doğal Dili Anlama (Natural Language Understanding)
Kelime Bazlı Chatbotlar
Kelime bazlı chatbotlar için arkasında herhangi bir doğal dil işleme metodu bulunmamaktadır. Kelime bazlı chatbotlar, kelimelerin birçok yazım şekli chatbotu tasarlayanlar tarafından veritabanına eklenerek kullanıcının bu kelimelerden herhangi birini yazdığında hazır cevaplar döndüren sistemlerdir. Çok fazla efektif olmayan bu sistemin tasarlanması da zordur çünkü bir kelimenin birçok yazımı vardır. Bunların tamamını veritabanına eklemek çok uzun ve maliyetli bir iştir bu nedenle çok fazla tercih edilmemiştir.
Kural Bazlı Chatbotlar
Kural bazlı chatbotlar da kendi kendine öğrenebilen sistemler değillerdir fakat kelime bazlı chatbotlara göre daha başarılıdırlar. Belirli bir karar ağacına oturtulmuş olan bu chatbotlar kullanıcılara seçenekler sunarak ilerler. Kullanıcıyı daha çok seçeneklerle isteğine yönlendirerek sonuca ulaşırlar. Tasarımının kolay olması, belirli bir modele bağlı olarak çalışmaması ve akışında herhangi bir sorun olmadan ilerlemesi chatbot tasarlayanlar açısından daha çok tercih edilmektedir. Örnek vermek gerekirse ilk yazımda bahsetmiş olduğum ELIZA botu kural tabanlı bir chatbottur.
Doğal Dili Anlama (NLU)
Doğal dili anlama ile oluşturulan chatbotlar diğerlerine göre daha kapsamlı ve karmaşık bir yapıya sahiptir. NLU yapısına sahip chatbotların temelini NLP oluşturmaktadır. Bu yapıya sahip chatbotlar kullanıcının girdisini anlayarak doğru cevabı vermeye çalışır. Bu yönteme intent recognation denmektedir. Bu yöntemde, kullanıcının yazdığı cümlenin chatbot için belirlenen konulardan hangisiyle ilişkili olduğu saptanmaya çalışılmaktadır. Örneğin “yemek siparişi vermek istiyorum” cümlesinin bir istek cümlesini olduğunu ve bu cümleyi doğru niyetle (intentle) eşleştirmeye çalışmaktadır. Diyelimki kullancı chatbota “hamburger siparişi vermek istiyorum” yazmış olsun. Burada asıl niyetin hamburger istemek olduğunu anlamaya çalışırken kullanılan yöntem ise content recognationdır. Bu yöntem sayesinde chatbot kullanıcının önce yemek siparişi daha sonra asıl isteğininin hamburger siparişi vermek istediğini anlamaktadır. Böylece kullanıcıyı doğru bir şekilde isteği sonuca götürebilmektedir.Doğal dili anlama yönteminde kullanılan diğer kavramlar ise şöyle;
Entity : Chatbotta belirli özelliklerin belirtildiği yapılardır.
Intent : Chatbotun hangi konuları içerdiğini, hangi niyetlere cevap vermesi istendiği yapılardır. Örnek vermek gerekirse bir banka botunda hesap açma, hesap kapatma, kredi kartı alma , kredi isteme gibi intentler yer alabilir.
Context : Kullanıcıların eski sohbetlerinden gelen bilgileri tekrar kullanarak bir önceki işleme devam etmelerini sağlayan yapıdır. Örneğin yemek siparişi veren bir kullanıcının siparişini tamamlarken ücret ödeme noktasında siparişe tatlı ekleyip tekrar ödeme ekranına geçtiğinde önceki siparişlerinin üstüne tatlı ücretinin de eklenip işlemin devam etmesi gibi.
Son zamanlarda NLU hizmeti veren bir çok servis var.En önemlilerini söylemek gerekirse;
- IBM Watson Conversation API.ai API
- Microsoft LUIS
- Amazon Lex
- Recast.ai API
- wit.ai API
- SNIPS API
İleride sizlerle bu servislerden birini kullanarak bir chatbot tasarlayacağız. Şimdilik yazımı burada sonlandırıyorum bir sonraki yazımda görüşmek üzere, veriyle kalın.
Kaynaklar