Makine Öğrenmesi Dersleri 6: NLP’ye Giriş

Hakkı Kaan Simsek
Veri Bilimi Türkiye
4 min readApr 8, 2018

NLP yani Doğal Dil İşleme, doğal dillerin kurallı yapısının çözümlenerek anlaşılması veya yeniden üretilmesi amacını taşır. Bu çözümlemenin insana getireceği kolaylıklar, yazılı dokümanların otomatik çevrilmesi, soru-cevap makineleri, otomatik konuşma ve komut anlama, konuşma sentezi, konuşma üretme, otomatik metin özetleme, bilgi sağlama gibi birçok başlıkla özetlenebilir. Bilgisayar teknolojisinin yaygın kullanımı, bu başlıklardan üretilen uzman yazılımların gündelik hayatımızın her alanına girmesini sağlamıştır.

Günümüzde doğal dil işlemenin en yaygın kullanıldığı alanların başında chatbotlar geliyor. Bugün birçok büyük teknoloji şirketi insanlarla doğal iletişim kurabilen chatbotlar geliştirmek için ciddi yatırım yapmakta. Temelde gelinmek istenen nokta insanlar tarafından söylenen cümlelerin parçalara ayrılması, anlaşılması ve insanların anlayacağı bir şekilde cevaplanması süreçlerini en iyi şekilde yönetmek. İnsanların kelimelere sembolik anlamlar yüklemesi, bazı kelimeleri atlaması, yanlış ve aksanlı telaffuz etmesi gibi makineler işini zorlaştıracak birçok problem var.

Kısacası doğal dil işlemeyle insanların konuştuğu dili bilgisayarlara öğretmeye ve çeşitli uygulamalarla hayatımızı kolaylaştırmaya çalışıyoruz. Bunlardan bazıları:

  • Arama motorları
  • Sanal asistanlar
  • Spam tespiti
  • Otomatik Çeviri
  • Duygu Analizi

Günlük hayatta birçok kullanım alanı olan doğal dil işlemeyi temel olarak iki gruba ayırmak mümkün: metin işleme (text processing) ve ses işleme (speech processing). Bu yazıda metin işleme süreçleri (text processing) üzerinde duracağız.

Wikipedia yorumlarını ve bu yorumların hangi kategorilere girdiğini görüyoruz. Bu haliyle hiçbir şey yapamayacağımız aşikar. Önce cümleleri parçalayalım.

Cümleleri parçaladık ve sayılabilir bir duruma getirdik. En çok kullanılan kelimeleri interaktif Plotly kütüphanesiyle görselleştirelim.

Biz bu kadar emeği hiç harcamadan da en çok kullanılan yukarıdaki kelimeleri tahmin edebilirdik. Bunlar hemen her romanda, gazete yazısında, internet sitesinde yoğun olarak kullanılan kelimeler zaten, bunlardan kurtulmamız lazım.

Çok kullanılan ve metinle ilgili yeterli bilgi vermeyen 190 kelimelik bir liste halihazırda Python’da mevcut.

Bu kelimelerden kurtulup en çok kullanılan kelimelerden oluşan bir kelime bulutu (Word Cloud) yapalım. Standart bir bulut olmaması için Sherlock resminin base64 koduna çevrilmiş halini kullanalım.

Bir kelime ne kadar çok kullanılıyorsa o kadar büyük gözüküyor. Wikipedia yorumları hakkında bilgi veren estetik bir görüntü.

Şimdi de standart metin işleme süreçlerinden bahsedelim:

  1. Tokenize

Wikipedia yorumlarından bir örnek seçelim ve onu .split(“ ”) fonksiyonuyla ayıralım.

Gördüğünüz gibi ayrılması gereken bazı ögeler ayrılmadı (“I’m”) veya bazı ögeler noktalama işaretiyle birlikte yanlış ayrıldı. (“man,”)

nltk işleri kolaylaştırdı ama hala birçok StopWords var, bunlardan kurtulmamız gerekiyor.

2. Remove StopWords

3. Stemmer

Stemmer algoritmaları kelimelerdeki morfolojik ekleri atarak kelime kökünü (stem) bulmaya çalışır. Örneğin aradı, aramış kelimelerinin eklerini atarak köküne ulaşmak oldukça önemli.

Günümüzde en yaygın kullanılan 3 stemmer algoritması: Lancaster, Porter, Snowball. Aralarındaki karşılaştırma için kısa bir cevaba buradan ulaşabilirsiniz. Snowball algoritması için birkaç örnek yapacağım, diğerleri için siz de denemeler yapabilirsiniz. Öncelikle hangi dillerin tanımlı olduğuna bakalım.

İlk ikisi iyi güzel ayrıldı ama son ikilide sanki bir sıkıntı var gibi.

4. Lemmatizer

Stemming metodunda kelime bağlamdan bağımsız olarak düşünülür ve kelime sonundaki ekler atılır. Hızlı ama doğruluk oranı düşüktür. Kelimelerin sözlükteki anlamını hesaba katan Lemmatizer metoduna bakalım. Bulmak istediğimiz kökü verb (fiil), adverb (zarf), noun (isim), adjective (sıfat) olarak seçebiliyoruz.

5. Vectorization

Şimdiye kadar bir cümleyi kelimelere bölmeyi, çok kullanılan bize bilgi vermeyen kelimeleri atmayı, son olarak da kelime köklerini bulmayı gördük. Şimdi cümleleri modellerin anlayacağı hale diğer bir deyişle 0 ve 1'lere çevirmemiz gerekiyor.

Yukarıda gördüğünüz cümlelerin içerdiği bütün kelimelerden bir liste yapılıyor ve herhangi bir cümledeki kelimeler bu listedeyse cümle vektörüne 1 değilse 0 işleniyor.

Çalışmadaki veri setine ve kodlara şuradan ulaşabilirsiniz.

Sorunuz olursa bana Linkedin veya Twitter hesaplarından yazabilirsiniz.

kaynak

--

--