YZ03: Türk Yapay Zekası Cognitus’un Python ile Kullanımı

YZ00: Yapay Zeka’ya Giriş

YZ01: Derin Öğrenme ile Resimdeki Objeyi Tanıma

YZ02: Clarifai API ile Adrina Lima’yı Tanıyan Yapay Zeka Uygulaması

YZ03: Türk Yapay Zekası Cognitus’un Python ile Kullanımı

Merhabalar yapay zeka pratik örnekler serimize Türk yapay zekası Cognitus ile devam ediyoruz. Etiya tarafından Yıldız Teknik Üniversitesi Teknopark‘ta geliştirilen Cognitus doğal dil işleme alanında sanıyorum Türkiye’den çıkan ve API’sini paylaşan ilk yapay zeka uygulaması.

Cognitus Ne İşe Yarar?

cognitus.ai sitesinde yer alan bilgilere göre Cognitus ile aşağıdaki işlemleri yapabiliyoruz.

Varlık İsmi Tanıma: Cognitus ile e-postalarınızda, haberlerinizde, veri akışlarınızda, chat konuşmalarınızda geçen özel isimleri, nesneleri, markaları, tarihleri tanımlayabilirsiniz.
Duygu Analizi: Sayfanıza yapılan yorumlarda, ürününüzle ilgili değerlendirmelerde kullanıcıların duygusu da var. Cognitus Duygu Analizi, bu içerikleri sizler için ayrıştırır.
Konu Belirleme: Yazılarınızda kelimelerden daha fazlası var. Müşterinizin sesini duymak için yazılarınızda geçen konulara ve anahtar kelimelere Cognitus ile ulaşabilirsiniz.
Metin Sınıflandırma: Kendi belirlediğiniz kategorileriniz var ama doğal dil işleme uzmanlığınız yok mu? Cognitus’a verilerinizi yükleyin, otomatik olarak öğrenme modeliniz hazırlansın ve size özel API’ye ulaşmaya başlayın.

Cognitus’a Üye Olma

İlk önce https://api.cognitus.ai/tr/user/account/register/ adresinden Cognitus’a kayıt oluyoruz. Kayıt işleminin ardından https://api.cognitus.ai/tr/user/login/ adresinden siteye giriş yapıyoruz. Siteye giriş yaptıktan sonra, üst menüde yer alan API butonuna tıklıyoruz. Sol menüde “Sınıflandırma“, “Duygu Analizi” ve “Metin Sınıflandırma“yı görebilirsiniz. Bunlar Cognitus’un sizin için yapabileceği şeyler.

KODLAMA

Cognitus API sayfasında yer alan kodlar cURL diliyle yazıldığı için maalesef Python ile direkt kullanamıyoruz. cURL dilinin açılımı Client for URL‘dir. Bu dil ile komut satırından internet sitelerine HTTP isteği gönderebiliyoruz. Bu işlevi yerine getirmek için Python’da yer alan requests modülünü kullanacağız. İlk önce üç özellik için de kodlamamızı yapacak, daha sonra da Cognitus API ile biraz oynayarak doğal dil işleme alanında gerçekten iyi olup olmadığını göreceğiz. Kodların aralarına açıklama satırlarını her zamanki gibi ekledim. Anlaşılmayan bir nokta olursa sormaktan çekinmeyin lütfen.

API anahtarımızı almak için https://api.cognitus.ai/tr/user/profile/ sayfasından API Key sayfasına giriyoruz. Sayfada yer alan API anahtarını kopyalıyoruz.  Aşağıdaki kodda 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5 benim API anahtarım. Burayı kendi API anahtarınızla değiştirmeyi unutmayın lütfen.

import requests
import json

# API anahtarını ve içerik tipini girelim.
baslik = {
'Authorization': 'Token 00d2e3a10c82420414b2d36d28fb5afc2cd8e8a5',
'Content-Type': 'application/json'
}

Duygu analizi için aşağıdaki kodda sadece “Yemek nefis görünüyor.” kısmını değiştirmeniz yeterli olacaktır. Metnin tırnak içerisinde olmasına dikkat etmeniz gerekiyor. Duygu analizi sonucunda –1 ile +1 arasında bir sonuç üretiliyor. +1’e yakın olması cümlenin pozitif, -1’e yakın olması ise negatif anlam taşıdığını gösteriyor.

##### #### ### ## # DUYGU ANALİZİ # ## ### #### #####
# Bilgileri çekeceğimiz adresi girelim.
url = "https://api.cognitus.ai/api/v1/sentiment"

# Duygu (sentiment) analizi yapmak istediğimiz metni girelim.
veri = {"text": "Yemek nefis görünüyor."}

# İsteğimizi gönderip sonucu ekrana yazdıralım.
requests.post(url, json=veri, headers=baslik).json()

Sonuç:
{'polarity': 0.69}

Varlık analizi için aşağıdaki kodda sadece “İstanbul da Yılmaz bey ile X Şirketi arasında toplantımız olacaktır.” kısmını değiştirmeniz yeterli olacaktır. Varlık analizi ile metinlerde yer alan konum (lokasyon), kişi ve organizasyon (şirket) isimlerini tespit edebileceğiz.

##### #### ### ## # VARLIK ANALİZİ # ## ### #### #####
# Bilgileri çekeceğimiz adresi girelim.
url = "https://api.cognitus.ai/api/v1/entity"

# Varlık (entity) analizi yapmak istediğimiz metni girelim.
veri = {"text": "İstanbul da Yılmaz bey ile X Şirketi arasında toplantımız olacaktır."}

# İsteğimizi gönderip sonucu ekrana yazdıralım.
requests.post(url, json=veri, headers=baslik).json()

Sonuç:
[['X Şirketi', 'I-ORG'], ['İstanbul', 'I-LOC'], ['Yılmaz', 'I-PER']]

Metin sınıflandırma yapabilmek için varlık ve duygu analizinden farklı olarak birkaç şey daha yapmamız gerekiyor. Öncelikle metinleri sınıflandırmak için ağımızı eğitmemiz gerekiyor. Bunu da siteye eğitim verisi olarak .csv uzantılı bir dosya yükleyerek yapacağız.

Eğitim verimizi oluşturmak için basit bir metin editörünü (örneğin Not Defteri) açıyoruz. Verilerimizi her satırda bir veri olacak şekilde gireceğiz. Verilerimizin şu formatta olması gerekiyor.

sınıflandırılmak istenen metin,metin sınıfı

Bu şekilde “sınıflandırılmak istenen metin” cümlesinin “metin sınıfı” adında bir sınıfa ait olduğunu tanımlamış olduk. Benim hazırlamış olduğum ve metnin spam (istenmeyen) mı yoksa normal metin mi olduğunu anlamak için kullanabileceğiniz veri dosyasına aşağıdan ulaşabilirsiniz. Bu dosyayı oluşturduktan sonra uzantısı .csv olacak şekilde kaydediyoruz. Örneğin ben, hazırladığım  dosyaya veri.csv adını verdim.

Hazırladığım Dosya: indir

veri.csv dosyasının içeriği şöyle:

bugün hava çok sıcak,normal
toplantı saat 14'te olacak,normal
yeni otelleri keşfetmeye hazır mısınız,spam

Eğitim dosyasını (veri.csv) oluşturduktan sonra cognitus.ai sitesine giriş yapıyoruz. Siteye giriş yaptıktan sonra sağ tarafta yer alan Modüllerim kısmının sağ üstünde yer alan Yeni Modül butonuna tıklayarak yeni bir modül oluşturuyoruz.  Modül oluştururken modül tipini sınıflandırma olarak seçiyoruz.

Modüle giriş yaparak sağ üstte yer alan Dosya Yükle butonuna tıklayarak veri.csv dosyasını siteye yüklüyoruz. Daha sonra sayfanın en altında yer alan Çalıştır butonuna tıklayarak ağımızın eğitimini tamamlıyoruz. Modülün olduğu sayfanın adresine bakarak oluşturduğumuz modülün ID’sini bulmamız gerekiyor. Benim oluşturduğum modülün adresi https://api.cognitus.ai/tr/user/modules/detail/225/ olduğu için modül ID’si de 225‘tir.

veri.csv dosyasındaki verilerle eğittiğimiz metin sınıflandırma ağımızı test etmek için aşağıdaki kodları yazmalıyız. 225 sayısını kendi modülünüzün ID’si ile değiştirmeyi sakın unutmayın. Kendi metninizle test etmek için aşağıda yer alan “Yapay bot ile yapay zekayı öğreniyorum.” metnini değiştirebilirsiniz.

##### #### ### ## # METİN SINIFLANDIRMA # ## ### #### #####
# Bilgileri çekeceğimiz adresi girelim.
url = "https://api.cognitus.ai/api/v1/classify"

# Varlık (entity) analizi yapmak istediğimiz metni girelim.
veri = {"module_id":"225", "text": "Yapay bot ile yapay zekayı öğreniyorum."}

# İsteğimizi gönderip sonucu ekrana yazdıralım.
requests.post(url, json=veri, headers=baslik).json()

Sonuç:
'{"results":[{ "category":"normal", "probability": 72},{ "category":"spam", "probability": 28}]}'

Deneme Tahtası

Kodlama kısmını tamamladığımıza göre bazı cümlelerle Cognitus‘u deneyelim.

Duygu (Sentiment) Analizi

Bugün hava çok güzel. (%83 Olumlu)

Artık sevmeyeceğim. (%80 Olumsuz)

Yolla kaderim yolla. (%51 Olumsuz)

Yapay zeka, yapay bot ile öğrenilir. (%91 Olumsuz)

Bugün denize girip yüzeceğim. (%74 Olumlu)

Varlık (Entity) Analizi

Yarın Adana'ya kebap yemeye gideceğim. (Konum: Adana)

Yarın Ayşe ile Arçelik mağazasına beyaz eşya bakmaya gideceğim. (Kişi: Ayşe)

Üsküdar'a gider iken aldı da bir yağmur. (Konum: Üsküdar)

UNICEF'in Türkçe anlamı Birleşmiş Milletler Çocuklara Yardım Fonu'dur. (Organizasyon: UNICEF, Organizasyon: Birleşmiş Milletler)

Türkiye, Avrupa Birliği müzakerelerine başladı. (Organizasyon: Avrupa Birliği, Konum: Türkiye)

Metin Sınıflandırma

Vitamin desteği ile kendinize gelin. (Spam: %58, Normal: %42)

Toplantımız yarına ertelendi. (Normal: %83, Spam: %13)

SONUÇ

Henüz çok yeni olmasına rağmen aldığım sonuçlar gayet başarılı. Eğitimde kullanılan verilerin artırılması ve kullanılan modellerin geliştirilmesi ile bir Türk insanının metinleri kavrama yeteneğine yakın bir sonuç elde edileceğini düşünüyorum. Cognitus‘un beklediğimden daha iyi eğitilmiş bir yapay zeka ürünü olduğunu rahatlıkla söyleyebilirim. Umarım yapay zeka alanında bu tarz yerli çalışmaların sayısı artar.

Denediğiniz metinleri ve sonuçlarını paylaşırsanız çok mutlu olurum. Kodlarla alakalı herhangi bir sorun yaşamanız durumunda yardım istemekten çekinmeyin lütfen. Yapay zekalı günler dilerim.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s