iOS Geliştiriciler için Makine Öğrenmesi #4: Doğal Dil İşleme
iOS geliştiricilere makine öğrenmesi araçlarını tanıttığım yazı dizisinin 4. yazısında Apple’ın sunduğu doğal dil işleme kütüphanesi Natural Language’i inceleyeceğiz. Serinin 1.(CreateML ile Yazı Sınıflandırma) ve 2. (CreateML ile Görüntü Sınıflandırma) yazılarında Create ML aracını , 3. yazıda ise MLDataTable’ı incelemiştik.
Bu yazının konusu olan Natural Language kütüphanesi doğal dili analiz etmemizi ve dile özel bilgileri tespit etmemizi sağlar bu sayede yazılardan anlam çıkartıp daha akıllı uygulamalar geliştirebiliriz.
Bu kütüphanenin yaptığı işleri dört ana başlıkta inceleyeceğiz:
- Kelimeleri Tespit Etme (Tokenization)
- Dili Tespit Etme
- Dilbilim Etiketleri (Linguistic Tags)
- Doğal Dil İşleme Modeli: NLModel
Kelimeleri Tespit Etme
Doğal dil işlemede yazılar işlenmeden önce genellikle kelimelere ayrılmaktadır. Apple bu işlem için NLTokenizer sınıfını sunmaktadır. Boşlukları delimiter olarak kullanarak da kelimeleri ayırt edebiliriz ama Çince ve Japonca’da boşluklar kelime ayracı olarak kullanılmamaktadır. NLTokenizer desteklenen tüm diller için doğru bir şekilde semantik birimlere ayrıştırmayı kolaylaştırır.
Kullanımı aşağıdaki gibidir:
NLTokenizer NLTokenUnit (word, sentence, paragraph, document) tipinde bir parametre alır. Burada belirttiğimiz parametreye göre kelimelere, cümlelere vs. göre ayırma işlemi yapar.
Dili Tespit Etme
Verilen yazinin hangi dile ait olduğunu NLLanguageRecognizer sınfını kullanarak tespit edebilirsiniz. Desteklenen diller listesine şuradan ulaşabilirsiniz. Türkçe de desteklenen diller arasında :)
Kullanımı şu şekilde:
Dominant language ile yazının ait olduğu en yüksek olasılıklı dili bulabilirsiniz.
Verilen yazı için tahmin edilen diğer dil olasılıkları da görmek için languageHypotheses metodunu kullanıyoruz.
Dilbilim Etiketleri
Doğal dil işlemede yazıyı daha iyi analiz edebilmek için kullanılan metotlardan bazıları da sözcük türlerini (sıfat, isim, fiil vb.; part-of-speech tagging) ve varlık isimlerini tespit etmektir (named entity recognition).
Aşağıdaki örnekte NLTagger (dilbilim etiketleyici) kullanarak her bir kelime için etiketleri belirliyoruz.
NLTagger kullanırken etiketlemek istediğiniz tipe göre bir veya birden fazla etiket şemasını (NLTagScheme
) parametre olarak verebilirsiniz. Mesela tokenType şeması; kelime, noktalama işareti veya boşluk olarak sınıflandırırken lexicalClass şeması; sözcük türüne, noktalama işareti tipine veya boşluklara göre sınıflandırır. Sınıflandırmadan çıkarmak istediğimiz tiperi Options olarak belirtebiliriz. Yukarıdaki kodda da noktalama ve boşluklar göz ardı edilmiş. enumarateTags metoduyla tagleri tek tek dolaşarak yazdırdığımızda aşağıdaki gibi bir sonuçla karşılaşıyoruz. Yalnız ‘bir’ sözcüğünde hata yapmış gerisi doğru görünüyor.
Diğer yöntemi kullanarak yazı içindeki varlıkları tespit edebiliriz bu sayede uygulamalarımızda yer ve kişi isimlerini bulup daha akıllı uygulamalar geliştirebiliriz. Aşağıdaki Apple’ın sitesinden aldığım örnekte İngilizce bir cümleyi NLTagger kullanarak etiketliyor. Etiket (tags) olarak kişi, yer ve organizasyon isimleri filtrelenmiş.
İngilizce’de gayet başarılı bir şekilde çalışıyor.
Bir de Türkçe ile deneyelim.
‘Avrupa Birliği’ni kaçırdı ama kısaltmasını yakalamış. Diğer denemelerimde ise Türkçe yer ve organizasyon isimleri bazen bulamadığını gördüm ama isimleri iyi yakalıyor.
‘Türk Hava Yolları (THY) ‘nın İstanbul-New York seferini yapan yolcu uçağı New York havalimanına yaklaştığı sırada türbülansa girdi.’ cümlesi ile denediğimde ise aşağıdaki gibi bir sonuç verdi.
Gördüğünüz gibi Türkçe için de bir ölçüde kullanılabilir. Bu yöntemleri kullanarak yazıdaki yer, kişi ve organizasyon isimlerini tespit edebilir ve sözcük türlerine (sıfat, isim vb. ) göre içerik analizi yapabiliriz.
Akıllı uygulama geliştirme yolunda bir adım daha attık bir sonraki yazıda görüşmek üzere.
Udemy’de hazırlayacağım iOS geliştiriciler için makine öğrenmesi kursundan beklentilerinizi şu formdan paylaşırsanız sevinirim.
Buraya kadar okuduğunuz için teşekkürler :) Benzer yazılardan haberdar olmak için beni Medium’da ve Twitter’da takip edebilir mail bültenime abone olabilirsiniz.
Esenlikle kalın, bol ML’li yıllar :)
Referanslar