Kas 172016
 
2.213 views

Python Gensim Kütüphanesiyle Türkçe Yazı Özetleme

Python beni hala her gün şaşırtmaya devam ediyor. Elini atmadığı, muhteşem çözümler üretmediği neredeyse hiç bir alan yok!

Dün, yeni çalışma alanlarımdan biri olarak belirlediğim “yazı özetleme” konusunda internet araştırmalarına başladım. Bir makalede, gensim kütüphanesi ile yapılan bir çalışma örnekleniyordu: https://rare-technologies.com/text-summarization-with-gensim/

Python Gensim Kütüphanesiyle Türkçe Yazı Özetlem

Rare Technologies

Örnekler İngilizce. Dolayısıyla, Türkçe gibi eklemlemeli bir dil için başarılı sonuçlar elde etme olanağı pek yok! Ama yine de bilgi sahibi olmak için test etmek iyi olacak.

Bu amaçla hemen Hürriyet Gazetesini açtım ve ilk bulduğum haberi seçtim: İstanbul’a kar ne zaman Yağacak?

Kodlar şöyle:

Bunlar da aldığım yanıtlar:

Yanıtlardaki uyarı mesajlarından gördüğünüz gibi şablon kütüphaneleri kurulu olmadığı için sözcük köklerini saptamanın mümkün olamayacağı belirtiliyor. Gerekli filtreler de yok.
(Belki, iyi ki yok! Çünkü o İngilizce filtreler belki de Türkçe ile ilgili sorunlar yaratacaktı.)

Alınan sonuçların başarılı olup olmadığına siz kendiniz karar verin! Ama özellikle ratio=0.25 olan özetlemeye dikkat edin!

Ahmet Aksoy

Eki 012016
 
2.020 views

Gensim Vektörel Doküman Eğitimi

Tıpkı word2vec yöntemi gibi, gensim paketinin doc2vec metodunu da kullanabilirsiniz. Buradaki amaç sözcükler yerine dokümanlar arasındaki ilişkileri vektörel olarak belirleyip, gruplamaktır.

gensim word2vec

Resim: https://codesachin.wordpress.com


Bu alandaki çalışmalar word2vec’e kıyasla çok daha kısıtlı. Öyle sanıyorum ki, sonuçların word2vec kadar kolay anlaşılır ve çarpıcı olmaması, bu durumun belirleyici unsurlarından biri.

Dün bir doc2vec çalışması yaptım. Veri olarak “gundem-nz.txt” dosyasını kullandım. Bu dosyayı https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden indirebilirsiniz.

Dosyanın düzenlenmesi, vektörel olarak eğitilmesi ve belli bir örnek doküman için en yakın örneklerin bulunması işlemleri toplam 8 saat sürdü. Bilgisayarımın sadece 4GB bellek ve 4 işlemciyle ulaşabildiği maksimum hız bu. Bu çalışmada asıl kısıtlayıcı unsur CPU’dan çok, bellek oldu. Süreyi asıl uzatan swap işlemleriydi. Yine de “akşam çalıştır, sabah sonucunu al!” taktiği için uygun bir süre bu.

gundem-nz.txt dosyası 323.6MB boyutunda. Eğitilmiş dosyaların toplam boyutu ise 1.4 GB.

Aldığım sonuçlar aşağıda.

Burada “doküman” sözcüğü yerine “cümle” sözcüğünü kullanmak aslında çok daha doğru olacak. Çünkü veri dosyamızın her satırında ayrı bir cümle var. Eğer bu yapıyı her satırda bir cümle yerine bir paragraf veya bir doküman olarak düzenlersek alacağımız yanıtlar paragraflara ve dokümanlara göre düzenlenmiş olacaktır.

Bu kavramlar sentence2vec, paragraph2vec ve doc2vec olarak sunuluyor. Ama hepsinin işleyişi aynı.

Önceki yazılarımda da belirttiğim gibi dosyamızdaki sözcükleri olduğu gibi kullanmak yerine “kök”lerini kullandığımızda daha başarılı sonuçlar almayı bekleyebiliriz. Çünkü bu durumda sözcüklerin sayısı azalarak daha kolay öbeklenebilir hale gelecektir.

Yukarıdaki örnekte benim dikkatimi ilk çeken ayrıntı, aynı cümlenin kendi kendine yakınlığının sadece 0.6513625979423523 çıkmasıydı. Oysa bu, en azından, 1’e daha yakın olmalıydı diye düşünüyorum.

İlk 4 cümlede “adem” sözcüğü ortak payda gibi görünüyor. Sonrakilerde kolay görülebilen bir payda yok.

Vektör boyutunu ve veri büyüklüğünü arttırmak, daha kolay anlaşılır sonuçlar elde etmemizi sağlayacaktır. Eğer elinizdeki olanaklar uygunsa, siz de bu tür denemeler yapabilirsiniz. (Ben vektör boyunu 100 olarak aldım.)

Doc2vec yöntemiyle ilgili bilgi ve örnekler oldukça kısıtlı.
Eğer bu tür bilgilere erişebilirseniz, lütfen, linklerini benimle paylaşmanızı rica ediyorum.

Yeni çalışmalarımı yine buradan duyuracağım.
Beni izleyin!

Ahmet Aksoy

Linkler:

http://gurmezin.com/gensim-vektorel-dokuman-egitimi/

Eyl 262016
 
1.726 views

Modelinizi Nasıl Eğitirsiniz?

(Aşağıdaki yazıyı veri madenciliği, derin öğrenme, word2vec, gensim gibi kavramlar hakkında en azından ön bilgilere sahip olduğunuzu varsayarak yazdım. Aksi halde bu yazı size hiç bir şey ifade etmeyebilir. Uyarmadı demeyin! 🙂 )

Modelinizi nasıl eğitirsiniz?

From: filmgoo.com

Hürriyet Gazetesinin izniyle herkesin kullanımına açık ve sözcüklerin vektörel modellemesi amacıyla kullanılabilecek 6 ayrı yeni kaynak oluşturdum. Kaynaklar kategorilere ayrılmış durumda. Aslında bunlar “henüz” oldukça küçük boyutlu kaynaklar. Hepsinin toplamı 1 Gigabyte boyutuna bile erişemiyor. O yüzden kaynak çalışmalarımızı büyütmeye ve çeşitlendirmeye devam edeceğim.

Kaynaklarımız henüz küçük olabilir ama, işlevleri büyük. Bu amaçla hazırlanmış ve herkesin kullanımına açık -bildiğim kadarıyla- pek Türkçe kaynak yok. İşte biz de bu yüzden bu açığı kapatmaya çalışıyoruz.

Kaynak dosyalarımızı tek başlarına veya birbirleriyle birleştirerek kullanmak mümkün. Eğer bilgisayarınızın kapasitesi yeterliyse, bu beş dosyayı birbiriyle birleştirip tek başına kullanmanızı öneriyorum. Böylece hem daha geniş kapsamlı, hem de daha tutarlı ilişkiler oluşturabilirsiniz.

Dosyalar, Gensim paketiyle uyumlu bir şekilde düzenlendi.
1- Haberler cümlelerine ayrıldı ve her satıra bir cümle kondu
2- Tüm harfler küçük harfe dönüştürüldü
3- İnceltme işaretleri kaldırıldı
4- Sayılar yok edildi
5- Tüm noktalama işaretleri kaldırıldı
6- Dolgu sözcükleri (stopwords) devredışı bırakıldı

Aslına bakarsanız sözcüklerin kök haline dönüştürülmesi bu verileri daha da verimli bir hale getirebilirdi. Ancak henüz tüm sözcükleri kök ve eklerine ayırabilen bir çözümümüz yok. (Türkçe sözcükleri kök ve eklerine ayırma çalışmamızın ön hazırlıkları halen devam ediyor. Tamamlandığında, veri dosyalarımızdaki sözcükleri de köklerine dönüştürebileceğiz.)

Dosyaları eğitmek oldukça kolay. Örneğin gundem-nz.txt dosyasını eğitelim:

Eğitilmiş dosyamızı daha sonra yeniden yükleyip kullanabiliriz. Hatta bu dosyayı tekrar eğitmek te mümkün. Ancak tekrar eğitim sırasında eğitilmiş sisteme yeni sözcükler eklememiz mümkün olmuyor. Bu nedenle ilk eğitim verisinin olabildiğince geniş kapsamlı olmasında yarar var.

Eğitilmiş dosyayı yeniden yükleyip test edelim:

Bunlar da elde ettiğimiz sonuçlar:

Yukarıdaki yükleme ve eğitme işlemlerini jupyter-ipyton ile de yinelemeyi düşünüyorum. Eğer imkan bulabilirsem, aynı bilgileri www.kaggle.com/datasets/ alanında da paylaşacağım.

Arkası gelecek…

Ahmet Aksoy

Not: Word2Vec eğitimlerinde kullanabileceğiniz data dosyalarını aşağıdaki GoogleDrive adresinden indirebilirsiniz.
Dosya isimleri şunlar:
1- arsiv-nz.txt
2- dunya-nz.txt
3- ekonomi-nz.txt
4- futbol-nz.txt
5- gundem-nz.txt
6- spor-nz.txt

https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk