Eyl 212018
 
alice ekler
9.514 kez okundu



Python ile Türkçe Kelime Eklerinin Dağılımı

Türkçe “eklemeli” bir dildir. Bu nitelikteki diğer iki dil Macarca ve Moğolcadır.

Türkçede kullandığımız kelimeleri türeten eklerin konumlarını ve frekanslarını belirleyen bir çalışma yaptım.

Bu amaçla ekleri ayrıştırıp sınıflandırmak için Zemberek kütüphanesinden yararlandım.

Çalışmamın bir bölümünde derlem dosyasındaki kelimeleri kullandım.

Rekorumuz “ilişki” isminde.

Bu isme 10 ayrı ek ulanarak “ilişkilendirilemeyeceklerini” sözcüğünün oluştuğunu görüyoruz.

Daha fazla kök içeren başka kelimeler de bulunabilir. Ama bu tür örnekler büyük olasılıkla uygulanabilirlikten uzak olacaklardır.

Bu sözcüğün Zemberek ile elde ettiğimiz kırılım yapısı şu şekilde:
ilişkilendirilemeyeceklerini
ilişki ISIM_KOK 0
ilişki-le ISIM_DONUSUM_LE 1
ilişki-le-n FIIL_EDILGENSESLI_N 2
ilişki-le-n-dir FIIL_ETTIRGEN_TIR 3
ilişki-le-n-dir-il FIIL_EDILGEN_IL 4
ilişki-le-n-dir-il-e FIIL_YETERSIZLIK_E 5
ilişki-le-n-dir-il-e-me FIIL_OLUMSUZLUK_ME 6
ilişki-le-n-dir-il-e-me-yecek FIIL_DONUSUM_ECEK 7
ilişki-le-n-dir-il-e-me-yecek-ler ISIM_COGUL_LER 8
ilişki-le-n-dir-il-e-me-yecek-ler-in ISIM_TAMLAMA_IN 9
ilişki-le-n-dir-il-e-me-yecek-ler-in-i ISIM_BELIRTME_I 10

Aynı yöntemle alice.txt öyküsünü sözcüklerine, sözcükleri de eklerine ayrıştırdım ve konum frekanslarını saptadım.

Öyküde kullanılan kelimelerin ek kırılım tablosu aşağıdaki gibidir:

Şimdi toplam ek frekanslarını görselleştirelim:

Türkçe Kelime Eklerinin Dağılımı

Konum 0’daki ek sayısı, aslında hiç ek almayan kelime sayısına karşılık geliyor.
Sadece bir ek alan kelimelerin toplamı, 4545.
6 ek alan kelime ise öyküde sadece 1 kez kullanılmış:(alamadıklarından: al-a-ma-dık-lar-ın-dan)
5 ek alan kelimeler şunlar: (toplandıklarında, resimlerindekine, mırıldandığından, kestiremiyordu, götüremeyeceğini, olamayacağını, kullanmamalıydın, bahsedemezdiniz, kesilemezdi, dolamadığını, söyleyebileceklerimin, beceremiyormuşum)

Sınırlı sayıda kelime kökü (20 bin civarı) ile kısıtlı sayıda ekin (yaklaşık 100 civarı) kombinasyonu, Türkçenin zenginliğini oluşturuyor.

Siz de aşağıda verdiğim kodlardaki kaynak dosyayı değiştirerek benzer incelemeler yapabilirsiniz.

Beni izlemeye devam edin.

Ahmet Aksoy

Keywords: türkçe kökler, kelime kökleri, türkçe kelime ekleri, zemberek, python, türkçe, eklemeli dil

Eyl 162018
 
pösteki saymak
3.547 kez okundu

Pösteki Saymak

Sizce, tek bir Türkçe kelime kökünden yapım ve çekim ekleri kullanarak en fazla kaç kelime türetilebilir?

Tam 5081 kelime. Bu kelimelerin türetildiği kök: et.

Bu sayının büyüklüğünde aynı kökün hem yüklem hem de isim olması elbette etkilidir.

Yazının sonunda “et” kökünden türemiş sözcüklerin bazılarını vereceğim.(Hepsini vermek yazıyı gereksiz yere uzatacaktır.)

İkinci sıradaki çok kullanılan kökümüz “ol” yüklemidir. Ondan türeyen kelime sayısı: 3536.

Aşağıdaki grafikte en verimli 20 Türkçe kökü görüyorsunuz.

pösteki saymak

Sözcük türetmede kullanılan ekleri de benzer şekilde ayrıştırıp, frekanslarını buldum. En fazla kullanılan ilk iki ek “ler” ve “leri” ekleri. Onları “ları” ve “lar” izliyor. Onların peşinden gelenlerin çoğunluğunu yine çoğul eklerinin çeşitlemeleri oluşturuyor.

Sözcük türetiminde en fazla kullanılan ilk 20 eki de aşağıdaki grafikte görebilirsiniz:

pösteki saymak

Sözkonusu sayıları elde ederken bir milyon altı yüz altı bin yedi yüz yirmi iki (1,606,722) kelime içeren, kısmen denetlenmiş bir listeden yararlandım. Bu listeden çıkan tekil kök sayısı 20910. Tekil ek sayısı ise 77815.

Son günlerde Türkçe sözcüklerin kök ve eklerine ayrılması çalışmalarına yeniden yoğunlaştım. Bunda Yavuz Kömeçoğlu ve Birol Kuyumcu’nun yayınladığı örnek kodun büyük etkisi oldu: https://github.com/deeplearningturkiye/kelime_kok_ayirici
Seq2seq yöntemiyle çalışan bu kodlar 5572 kelime ve kökünü içeren bir verisetini eğitiyor ve test ediyor. Başarı oranı %97.

Aynı sistemi, kelime sayısını 42600 civarına çıkararak tekrarladım. Bu kez başarı oranı 93.6 oldu.

Parametrelerle oynayarak başarı oranı biraz daha yükseltilebilir sanırım. Ama her bir deneme GPU’lu bir makinede bile bazen saatler sürüyor.

Türkçe Doğal Dil İşleme (NLP) çalışmalarında kök ayırıcı olarak bu sistemden yararlanmak mümkün. Küçük hatalar bu tür çalışmalarda kolaylıkla hoş görülebilir.

Ancak, bu başarı düzeyleri beni bir türlü tatmin etmiyor. Çünkü ben, aslında, yazım hatalarını otomatik olarak -dışarıdan- denetleyen bir sistem geliştirme peşindeyim. Hedefim “SIFIR HATA”!

İşte burada yeni -ve çok daha basit- bir yöntem kullanmanın çok daha verimli olacağına inanıyorum: denetimden geçmiş, doğru ve güvenilir bir kelime listesi kullanmak.

Elimde iki milyona yakın sözcük barındıran ve kısmen denetlenmiş bir liste var. Bu haliyle bile oldukça iyi sonuçlar veriyor. (https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinde paylaştığım derlem dosyalarından siz de böyle bir liste oluşturabilirsiniz.)

Aynı listeyi kök ayrımında kullanılacak şekilde geliştirmek de mümkün.

İşte bu tür çalışmaların hemen hepsi, “pösteki saymak” kavramıyla örtüşebilecek nitelikte… Çok fazla emek, sabır ve dikkat gerektiriyor. Üstelik bu çabanın “Türkçe dilgisi” ile de yoğrulmuş olması şart. Türkçe bilgime her ne kadar güveniyor olsam da, bu konunun akademik uzmanı değilim. Umuyorum ki, bir gün “bu işlerin uzmanları” da taşın altına elini koyar.

Çalışmalarımı -şimdilik- kendi kişisel emek ve bilgilerimi kullanarak gerçekleştiriyorum. “SIFIR HATA” hedefime ulaşana kadar da sürdüreceğim.

Liste (aslında sözlük) yöntemini kullanarak çözümlemeye çalıştığım kaynakların pek çoğu aşırı derecede kirli. Bu kaynakların pek çoğu tarayıcı kullanılarak sayısallaştırılmış. Bu sırada, uygulamalardaki Türkçe uyum sorunları nedeniyle pek çok yazım hatası oluşmuş. İnsan beyni bu tür hataları kolaylıkla tolere edebilse de, temiz ve güvenilir bilgi derleme açısından işler büyük ölçüde zorlaşıyor.

Bir kaç kez gönüllü ekip oluşturmayı denedik, ama sonuç alamadık.

Şimdi, yaptığım çalışmalardan elde ettiğim sonuçları -veya bir kısmını- kaynaklara ekleyerek – bir tür forward propagation ve backward propagation yöntemiyle- daha sağlıklı sonuçlar elde etmeye çalışıyorum. İşin içine insan emeği girince, çalışmalar yavaşlıyor ister istemez. Ama sonuçtan memnunum.

Kelimeleri ayrıştırıp görselleştirdiğim Python kodları şöyle:

Bunlar da “et” sözcüğünden türetme yapan eklerden bazıları:
et
edebildi
edebildik
edebildikleri
edebildikleridir
edebildiklerim
edebildiklerimden
edebildiklerime
edebildiklerimi
edebildiklerimiz
edebildiklerimizden
edebildiklerimizdi
edebildiklerimize
edebildiklerimizi
edebildiklerimizin
edebildiklerince
edebildiklerinde
edebildiklerinden
edebildiklerine
edebildiklerini
edebildiklerinin
edebildikleriydi
edebildikleriyle
edebildikse
edebildikten
edebildiler
edebildilerse
edebildim
edebildin
edebildiniz
edebildiydi
edebildiyse
edebildiysek
edebildiysem
edebildiysen
edebildiyseniz

Liste uzayıp gidiyor…

Çalışmalarımın gelişimini ve aldığım sonuçları bu sayfalarda yeri geldikçe paylaşmaya devam edeceğim.
Yeni yazılarımdan haberdar olmak istiyorsanız, Sayfanın en altındaki “Beni yeni yazılarda e-posta ile bilgilendir” seçeneğini işaretleyin.

Ahmet Aksoy