Miuul 101

Doğal Dil İşlemede Temel Kavramlara Hızlı Bir Bakış

Bir bilgisayar konuştuğumuz dili nasıl anlayabilir? Soruyu yanıtlayabilmek için doğal dil işleme kavramına ve bu kavramla bağlantılı yöntemlere bir göz atmak gerek.

Bu yazıda dilbilim, yapay zeka ve bilgisayar bilimi alanlarında yapılan çalışmalar sonucunda hayatımıza girmiş bir kavramı ele alacağız: Doğal dil işleme ya da İngilizce tabiriyle natural language processing (NLP). Kısaca NLP, bilgisayarların konuştuğumuz dili anlayabilmesi için yapılan bir dönüştürme işlemi. Konuştuğumuz dil, bir dizi kural çerçevesinde bir araya gelen alfabenin parçacıklarından oluşurken bilgisayarın dili 0 ve 1’lerden ibaret. Aracı bir çevirmenin gerekliliği mutlak ama böyle bir ihtiyaç nereden doğdu? 

Birkaç örnek vermek gerekirse 

  • Makine çevirisi (Machine Translation)
  • Konuşma tanıma (Speech Recognition)
  • Duygu analizi (Sentiment Analysis)
  • Soru-cevap (Chatbots)

amaçlı geliştirilen uygulamalar günümüzde NLP’yi vazgeçilmez kılıyor.

Temelde doğal dil işleme söz konusu olduğunda morfoloji alanı karşımıza çıkıyor. Biçimbilim olarak da bilinen bu alan, dilbilimin bir dalı ve özünde bir dilin anlam taşıyan en küçük birimlerinin yapısını inceliyor. Literatürdeki bazı anahtar kelimelere de NLP üzerine yapılan araştırmalarda sıklıkla rastlıyoruz.

  • Söz Dizimi (Syntax) : Dillerdeki cümle kurma ilke ve kurallarını, cümlelerin esnekliğini inceleyen dilbilim dalı.
  • Anlamsal Analiz (Semantic): Sözcük ve cümlelerin anlamı, aynı sözcüklerin farklı anlamları ve dile getirilen bağlamı inceleyen dilbilim dalı.
  • Anlam Belirsizliği (Disambiguation): Bir kelimenin hangi bağlamda ne anlama geldiğine karar verilmesi süreci. 

Günümüzde doğal dil işlemede karşılaşılan belli başlı problemler için çeşitli çözüm önerileri sürekli olarak araştırılmakta. Dilbilim, yapay zeka ve bilgisayar bilimi alanlarındaki gelişmeler bu problemlere ancak interdisipliner yaklaşımlarla çözüm geliştirilebileceğinin sinyalini verir nitelikte. 

NLP’nin çözümüne katkıda bulunduğu bazı sorunlar ise şunlar:

  • Varlık İsmi Tanıma (Name Entity Recognation, NER): Metinde yer alan özel isimlerin, tarih, saat, lokasyon bilgilerinin, kişi, kurum adları gibi tanımlanmalarının yapılması.
  • Özetleme (Summarization):  Daha hızlı bir analiz için büyük metinlerdeki bilgileri özetleme işleminin yapılması.
  • Metin Sınıflandırma (Text Classification): Metnin içeriklere göre sınıflandırılması.
  • Metin Normalizasyonu (Text Normalization): Metin işleme öncesi metnin ayıklanması.
  • Metin Etiketleme (Part-of-Speech Tagging, POS): Her kelimenin sözcük türünün işaretlenmesi.  Fiil, nesne, sıfat, bağlaç vb. şekillerde…

Sorunların doğal dil işleme ile belirli ölçülerde giderilmesi ise gelişkin bir nesne yönelimli programlama dili vasıtasıyla mümkün. Python işte bu noktada bize oldukça kapsamlı kütüphaneler sunuyor. NLP işlemleri için sık kullanılan bazı Python kütüphaneleri ise şunlar:

  • Natural Language Toolkit (NLTK)
  • spaCy
  • TextBlob
  • Gensim
  • pattern
  • polyglot
  • PyNLPI
  • CoreNLP

Bir NLP çalışması hangi adımlardan oluşuyor?

Başta da bahsettiğimiz gibi aslında bilgisayarların konuştuğumuz dili anlayabilmesi için bir dönüştürme işlemi yapıyoruz. Bu işleme başlamadan önce metnin belirli bir formata getirilmesi gerekiyor. Bunu metin ön işleme (text preprocessing) adımlarında uyguluyoruz.

Tokenize Etme İşlemi (Tokenization)

Metin ön işlemenin ilk adımı ise kısaca ham metni küçük parçalara ayırma uygulaması olarak bilinen tokenize etme işlemi. Esas olarak iki çeşit tokenize etme türü bulunuyor. Bunlardan ilki cümle, ikincisi ise kelimeleri tokenize etmeye yönelik.

C:\Users\sevvalayse.yurtekin\Downloads\carbon (10).png

Tokenization

Yukarıdaki örnekte görülebileceği gibi öncelikle cümleleri tokenize ederek verilen cümleleri birbirinden ayırdık. Devamında ise elde edilen tüm kelimeler ve noktalama işaretlerini küçük parçalara ayırma işlemini gerçekleştirdik.

Metin Temizleme (Text Cleaning)

Metni parçalara ayırmamızın ardından çalışmamız için gerekli olmayan bazı yapıların ortaya çıktığını gördük. Bir temizlik ihtiyacı doğdu. Bu ise metin ön işleme adımının ikinci basamağı olan metin temizleme uygulamasının gerekliliğini ortaya koyuyor. Buradaki örnekte amacımız metni noktalama işaretlerinden ve özel karakterlerden arındırmak. 

C:\Users\sevvalayse.yurtekin\Downloads\carbon (11).png

Text Cleaning

Metin Normalleştirme (Text Normalization)

Ardından metni normalleştirme ihtiyacı göze çarpıyor. Peki ama bu ne anlama geliyor? Normalleştirme işleminin farklı bağlamları olabilir. Bunlardan bazıları:

  • Yinelenen beyaz boşlukların ve noktalama işaretlerinin kaldırılması.
  • Vurguların kaldırılması. Örneğin ele aldığımız metin farklı dillerde vurguyu belirten bazı karakterler içeriyorsa bu ibarelerin kaldırılması kodlama sırasında oluşabilecek potansiyel hataların giderilmesine yardımcı olabilir.
  • Büyük harflerin dönüştürülmesi. Bir NLP çalışmasında tümüyle küçük harflerle çalışmak farklı avantajlar yaratabilir. Öte yandan bazı durumlarda isim ve konum gibi bilgileri çıkarmak için büyük harfler de çok önemlidir.
  • Özel karakter ve emojilerin kaldırılması veya dönüştürülmesi. Örneğin Twitter’dan edinilen bir veriyle çalışırken hashtagleri kaldırmak çalışmanın bağlamına göre gerekli olabilir.
  • Yazıyla ifade edilen sayıların rakamlar ile yazılması. Örneğin “yirmi üç” metninin 23 olarak belirtilmesi çalışmada ihtiyaç olarak karşımıza çıkabilir.
  • Kısaltmaların açık hallerinin belirtilmesi. Örneğin bir çalışma kapsamında ABD kısaltmasının Amerika Birleşik Devletleri şeklinde yazımı gerekli olabilir.
  • Tarih biçimlerinin, sosyal güvenlik numaralarının veya benzer biçime sahip diğer verilerin standart bir biçimde yazılması.
  • Yazım yanlışlarının düzeltilerek bir sözcüğün farklı çeşitlerde ifade edilmesinin önüne geçilmesi.
  • Nadir kelimelerin daha yaygın kullanılan eş anlamlılarıyla değiştirilmesi.

Tüm bu normalleştirme işlemleri elimizdeki iş problemiyle de yakından ilgili. Hangilerinin uygulanması gerektiği kararını veri bilimcinin alması gerek.

Gövdeleme (Stemming) ve Kök Bulma (Lemmatization)

Bir diğer ön işleme basamağı ise kelimeyi eklerinden arındırmayı içerir. Kelime gövdeleme (stemming) kavramı özünde bir metindeki her bir kelimeden eklerin kaldırılması işlemidir. Burada dillerin yapısına ilişkin bazı sorunlar oluşabilir. Kelimelerin fazla veya az kırpılması, ek olamayan yapıların ek gibi algılanması muhtemeldir. Gövdeleme algoritmalarına Python’daki nltk kütüphanesinde yer alan üç örnek verebiliriz: Porter Stemmer, Snowball Stemmer ve Lancaster Stemmer.

C:\Users\sevvalayse.yurtekin\Downloads\carbon (12).png

Snowball Stemmer

Her ne kadar kök bulma odağı itibariyle benzer bir kapsamda düşünülebilecekse de lemmatization uygulaması temelde kelimelerin morfolojik analizi ile kelimenin köküne ulaşılmasına giden daha karmaşık bir algoritmadır. Yine Python içindeki nltk kütüphanesinde yer alan WordNetLemmatizer ile bu işlem gerçekleştirilebilir. 

Önemi olmayan kelimeler (Stop Words)

Metin ön işleme adımının bir parçası olarak metinde herhangi bir önemi olmayan kelimeleri çıkarmayı da düşünebilir. Bir dilde yaygın kullanılan ve metinden bir öznitelik çıkarımı yaparken herhangi bir önem taşımayan kelimelerden kurtulmak yapacağımız çalışmada bize bazı avantajlar sunacaktır. Türkçede bu kelimeler ile, ama, sen, ki vs. gibi kelimelerdir.

C:\Users\sevvalayse.yurtekin\Downloads\carbon (13).png

Stop Words

Metin Öznitelik Çıkarımı (Text Feature Extraction)

Metin ön işleme adımının tamamlanmasının ardından artık metinden öznitelik çıkarım işlemlerine başlayabiliriz. Buradaki öznitelik kavramı, özellik veya değişken olarak da düşünülebilir.

Kelime Çantası Modeli (Bag of Words-BoW)

Kelime çantası modeli, metinlerden özellik çıkarma yollarından bir tanesidir. Bu model bir belgedeki kelimelerin oluşumunu örneğin,terim sayılarını, açıklayan metnin bir temsilidir. Bilinen kelimelerden kelime haznesi oluşturulur, buna “kelime çantası” denir. Model, bir kelimenin belgenin neresinde olduğu ile değil, sadece belgede bulunup bulunmadığı ile ilgilenir.

Aşağıdaki örnekte dört cümleden oluşan bir belgemiz var. Öncelikle makinelerin işi karakterler veya kelimelerle değil, sayılarla. CountVectorizer fonksiyonu ise metni sayısal verilere dönüştürmek için kullanılıyor. Belgede toplamda sekiz benzersiz kelime var ve bu nedenle matriste her biri benzersiz bir kelimeyi temsil eden sekiz sütun yer alıyor. Çıktıdaki satırlar ise görülebileceği gibi belgedeki satırlarda yer alan cümlelere denk geliyor.

C:\Users\sevvalayse.yurtekin\Downloads\carbon (14).png

CountVectorizer

TF-IDF (Term Frequency-Inverse Document Frequency) Yöntemi

Matrisin hazırlanmasının ardından metin içindeki terimlerin ağırlıklandırması NLP projelerinin önemli bir kısmında kritik bir yaklaşım. Bir terimin doküman içerisindeki önemini istatistiki bir biçimde ifade etmek için TF-IDF yöntemini uygulamak gerekiyor.

Terim Frekansı (Term Frequency)

Basitçe TF-IDF’in ilk kısmındaki terim frekansı (TF), bir metinde geçen terim ağırlıklarını hesaplamak için kullanılmaktadır. 

TF(t) = (Bir t teriminin tüm cümleleri içeren ilgili belgede gözlenme frekansı) / (Belgedeki toplam eşsiz terim sayısı)

Ters Belge Frekansı (Inverse Document Frequency)

IDF kısmında ise eşsiz kelimelerin belgedeki tüm cümleler içindeki ağırlığı hesaplanır. 

IDF(t) =  log (Toplam cümle sayısı ) / (İçinde t terimi olan cümle sayısı )

Kelime Gömme (Word Embeddings) Yöntemleri 

TF-IDF dışında metinlerden öznitelik çıkarmak için kullanılabilecek başka teknikler de buluyor. Kelime gömme yöntemleri, kelimelerin vektör temsillerini ifade eden bir teknik.

Word2Vec, Google tarafından geliştirilen, tahmin ve sinir ağı tabanlı kelime temsil yöntemidir. Ağırlık öğrenmeye benzer bir şekilde kelime vektörleri öğrenilir ve kelimeler arasındaki benzerlik ya da zıtlık gibi durumlar matematiksel olarak ifade edilir. Bu yöntem dahilinde iki yaklaşım bilinmelidir: CBoW ve Skip-gram. 

CBoW, bir kelimenin etrafındaki kelimeler verildiğinde hangi kelimenin bu kelimeler içinde görülme olasılığının en yüksek olduğunu bilmek istemesidir. Skip-gram ise girdiler ile çıktıları olasılıksal olarak birbirine benzeterek anlamsal olarak en uygun şekilde temsil etmek hedeflenir. Bu yöntemin avantajı farklı anlamlara gelebilecek kelimelerin birden fazla anlamını yakalayabilmesidir.

CBOW & Skip-gram

Özet olarak bu yazıda, doğal dil işlemeye dair bazı temel kavramlara ve basit bir NLP çalışmanın adımlarına değindik. Öte yandan NLP dünyası elbette bunlarla sınırlı değil. Konuyla ilgili daha detaylı bilgi sahibi olmak için Miuul'un "Doğal Dil İşlemeye Giriş" uzmanlık programına göz atabilirsiniz.

 

Kaynaklar

Restoranınıza gelen müşteriler sizden ne kadar memnun?

Şevval Ayşe Yurtekin

Python’ın İlk Günleri, Değişkenleri ve Veri Tipleri

Hande Küçükbulut

Parametre Optimizasyonuna Pratik Bir Çözüm: Optuna

Cem İstanbullu

SON 101'LER

GİRİŞ

Aşağıya kaydolduğunuz e-postayı girin. Şifrenizi sıfırlamanız için size bir bağlantı göndereceğiz.

Giriş Ekranına Dön
Şifre sıfırlama talimatları
adresine gönderildi.