Data Vinci 22 : Doğal Dil İşleme

Tahmini Okuma Süresi: 7 dakika

Bu yazıda Natural Language Processing (Doğal dil işleme) konusuna değinmek istiyorum. Ölüye diriye değindin, sıra buna mı geldi? diyenler olabilir. Fakat aslında gündelik hayatlarımızda birçok alanda istifade ettiğimiz bir alan. En bilinen örneğine ise Google Translate‘i verebilirim.

Doğal dil işleme, yapay zeka ve dilbilimin alt-dallarından birisidir diyebiliriz. Burada kastedilen dil, konuşma dilleri olmaktadır, daha somut örnek: İngilizce, Türkçe, Çince gibi konuşma ve yazı dillerini kendine alan olarak belirlemiş bir yaklaşımdır. Her dilin kendine has gramer kuralları ve kelime çeşitliliği olduğu düşünülürse, bu alanda yapılan çalışmaların karmaşıklığı biraz olsun anlaşılabilir. Doğal dil işleme ile neler yapabiliriz ufak bir liste verelim:

  • Bilgi çıkarımı (Information Extraction)
  • Duygu Analizi ( Sentiment Analysis)
  • Çeviri (Translation)
  • İstenmeyen mail tespiti (Spam Detection)
  • Annotation ( Özetleme)

Ham hâldeki verinin makine için anlamlı olmayacağı aşikâr, bir metin içerisindeki kelimelerin anlamlandırılabilmesi için, çeşitli işlemlerden geçmesi gerekir. Normalizasyon bir metin içerisindeki gereksiz öğelerin atılması işlemi, Lemmatization ise kelimenin sözlükteki “doğru” hâlinin tespit edilmesidir. Stemming işlemi de kelimelerin kök hâllerini bulmamızı sağlar.

Text işlemedeki temel adımlar yukarıdaki resimde ifade edilmiştir. Bu ve buna benzer sunuları kaynaklar kısmına koymuş olduğum ders sunuları linkinde ulaşabilirsiniz.

 

Porter Algoritması köklere ayırma işleminde sık kullanılan yaygın bir algoritmadır.

cats->cat

relational -> relate

walking -> walk

gibi işlemleri porter algoritması kullanarak yapabiliriz.

Peki ama nasıl?

Şimdi aklınıza iyi hoş söylüyorsun da kardeş, elimizdeki metinde geçen kelimeleri neye göre köküne ayıracağız. Membası ne bunun diyenler olabilir? Bu da bizi Corpus terimine getirir.

Corpus kelime sözlüğüdür diyebiliriz. Tahmin edeceğiniz gibi corpus’lar dillere özel olmak zorundadır. Corpus içerisinde bir kelime ile ilgili anlam bilgisi değil de, özel isim olup olmadığı, fiil  mi? sıfat mı ? isim mi ? gibi sorulara cevap bulabileceğimiz işaretlemeler yer alır. Doğal dil işleme üzerine çalışırken Python NLTK   programlama dilini ve kütüphanesini kullanmak faydalıdır. NLTK web sitesine girdiğinizde hazır verileri indirebilir, bunlar üzerinden çalışmalar yapabilirsiniz. Tabii ki de “bedeve”.

Sözle anlatınca kolay gibi görünen bu işlemlerde aslında birçok büyük problem bizleri beklemektedir. Çünkü bir dil kolay mı yetişiyor sanıyorsunuz? Her dilin kendine has kaprisleri(kural setleri) var. Örneğin Türkçe’yi ele alacak olursak sondan eklemeli bir dil, yoğun mecaz anlam içeren, ayrıca başka dillerle yüksek etkileşimi olan bir dil. Özellikle sondan, çoklu ek alabiliyor olması başımızı ciddi şekilde ağrıtacaktır. Öyle ki bu konuda çalışmalar yapan değerli hocamız Dan Jurafsky  Türkçe’nin morfolojik zorluğuna vurgu yapmıştır.

Harflerin birbiri ardına dizilmesinden ziyade semboller ile yazı öğeleri oluşturan dillerde analiz yapmak daha kolay. Yine İngilizce’nin de morfolojik yapısı gereği çalışması kolay bir dil olduğuna değinilmektedir.

Yine de Türkiye’de bu alanda çalışma yapan gruplar var, kaynak tavsiyelerinde linklerini paylaştığım Kemik ve Zemberek projeleri doğal dil işleme alanında çalışmalara devam etmektedir.

Doğal dil işlemede kullanılan ayrıştırma yöntemlerinde olasılıksal tahminleme yapılmaktadır. Yani uygulanan teknikler sonrasında yapılan çıkarımlar matematiksel hesaplamalar sonucu oluşan tahminlerden ibarettir. Dolayısıyla üretilen sonuçların %100 olması neredeyse imkânsızdır. Bizler insanlar olarak bile bazı cümlelerdeki anlamı veya duyguyu anlayamıyorken, doğal işleme sonucu üretilen sonuçlardaki yanlışları da kabul edilebilir değerler olduğu sürece sürecin bir parçası olarak düşünmek gerekmektedir. %80 üzeri başarımlara erişmiş çalışmalarda hataları false-positive olarak değerlendirip bir çıkarım yapmak mümkün.

Bir cümlenin analizi yapılırken en önemli olasılıklama öğesi n-gram olarak bilinen tekrar oranlarıdır. n-gram n sayıda dizinin bir metnin içerisinde geçme sayısını ifade eder. Yani  “mokoko” kelimesindeki ikili gramlara bakarsak mo :1 ko:2 ok:2 gibi… Buradaki kelime kümeleri ikili oldukları için “bigram” diye adlandırılır. 3’lü dizilimlere “trigram”, tekli dizilimler “unigram”. 3’ten büyük dizilimlere ise “n-gram” ismi verilir.

Her şey iyi güzel fakat bu işlemler yapılırken, metin içerisindeki hatalı yazımlar, yazılışları aynı anlamları farklı kelimeler, mecazlar ,deyimler vs. gibi dilin yapısal özellikleri bu sınıflandırmaları zorlaşmaktadır. Tüm bu zorluklar da her dil için farklı olacağı düşünülürse Google Translate’in aslında ne büyük işler yaptığını farkedebiliriz. 72 düvelin dilini birbirine çevirmeye çalışan bir uygulamaya kulp takmaya çalışsam, “Yallah, silikon vadisine” derler. Tebrikler Google! diyerek yazıyı bitiriyorum.

TL;DR

Bu yazıda gayet fularlı bir konu olan doğal dil işleme ile ilgili giriş niteliğinden bir yazı yazdım. Kaynak tavsiyeleri kısmında paylaşmış olduğum Dan Jurafsky ve Christopher Manning’in slaytlarında daha detaylı ve teknik bilgilere ulaşmanız mümkün. Faydalı olması dileklerimle.

Kaynak Tavsiyeleri:

  • Dan Jurafsky ve Christopher Manning’in ders sunuları :

https://web.stanford.edu/~jurafsky/NLPCourseraSlides.html

  • Yıldız Teknik Üniversitesi Kemik Grubu

http://www.kemik.yildiz.edu.tr/

  • Zemberek Türkçe NLP kütüphaneleri

https://github.com/ahmetaa/zemberek-nlp

  • Stanford Üniversite NLP grubunun yapmış oldukları çalışmaları da içeren link

https://nlp.stanford.edu/software/

 

Leave a Reply

Your email address will not be published. Required fields are marked *