Akıllı ChatBot Uygulamaları Geliştirme 2 – LUIS.AI ile Doğal Dil İşleme

Geliştiricilerin son zamanlarda en çok konuştuğu konu olan ChatBot uygulamalarına, zeki özelliklerin nasıl katılacağını göreceğimiz örneklerle devam ediyoruz. ChatBot serimizin ilk yazısını kaçıranlar buradan okuyabilir. Bu yazıda ise Doğal Dil İşleme servisinin entegre edilmesi ve Doğal Dil Anlama servisinin özellikleri gibi mobil uygulamadan web uygulamalarınıza entegre edebileceğiniz farklı özelliklerin detaylarına bakalım.

Şehir-Plaka kodu örneği için ve Doğal Dil İşleme (Natural Language Processing – NLP) servisinin entegre edilme örneği.

Şehir-Plaka Kodu Arama ve LUIS ile Doğal Dil Anlama Ekleme

Bir önceki örnekte Şehir-Plaka kodu arama projesi ile bot framework üzerinde bir chatbot senaryosunda entegre edilmesini incelemiştik.

Bu örnekte de Microsoft Cognitive Services çözümlerinden birisi olan LUIS – (Language Understanding Intelligence Service) ile Natural Language Processing – NLP (Doğal Dil Anlama) için kullanılan bu servisi inceleyeceğiz.

Bu chatbot projesinin tamamına erişmek isterseniz https://github.com/ikivanc/TRPlateBot-LUIS adresinden ulaşabilirsiniz.

Şu anda için 12 dili destekleyen bu servisin desteklediği diller aşağıdaki gibi

  • Brazilian Portuguese
  • Chinese
  • Dutch
  • English
  • French
  • French Canadian
  • German
  • Italian
  • Japanese
  • Korean
  • Spanish
  • Spanish Mexican

Biz de bu örnek’te İngilizce’yi kullanacak ve sonraki örnekte de Türkçe implementasyonun nasıl yapılacağını göreceğiz.

LUIS’in çalışma mantığı

LUIS içerisiden 3 temel konu karşımıza çıkmakta

Utterance Kullanıcıların sisteme sorduğu sorular olarak düşünebiliriz. Bu cümlelerden hangi aksiyonun ve detayın olduğunu çıkarmaya çalışacağımız terim.

Intent Cümlelerden çıkarılacak anlama göre yapmak istediğiniz anlam. Bunu günlük kullanımımızda düşünecek olursa uygulamalarımız için yazdığımız method veya fonksiyonlar olarak düşünebiliriz.

Entities Uttarance içerisinde yakalayabileceğiniz kelime veya kelime grubuna denilmektedir. Genellikle bunu cümle içerisinde yakalayabileceğiniz parametreler olarak düşünebilirsiniz.

Bir örnek üzerinde inceleyecek olursak aşağıdaki örnekler buna örnek olabilir.

LUIS Üzerinde proje oluşturulması

Yeni bir LUIS Projesi oluşturmayı ve adım adım eklemeyi LUIS dökümantasyonundan inceleyebilirsiniz.

Bu örnekte daha önce oluşturulmuş LUIS yapısını import ederek incelemeyi göreceğiz. Bunun için buradan Şehir-Plaka kodu konusundaki json dosyasını kaydedin. PlateNumber.json

Bilgisayarınıza kaydedeceğini bu .json uzantılı dosyayı aşağıdaki gibi my apps bölümün’de Import’a basarak upload edin.

Uygulama upload olduktan sonra aşağıdaki gibi bir dashboard’a erişecek ve BotFramework-LUIS Entegrasyonunda yer alan YOUR_LUIS_APP_ID ‘yi buradan APP ID olarak bulabileceksiniz.

Eğer sağ üst köşeden kendi kullanıcı adınıza tıklarsanız da bu geliştiriciye ait Programatic Key’e ulaşabileceksiniz ve yine bunu BotFramework-LUIS Entegrasyonunda YOUR_SUBSCRIPTION_KEY yerine kullanabileceksiniz.

Şehir adı ve plaka numaralarını Entity olarak kaydettiğimiz yapıları aşağıdan görebileceğiniz gibi

Tüm Intent’lere de ve içerisinde kaç farklı cümle tipi ile eğitildiğine Intent bölümünden erişebilirsiniz.

Herhangi bir intent’e tıklanıldığında aşağıdaki gibi sistemi eğitmek için girilen cümle örneklerini ve tespit edilen entityleri ve hangi intent’e gideceğinin oranlarını aşağıdaki gibi görebilirsiniz.

Şu anda LUIS kullanıma hazırdır, tek yapmanız gereken Train & Test bölümünden bu uygulamayı eğitmek ve ekrandaki sayfadan test etmek.

LUIS’in Bot Framework projesi içerisine entegre edilmesi

MessagesController.cs içerisinde, Post methodunun altına bir önceki implementasyondan farklı olarak methodun altında mesajı işlemek yerine Entity ve Intentleri bulmak üzere LUIS içerisinde anlamlandırılması için oluşturduğumuz class’a gönderiyoruz.

Aşağıdaki kod parçasında da LUIS üzerindeki her bir Intent için aşağıdaki şekilde karşılık gelecek methodlar yazıyoruz. Sorulan cümle LUIS’e gönderildiğinde dönen cevaba göre karşılık gelen method’a düşmektedir.

[LuisIntent(“None”)] Eğer sorulan cümle anlaşılamazsa düşeceği default method.

[LuisIntent(“Help”)] LUIS üzerinde oluşturduğumuz yardım bölümü, yardım isteklerinie göre düşebilirler.

[LuisIntent(“ShowCityName”)] LUIS üzerinde oluşturduğumuz ShowCityName intent’i sayesinde plaka kodu verilerek sorulan şehir isimleri bu methodun içne düşmektedir.

[LuisIntent(“ShowPlateNumber”)] LUIS üzerinde oluşturduğumuz ShowPlateNumber intent’i sayesinde şehir ismi verilerek plaka/şehir kodu sorulduğunda bu methodun içne düşmektedir.

Kod’un emülatör üzerinde çalışması

Bu örnekte de gördüğümüz gibi, komut-cevap şeklinde chatbot’ları bot framework’te geliştirebileceğimiz gibi, Bot’umuza zeki anlayan bir yapı katmak istersek LUIS Servisi bunu sağlayabilecek servislerden. LUIS alt yapısını ister chatbot, ister mobil uygulama isterseniz de masaüstü, web uygulamalarınıza entegre edebilirsiniz.