NLP — Adım Adım Öğrenme Rehberi: Part | 3

Tarık Kaan Koç
Nane & Limon
Published in
10 min readJan 22, 2024

Hoş geldiniz, değerli okurlarımız! 🌟 Bu serinin üçüncü bölümünde, NLP’nin daha derin sularına dalmaya devam edeceğiz. İlk iki bölümde, NLP’nin temellerini ve tarihçesini keşfettikten sonra, sizleri bu alandaki pratik uygulamalara doğru yönlendiriyoruz. Bu bölümde, NLP işlemlerinin ayrılmaz bir parçası olan ve metinlerin nasıl işlendiğine dair kritik bilgileri sizlere sunacağız. Tokenization’dan başlayarak, cümleleri nasıl bölüp anlamlandıracağımıza, kelimelerin köklerine ve lemmalarına kadar iniş yapacağız. POS (Part of Speech) etiketlemesiyle kelimelerin dilbilgisel işlevlerini çözümleyip, NER (Named Entity Recognition) ile metin içindeki özel isimleri nasıl tanıyacağımızı öğreneceğiz. Bu bölüm, NLP ile ilgilenen herkes için zengin bilgiler içeriyor. Metin işleme tekniklerinin temelini oluşturan bu adımları öğrenmek, NLP’nin karmaşık dünyasında sağlam bir temel oluşturmanızı sağlayacak. Hazırsanız, NLP’nin bu heyecan verici dünyasında bir sonraki adımımıza geçelim!

Not: Bu yazı dizisini gönüllü olarak hazırlıyoruz, dolayısıyla diğer bölümlerin ne zaman yayınlanacağı konusunda net bir tarih veremiyoruz. Müsaitlik durumumuza göre hazırlayıp yayınlayacağız. Amacımız, Türkçe kaynakları zenginleştirerek bu alanda bilgi paylaşımına katkıda bulunmak. 🙏🌿🍋

İyi okumalar dilerim ve sabrınız için teşekkür ederim!

— Tokenization: Metni Parçalara Ayırma Sanatı

Tokenization

Metin işlemenin ilk adımı tokenization yani metni tokenlara bölmektir. Peki, bu tokenlar nedir? Metnin yapısını oluşturan temel birimlerdir. Farklı karakterlerin bir araya gelmesiyle bir string oluşur; karakterler kelimeyi, kelimeler cümleyi, cümleler paragrafı ve paragraflar da bir belgeyi meydana getirir. İşte bu yapı taşlarına token diyoruz ve metni bu tokenlara ayırma işlemine tokenization denir. Doğal Dil İşleme (NLP) alanında metin verilerini işlerken temel bir adımdır. Metni daha küçük ve anlamlı parçalara ayırmak, metin madenciliği, metin sınıflandırma, dil modeli oluşturma gibi birçok NLP görevi için önemlidir.

Tokenlar çeşitli şekillerde olabilir:

  • Karakterler
  • Kelimeler (tekli kelimeler veya kelime grupları)
  • Kelime parçaları
  • Noktalama işaretleri
  • Cümleler
  • Düzenli ifadeler
  • Özel tokenlar (Özel tokenizasyon kuralları oluşturarak, belirli metin yapılarını veya varlıkları belirli bir şekilde işleyebilirsiniz. Örneğin, e-posta adreslerini tespit edebilir ve onları tek bir “EMAIL” tokenıyla değiştirebilirsiniz. Bu metni daha düzenli ve anlaşılır hale getirebilir.)

Peki, neden tokenization yaparız?

Tokenization yapmamızın sebebi, tokenların doğal dildeki metnin yapı taşları olmalarıdır. Dolayısıyla, çoğu ön işleme ve modelleme işlemi token seviyesinde gerçekleştirilir. Örneğin, gereksiz kelimelerin çıkarılması (stopwords removal), kelime köküne indirgeme (stemming), kelimenin kök halini bulma (lemmatization) gibi önemli adımlar token bazında yapılır. Hatta yapay zeka tabanlı sistemler, bir metni anlamlandırmak için tokenları bireysel olarak işler.

— Tokenizasyon Nasıl Yapılır?

Python kullanarak bir metin verisini tokenlara bölmek için birkaç farklı yol vardır. Farklı kütüphaneler farklı yöntemler sunar. Python’da NLTK (Natural Language Toolkit) veya spaCy gibi doğal dil işleme kütüphaneleri, metin tokenizasyonunu kolayca yapmanıza olanak tanır. Bu kütüphaneleri kullanarak kelime veya cümle tokenizasyonu gerçekleştirebilirsiniz. Aşağıda hazırladığım örnek notebook’u inceleyebilirsiniz.

— Sentence Segmentation: Cümle Segmentasyonu

Cümle segmentasyonu, metin içindeki cümleleri bağlamına ve yapılarına göre doğru bir şekilde ayıran bir işlemdir. Bu işlem her bir cümlenin başlangıcını, sonunu ve içinde bulunduğu bağlamı dikkate alarak gerçekleştirilir.

Cümle Segmentasyonu Nasıl Yapılır?

Cümle segmentasyonu genellikle iki yöntemden biri kullanılarak yapılır:

  1. Cümle içinde ?, ! veya , gibi açık işaretlerin varlığına bakılır.
  2. Nokta (.) gibi birden fazla kullanımı olan belirsiz işaretler kullanılır. Örneğin, “Dr.” gibi kısaltmalarda veya “ml” gibi ölçü birimlerinde olduğu gibi noktanın kullanımı, bu noktanın cümlenin sonunu mu yoksa başka bir amaç için mi kullanıldığını belirlemek için incelenir.

Cümle segmentasyonu sürecinde, noktadan önceki ve sonraki harflerin durumu, cümlenin sonunu (End Of Sentence — EOS) veya devamını işaret edip etmediği incelenir. Ayrıca, noktadan sonra gelen kelimenin uzunluğu gibi sayısal özellikler de bu süreçte dikkate alınır.

Cümle Segmentasyonunun Adımları

Cümle segmentasyonu algoritması, genellikle aşağıdaki adımları izleyerek bir metindeki cümle sınırlarını belirler:

  1. Boş satırların varlığı kontrol edilir: Eğer bir noktadan sonra birçok boş satır geliyorsa, bu genellikle bir paragrafın veya bölümün sonunu gösterir.
  2. Noktadan sonra gelen kelimenin durumu incelenir: Eğer noktadan sonra gelen kelime büyük harfle başlıyorsa, bu genellikle yeni bir cümlenin başlangıcı olarak kabul edilir. Eğer kelime küçük harfle başlıyorsa, bu noktanın bir kısaltma içinde kullanıldığı anlamına gelebilir ve cümlenin devam ettiğini gösterir.
  3. Noktanın kendisi ve noktadan sonra gelen kelimenin uzunluğu gibi sayısal özellikler dikkate alınır: Örneğin, noktadan sonra gelen kelimenin uzunluğu ve noktanın bir cümlenin sonunda mı yoksa bir kısaltmanın parçası mı olduğunu gösteren olasılık değerleri hesaplanır.

Bu süreç, belirli kurallar ve olasılıklar dikkate alınarak manuel veya otomatik bir şekilde gerçekleştirmek için algoritmalar kullanılarak gerçekleştirilebilir. Sonuç olarak ümlelerin doğru şekilde ayrılması, metnin daha anlamlı ve yapısal olarak bütün bir şekilde işlenmesine olanak tanır. Bunun yanı sıra NLP modellerini eğitirken veri setinin düzgün bir şekilde ön işlemeden geçirilmesi gerektiğinden cümle segmentasyonu önemli bir adım olabilir kullanım senaryosuna göre.

— Örnek

Bu örnekte, Teknofest 2023 yarışması kapsamında geliştirdiğimiz Türkçe doğal dil işleme “mintlemon” kütüphanesinin “SentenceSplitter” fonksiyonu kullanılarak bir metnin nasıl cümlelere ayrıldığı gösterilmektedir. (Yakın zamanda kütüphaneyi yeniden ele alarak daha iyi bir seviyede geliştiriyor olacağız.)

Örnek metinde Dr. Tarık Kaan Koç’un :D mesleki deneyimleri ve başarıları hakkında bilgi verilmekte ve “SentenceSplitter” fonksiyonunun bu metni nasıl üç ayrı cümleye ayırdığı gösterilmekte. Bu, cümle segmentasyonunun özellikle kısaltmalar ve özel isimler gibi noktalama işaretlerinin birden fazla anlam taşıyabileceği durumları nasıl idare ettiğini anlamak için yararlı bir örnek olduğuna inanıyorum.

— Part-of-Speech Tagging (POS)

Doğal Dil İşleme (NLP) alanının temel taşlarından biri olan Part-of-Speech
(Parça-Başı) Tagging (Etiketleme) (POS), kelimelerin tanımına ve bağlamına göre metinlerdeki kelimeleri (isim, fiil, sıfat vb.) etiketleme işlemidir. POS etiketleme, her kelime için bir etiket atayarak çalışır. Bu etiketler, kelimelerin cümledeki görevlerini temsil eder. Örnekler:

  • İsim (Noun, N): “Kedi”, “kitap”, “İstanbul”
  • Fiil (Verb, V): “koşmak”, “okumak”, “görmek”
  • Sıfat (Adjective, Adj): “hızlı”, “eski”, “güzel”
  • Bağlaç (Conjunction, Conj): “ve”, “ama”, “çünkü”

Türkçe’de POS Etiketleme Örnekleri

  1. Cümle: “Hızlı koşan kedi bahçeyi seviyor.”
  • Hızlı: Sıfat (Adj)
  • Koşan: Fiil (V)
  • Kedi: İsim (N)
  • Bahçeyi: İsim (N)
  • Seviyor: Fiil (V)

2. Cümle: “İstanbul, tarih ve kültürle dolu bir şehirdir.

  • İstanbul: İsim (N)
  • Tarih: İsim (N)
  • Ve: Bağlaç (Conj)
  • Kültürle: İsim (N)
  • Dolu:: Sıfat (Adj)
  • Bir: Belirteç (Determiner)
  • Şehirdir: İsim (N)

— Bir başka örneğimiz:

POS

— Stemming ve Lemmatization

NLP’de corpus datalar üzerinde çalışırken sıklıkla başvurulan iki temel teknik vardır: Stemming ve Lemmatization. Bu teknikler, kelimelerin köklerini veya temel biçimlerini bulmak için kullanılır. Ancak, her biri farklı yaklaşımlara sahiptir. Stemming bir kelimenin kökünü (stem) bulmak için kullanılan basit bir yöntemdir. Kelimelerin sonundaki ekleri kaldırarak temel bir biçim elde eder. Bu süreç hızlı ve verimli olmakla birlikte, her zaman dilbilgisel olarak doğru sonuçlar vermez. Lemmatization ise kelimelerin dilbilgisel ve anlamsal özelliklerini dikkate alarak sözlükteki temel biçimini (lemma) bulur. Bu yöntem dilin yapısını ve kelimelerin kullanım bağlamını analiz eder, bu nedenle stemming’e göre daha karmaşık ve doğru sonuçlar üretir.

Stemming Örneği:

  • Kelime: “koşuyorum”, “koşuyor”, “koştu”
  • Kök: “koş”

Lemmatization Örneği:

  • Kelime: “yazıyordum”, “yazdı”, “yazacak”
  • Lemma: “yaz”

Sonuç olarak Stemming ve Lemmatization Türkçe dahil pek çok dilde NLP projelerinde metinlerin anlamını ve yapısını daha iyi anlamak için kullanılan temel tekniklerdir. Stemming hızlı ve verimli iken, Lemmatization daha doğru ve anlamlı sonuçlar sunar. Bu tekniklerin etkin kullanımı, metin işleme, duyarlılık analizi, metin sınıflandırma gibi alanlarda başarıyı artırabilir. Stemming, kelimeleri basitçe kısaltır; Lemmatization ise kelimelerin anlamlarını ve dilbilgisini dikkate alarak onları analiz eder. Aralarındaki farkta budur. Buradaki notebook’tan örneklere göz atabilirsiniz.

— Stopwords 🕵️‍♂️ Geliştirdiğimiz Mintlemon Türkçe Doğal Dil İşleme Kütüphanesiyle:

Stopwords, bir dilde sıkça kullanılan ancak genellikle analizde derin anlamsal ağırlığı olmayan kelimelerdir. Örneğin Türkçede “ve”, “bir”, “ama” gibi kelimeler durak kelimelerdir. Bu kelimelerin çoğu zaman metin analizi için gereksiz bilgi yükü taşıdığı ve önemli olmayan öğeleri filtrelemek için çıkarılması gerektiği düşünülür. Aaşağıda bir örneğe yer verilmiştir:

— Matchers

Matchers, belirli pattern’lara göre metin içinde arama yapmamızı sağlayan güçlü bir tekniktir. Örneğimizde spaCy’nin ‘Matcher’ sınıfını kullanacağız, burada bizim tarafımızdan tanımlanan pattern’lara uyan kelimeleri veya kelime gruplarını bulmak için bir örnek hazırladım.

Örnek

Stopwords ve Matchers, NLP’de metni ön işleme ve anlamlandırma süreçlerinde önemli rol oynar. Durak kelimelerin çıkarılması, daha net ve anlamlı veri setleri elde etmek için önemlidir. Öte yandan, Matchers ile belirli kalıpları yakalamak, özellikle büyük metinlerden istenen bilgiyi çekmek için etkili bir yöntemdir.

NER gibi daha karmaşık NLP işlemlerine başlamadan önce, bu temel tekniklerin iyi anlaşılması ve uygulanması, projelerinizin başarısını artıracaktır. Bu konseptler hakkında daha fazla bilgi edinmek ve pratik yapmak için kendi araştırmanızı yapmanızı öneririm.

— Named Entity Recognition (NER): Doğal Dil İşlemenin Değerli Bir Parçası 🦋

NER, yani İsim Varlık Tanıma (Named Entity Recognition), yapay zekanın önemli bir kısmı olan NLP’ye, yani Doğal Dil İşlemeye aittir diyebiliriz. Genel amaç, belirli bir metindeki mekan, zaman, kişi, şirket gibi “entity” denilen varlıkların bilgisini çıkarmaktır. NER, metinlerdeki anlam katmanlarını derinlemesine analiz ederek, insanların kolaylıkla anlayıp tanıdığı özel isimleri (kişi adları, coğrafi yerler, kuruluş isimleri vb.) otomatik olarak tanır ve sınıflandırır. Bu teknoloji sayesinde, büyük veri kümeleri üzerinde hızlı ve etkili bir şekilde bilgi işlenebilir, özetlenebilir ve organize edilebilir. Teknik olarak, NER modelleri genellikle derin öğrenme veya makine öğrenimi algoritmalarını kullanarak çalışır. Bu modeller, büyük metin kümeleri üzerinde eğitilir ve farklı türdeki isim varlıklarını tanımak için örüntüleri (pattern) öğrenirler. Örneğin, bir NER modeli, “Paris” kelimesini bir yer adı olarak, “Apple” kelimesini ise bir kuruluş adı olarak sınıflandırabilir.

Örnek

NER Etiket Türleri ve Açıklamaları

Daha iyi anlamanız için aşağıdaki tabloyu hazırladım;

Örnek: NER Etiket Türleri & Açıklamaları Tablosu

Örnek:

Bu örnekte spaCy’nin NLP yeteneklerini kullanarak bir İngilizce metindeki varlıkları tanıma ve etiketleme işlemini göstermekteyim.

Örnek

NER’de esas olarak iki tür etiket vardır. Burada kullandığım isimler resmi olmayan isimlerdir, bunu göz önünde bulundurun. Bunları ana ve alt etiketler olarak adlandırabilirim. Ana etiketler, kelimenin veya simgenin gerçek varlık türünü belirten etiketlerdir. Örneğin, “PERSON” anlamına gelen “PER” bir ana etikettir. Alt etiketler ise, birden fazla simgeden oluşan bir varlık için simgenin konumunu (veya tek başına duran bir simge olup olmadığını) içeren bilgileri taşır. Ana etiket türleri şunlardır: NER etiketleme için esas olarak iki yaygın sistem kullanılır. Biri BIO sistemidir diğeri ise BIESO sistemidir. BIESO sistemi, “S” olarak adlandırılan ve şemada “Singleton” yani “Tekil” anlamına gelen bir ek alt etikete sahip olduğu için BIO sisteminden daha ayrıntılıdır. Bu, daha önce bahsedilen alt etiketin bir simgenin tek başına duran bir simge olduğunu gösterir. Her iki sistemde de bulunan diğer alt etiketler B (başlangıç), I (içinde), E (son), O (dışında) ve S (tekil)’dir. Aşağıdaki örnek şeyleri açığa çıkaracaktır.

“Tarık Kaan, akşam yemeği için pirinç pişirecek.”

Bu cümlede, “Tarık” ve “Kaan” kelimeleri, “PERSON” varlığının parçaları olarak işaretlenebilir. Örneğin, “Tarık” kelimesi için “B-PER” (Başlangıç-Kişisel), “Kaan” kelimesi için “I-PER” (İçinde-Kişisel) veya “E-PER” (Son-Kişisel) gibi etiketler kullanılabilir. Bu etiketleme, “Tarık Kaan”ın tek bir “PERSON” varlığını oluşturduğunu ve her bir kelimenin konumuna bağlı olarak farklı alt etiketler alabileceğini gösterir. Burada “B” başlangıçtaki kelimeyi, “I” ortadaki kelimeyi (eğer varlık birden fazla kelime içeriyorsa), “E” ise son kelimeyi işaret eder “pirinç”, “pişirecek” kelimeleri ise bu cümlede bir varlık ifade etmez ve bu yüzden “O” (Dışında) olarak etiketlenir. “Akşam yemeği” ifadesi ise bağlamına göre “S-EVENT” (Tekil-Etkinlik) veya “S-PRODUCT” (Tekil-Ürün) olarak etiketlenebilir. Buradaki “S”, (single) bu kelimenin tek başına bir varlık oluşturduğunu ve bu varlığı oluşturan başka kelimelerin olmadığını gösterir.

Toparlayacak olursak metin içerisindeki veriyi yapılandırarak, örneğin haberlerdeki önemli kişi ve yer isimlerini, müşteri geri bildirimlerindeki ürün adlarını veya tıbbi raporlardaki ilaç ve hastalık isimlerini belirlemek için kullanılır. Genellikle makine öğrenimi veya derin öğrenme tekniklerini kullanarak, büyük veri setlerinden etiketli veriler üzerinden modelleri train ederiz ve bu sayede modeller metinlerdeki karmaşık yapıları anlamlandırabilirler. Çeşitli etiketleme sistemleri (BIO, BIESO gibi) ile metin içindeki varlıkların başlangıç, iç, son ve tekil olup olmadıklarını belirlerler. Sonuç olarak, NER gerçekten detaylı bir konudur ve uygulamalı örnekler ve kapsamlı çalışmalarla en iyi şekilde öğrenilir. Kendi başınıza bu konuyu araştırarak ve öğrenerek, NLP alanındaki bilgi ve becerilerinizi önemli ölçüde geliştirebilirsiniz. NER hakkında daha derinlemesine bilgi edinmenizi kesinlikle öneririm.

Ödeviniz:

  1. Syntactic Structure Analysis (Sözdizimsel Yapı Analizi): Konuyu daha iyi anlamak ve pratik yapmak için çeşitli internet kaynaklarından faydalanmanızı öneriyoruz. Python programlama dilinde yer alan spaCy, NLTK gibi güçlü kütüphaneleri kullanarak bu bilgileri uygulamaya dökmek, öğrenmenizi pekiştirecektir. Özellikle cümlelerin gramatik yapısını ve bileşenlerinin birbiriyle olan ilişkilerini derinlemesine incelemeniz, NLP’nin temel konseptlerini daha iyi kavramanıza yardımcı olacak.

Uygulama Fikirleri:

  • Seçtiğiniz bir metindeki cümleleri sözdizimsel olarak analiz edin. Özne, yüklem, nesne gibi öğeleri belirleyin…
  • Cümlelerdeki kelimeler için POS (Part of Speech) etiketlemesi yapın ve bu etiketlerin anlamlarını gözden geçirin tekrar.
  • NLTK, spaCy gibi kütüphaneler kullanarak otomatik sözdizimsel analizler gerçekleştirin ve elde ettiğiniz iç görüleri değerlendirin.

2. Text Visualization (Metin Görselleştirme): Metin görselleştirmeleri NLP çalışmalarınızı anlamak ve sunmak için kritik öneme sahip tekniklerdendir. Bu nedenle bu alana kesinlikle göz atmanızı tavsiye ediyorum. Metin görselleştirmesi karmaşık verileri kolayca anlaşılır ve etkileyici bir biçimde sunmanıza olanak tanır bu yüzden NLP çalışmalarınızda bu teknikleri öğrenmek ve kullanmak oldukça değerlidir.

Uygulama Fikirleri:

  • Word Clouds: Bir metinde en çok kullanılan kelimeleri gösteren kelime bulutları oluşturun. Bu metnin genel temasını ve sıklıkla kullanılan kelimeleri görsel olarak ortaya çıkarır.
  • NER Visualization: Named Entity Recognition kullanarak metindeki özel etiketleri belirleyin ve bunları farklı renklerle görselleştirin.
  • Co-occurrence Matrices: Kelimeler arasındaki eşzamanlılık ilişkilerini görselleştirmek için bu matrisleri kullanın.

Bu ödevler NLP’nin temel yönlerini pratik uygulamalarla derinlemesine anlamanıza yardımcı olacak. Teorik bilginizi pekiştirecek ve pratik becerilerinizi geliştirecektir. Bu ödevleri yaparken Kaggle veya GitHub gibi platformlardan faydalanabilir ve araştırma yapma becerinizi geliştirmek için internet kaynaklarını etkin bir şekilde kullanmayı ihmal etmeyin. Unutmayın etkili araştırma yapmak bu alanda başarılı olmanın anahtarlarından biridir.

— Sonuç

Sevgili okurlar, bu serinin üçüncü bölümünün sonuna geldik. Bugün, NLP’nin derinliklerine bir yolculuk yaptık ve dil işleme tekniklerinin temellerini keşfettik. Tokenization’dan POS etiketlemesine, NER’e kadar NLP’nin önemli aşamalarını ele aldık. Pratik örneklerle bu konseptleri daha iyi anlamanızı sağlamayı hedefledik.

Colab notebook’umuz üzerinden verdiğimiz örnekler, bu tekniklerin nasıl kullanıldığını göstermekte ve teorik bilgileri pratik uygulamalarla pekiştirmekte yardımcı oluyor. Sizlerde mutlaka çeşitli projeler ve örnekler yaparak pratik yanınızı güçlendirebilirsiniz.

Son olarak, unutmayın: NLP’nin gücü, metinleri anlamak ve işlemekten ibaret değil; aynı zamanda bu bilgileri nasıl kullanacağımızı öğrenmek ve onları gerçek dünyadaki problemleri çözmek için nasıl uygulayacağımızı keşfetmekle ilgilidir.

Bu rehber serisinin devamını sabırsızlıkla bekleyin…! 🙏🌿🍋

Sonraki bölümlerde NLP’nin daha teknik yönlerine ve uygulamalarına odaklanarak, bu büyüleyici alanın daha da derinliklerine ineceğiz. 🌍💫

Yolculuğunuzda başarılar ve keyifli öğrenmeler dilerim! 🙏🌍

Bana linkedin üzerinden ulaşabilirsiniz. 🦋

--

--