Eki 012016
 
3.637 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/

Ağu 262016
 
2.893 views

Eğitilmiş word2vec datasını nasıl kullanırız?

Eğitilmiş word2vec datasını nasıl kullanırız?

Elbette bu tür çalışmalarımızı Python ile yapıyoruz. Üstelik interaktif denemeler yapıyorsak, iPython kullanmamız daha doğru. iPython son dönemde jupyter ile entegre çalışıyor.

Bu yüzden önce kullanmakta olduğunuz Python sürümünü aktif hale getirin. Ben Python 3.5.1 kullanıyorum ve bunun için tanımladığım evp35 isimli bir sanal ortamım var.

Sanal ortamımı devreye sokuyorum:

Artık “python” komutum doğrudan python 3.5.1 sürümünü devreye sokuyor. Gerekli modülleri de bu sanal ortam üzerinden yükledim.

Aynı şey jupyter için de geçerli. Yüklemek için vereceğiniz komut şöyle:

Çalışmamızda word2vec modülünü kullanacağız. Onu da yükleyelim:

Artık iPython’u jupyter üzerinden devreye sokabiliriz. Bunun için:

komutunu kullanın ve “New” kutucuğundan “python 3” seçin.

Aşağıdaki kodları kullanabilmeniz için eğitilmiş veri kümemizi de indirmeniz gerekiyor.

https://drive.google.com/drive/folders/0B_iRLUok9_qqOFozeHNFMjRHTVk adresinden hnz_2010.bin isimli dosyayı indirin. Eğitilmiş vektörlerimiz bu dosyaya kayıtlıdır.

Hazırlıklarınız tamamsa, aşağıdaki işlemleri siz de kendi bilgisayarınızda uygulayabilir, yeni denemeler yapabilirsiniz.

Deneyimlerinizi benimle paylaşmayı da lütfen unutmayın!

Ahmet Aksoy
Açık Kaynak DerlemTR Proje Yöneticisi

[gist https://gist.github.com/ahmetax/58200ef5014176438aea2ad78624686a]

Takıldığınız yerler olursa, Yorum bölümünden bana ulaşabilirsiniz.

Tem 102016
 
1.735 views

Ubuntu 16.04 Hikayeleri No-03

Eski sistemlerimde yerel olarak genellikle MySQL veritabanı kullandım. PhpMyadmin ile kolayca işlem yapabilmek bende kalıcı bir alışkanlık yarattı sanırım. Bir başka alışkanlığım ise, yerel MySQL’i paralo vermeksizin kullanmak.
Bu, güvenli bir yöntem olmamakla birlikte işin kolayına kaçmak ağır basıyor.

MySQL 5.7 parolasız root bağlantısı kurmak

Lafı hiç dolandırmaya gerek yok. MySQL 5.7 sürümü, root için boş parola verdiğinizde işlem yapmanıza izin vermiyor. Ya da en azından zorluk çıkarıyor.

/etc/phpmyadmin/config.inc.php dosyasında

Ubuntu 16.04 Hikayeleri No-03

satırını düzenlediğinizde

komutuyla veritabanına sorunsuz erişebilirsiniz. Ama ne phpmyadmin, ne MySQL-workbench, ne de adminer ile veritabanına erişmek mümkün olmuyor.

Bu nedenle ben de en pratik çözümü uygulayıp MySQL 5.6’ya geri dönüş yaptım.

Şu anda veritabanıma phpmyadmin üzerinden parola girmeye gerek kalmadan sorunsuz girebiliyorum.

Ubuntu 16.04’e yüklü MySQL 5.7’yi kaldırmak pek te kolay bir iş değil. Öncelikle mevcut sürümü tamamiyle kaldırmanız gerekli. Aksi halde alt sürümü sağlıklı bir şekilde kurmanız mümkün olmuyor.

Benim kullandığım yöntem özet olarak şu şekilde. Sizin sisteminizde farklı işlemler yapmanız gerekebilir. Önemli olan eski sürümü tamamiyle temizlemeden kuruluma geçmemek.

Aklınızda bulunsun!

Ahmet Aksoy

Referans: ubuntuforums.org/showthread.php?t=2321196

Haz 162016
 
2.324 views

Ubuntu 16.04 Hikayeleri No-01

İnsanlar internette hep başarı öykülerini anlatmayı tercih ediyorlar. Oysa başarısızlık öyküleri çok daha öğreticidir.

O yüzden ben, bu sayfalarda Ubuntu 16.04 ile ilgili denemeleri sonucu ister başarılı, ister başarısız olsun sizlerle paylaşacağım.

İlk öykümüz, Ubuntu 16.04 üzerine MySQL kurulumu ile ilgili. Eğer aynı işlemleri daha önce denemediyseniz, sonu sizin için bir sürpriz olabilir.

Linux dünyasında MySQL yerine PostGreSQL daha fazla revaçta. Ama ben, windows döneminden kalma alışkanlıklarımdan biri olarak, kişisel veritabanlarımdan bir çoğunu MySQL üzerinde tutuyorum. Bunların en başında da kullandığım sistem ve programlara ilişkin kişisel yorum ve login bilgileri veritabanı geliyor.

İşte bu yüzden, MySQL kurulumu benim için öncelikli bir işlem.

Ubuntu 16.04 MySQL

Resim: en.wikipedia.org

Bu amaçla önce Google’a danıştım: “Ubuntu 16.04 MySQL installation”.
134 bin yanıt geldi. (Aynı sorguyu Türkçe olarak yaptığımda sadece 6790 sonuç geldi ve açıklamaların çoğu İngilizceydi. Sanki son dönemlerde Google’ın sorgulardaki başarı oranı giderek düşüyor. Yaşanan bilgi enflasyonu, onun da kafasını karıştırıyor herhalde…)

MySQL kurulumu için verdiğim komutlar şöyle:

Yerel bilgisayarımda genellikle mysql root parolasını boş bırakırım. Bu kez ne yaptımsa başaramadım ve 8 haneli bir şifre tanımlamak zorunda kaldım.

Sonra test komutumu verdim:

Parola sorduğunda son tanımladığım parolayı verdim. Beğenmedi.
Boş parola verdim. Olmadı. Root yerine “superuser” bilgilerini kullandım. Iıh! Parolasız denedim. Yine olumsuz…

Temel hata mesajı şu:

Tekrar internete dönüp, aldığım hata mesajıyla ilgili çözüm önerilerini araştırıp uyguladım. Ama ne yaptımsa sonuç alamadım.

Sonra filmi başa sardım:

Yeniden kurmayı denedim:

Nuh diyor, peygamber demiyor!

Burada pes ettim… Şimdilik…

16.04 ile ilgili maceralarımı bu sayfalardan sizlerle paylaşmaya devam edeceğim. Siz de benzer deneyimlerinizi benimle paylaşırsanız, belki birilerine yardımımız dokunur.

Biliyorsunuz, bilgi paylaştıkça büyüyor.

Ahmet Aksoy

Referanslar:

Haz 112016
 
3.331 views

Python için Yeni bir Çalışma Çerçevesi Kivy

Python‘un bana göre en zayıf tarafı, doğrudan desteklediği güçlü bir görsel çalışma çerçevesi (framework) olmamasıdır. TkInter bu konuda oldukça zayıf kalmaktadır. Qt tabanlı diğer çözümler ise, hem dolaylı hem de zordur.

Kivy bu boşluğu doldurmaya aday bir girişim. Henüz yeterince kullanıcı dostu olduğunu söylemek kolay değil. Ama, hiç olmazsa yeni bir seçenek sunuyor. Üstelik bu seçenek, mobil cihazlara yönelik çalışmalara da açık.

Bu yazımda size Ubuntu 14.04 LTS işletim sistemi üzerinde, Python 3.5.1 sürümü için Kivy 1.9.2 kurulumunun nasıl yapılacağını anlatacağım.

Pythonun son sürümünün bilgisayarınızda zaten kurulu olduğunu varsayıyorum. Ayrıca virtualenv de kurulu olmalıdır. (Virtualenv uygulaması, sistemden bağımsız sanal bir yapı oluşturur. Genel işleyişi etkilemeden bu ortamda istediğiniz herşeyi yapabilir. İşiniz bittiğinde de geride hiç bir çöp bırakmadan yaptıklarınızı silip temizleyebilirsiniz.)

Kurulumumuzu “sanal ortam” (virtualenv) ile yapılandıracağız.

Python için Yeni bir Çalışma Çerçevesi Kivy

Kurulumumuzu tamamladık.

Şimdi de klasik “Merhaba Dünya” kodlarımızı hazırlayalım:

Şimdi de çalıştıralım:

merhaba.py

Elbette kivy’nin tek yaptığı bu değil.

https://kivy.org anasayfasını incelerseniz, örnek kodlar ve açıklamalar bulabilirsiniz.

Bir sonraki yazımda, daha kapsamlı kivy kod örneklerine yer vereceğim.


Ahmet Aksoy

Not: Eğer kodlarınızı çalıştırdığınızda aşağıdaki gibi hata mesajları alırsanız, aldırmayın. Bu tür mesajlar sizin bilgisayarınızda mevcut (aktif) olmayan giriş-çıkış cihazlarından kaynaklanıyordur:
PermissionError: [Errno 13] Permission denied: ‘/dev/input/event5’

Not2: Yukarıdaki yazıyı, Kivy konusunda uzman olduğum için değil, kendi bilgisayarıma kurarken harcadığım deneme-yanılma sürelerini sizlerin de harcama olasılığını azaltmak amacıyla yazdım. Ne yazık ki Kivy hakkında yeterince aydınlatıcı doküman bulmak kolay değil. Ama bu şekilde deneyimlerimizi birbirimizle paylaşırsak, daha kolay ve hızlı çözümler elde edebiliriz.

May 102016
 
1.920 views

Türkçe Platformu İçin Çağrı

Merhaba arkadaşlar,

2016 yılı Şubat ayında açık kaynaklı “Türkçe Derlem” projesini başlattım. Derlem, ya da latincesiyle “corpus” sözcüğü herhangi bir dilin kullanmakta olduğu tüm sözcükler öbeğini tanımlıyor. Kökler, gövdeler, takılar, birleşik kelimeler, ifadeler hepsi bunun içinde. Örneğin sözlükler daha çok kelime kökleri ve gövdeleriyle ilgilenir; derlemde ise kökü ve takılarıyla her türlü sözcük bulunur.

Böyle bir projeye başlamışken sadece “derlem” çalışmalarıyla yetinmek yerine, sözcüklerin kullanım frekanslarını da belirlemenin ilerisi için çok daha yararlı olacağını düşündüm. O yüzden bizim derlem çalışmamız aynı zamanda sözcük frekanslarını da içeriyor.

Böyle bir veritabanının herkese açık olarak sunulmasının, Türkçe üzerine yapısal çalışmalar yapmayı planlayanlar için eşsiz bir kaynak olacağını düşünüyorum.

İlk meyvelerini vermesinin uzunca bir süre alacağını düşündüğüm bu çalışma, olağanüstü bir hızla gelişti. İki ay içinde 3 milyon altıyüz binden fazla birbirinden farklı sözcük belirledik. Bunun için 3 bine yakın kitap, Hürriyet Gazetesinin 6 yıllık arşivi ve RadikalBlog kaynaklarını taradık. Elde ettiğimiz kelimelerden bir kısmı yabancı kökenli veya hatalı olsa da büyük bir iş başardığımız kesin. Çalışmalarımızda yazılım dili olarak Python kullandık.

Verileri kolayca topladık ama, ayıklama ve paylaşma işi hiç te öyle olmadı. Zaten düzeltme ve ayıklama çalışmaları samanlıkta iğne aramaktan pek te farklı değil. İnsanı özendiren, motive eden hiç bir tarafı yok. Etkin bir paylaşım için de güçlü bir web sistemi şart.

Facebook üzerindeki grubumuzda bu işe “gönüllü aramak” için yazdığım bir mesaja verdiği yanıtta, bir arkadaşımız “oyunlaştırma” tekniğinden faydalanmamızı önermişti.

Oyunlaştırma (gamification) oldukça yeni bir kavram. Ama kapsamı o kadar geniş ki, derli toplu bir yönerge altında toparlanması pek te olası görünmüyor. Ama çok önemli!… Aslında hiç bir çekiciliği olmayan ama yapılması gereken çalışmalara çeşni katarak onu bir ilgi odağı haline getirmek, üstelik bu ilgiye süreklilik kazandırmak arka plandaki “asıl” işin çok daha kolaylıkla gerçekleşmesini sağlıyor. Acı veya yavan bir ilacı, lezzetli bir şurup haline getirmek gibi bir şey…

Son bir kaç haftadır sürekli bu konu üzerine kafa yoruyor, internette araştırmalar yapıyor, okuyorum.

İnsanlarımıza sürekli kullandıkları için kanıksadıkları dilimizin önemini, gücünü ve güzelliğini yeniden farkettirmek için onlara farklı tadlar, sürprizler sunmak gerekiyor. Bunun en kolay yolu da yapılacak çalışmalara eğlence ve pozitif rekabet unsurları kazandırmak.

Bu amaçla yeni bir site kurmak gerekiyor. Arka plandaki amacımız, elimizdeki veritabanını hem daha sağlıklı hale getirmek, hem de zenginleştirmek olmalı.

İşte bu çalışma için oldukça kapsamlı bir yapıya ihtiyacımız olacak. 10 yıllık bir program öngörüsü bence şunları içermeli:
1. Projenin ticari ve politik kaygılardan mutlaka uzak tutulması
2. En az 10 yıllık alan adı satın alınması
3. En az 10 yıllık hosting alanı (Python temelli çalışmalara uygun, aynı anda binlerce kişiye servis verebilecek bant genişliğine ve başlangıç olarak tahminen 100 GB’lık bir kayıt alanına sahip)
4. Kurulacak sisteme uygun bir güvenlik yapısının kurulması
5. Sistemin başka ülkelerde de aynalarının oluşturulması
6. Bu sistemi ve diğer çalışmaları desteklemek üzere bir platform (dernek?) oluşturulması
7. Mali ve teknik destek sağlayacak Destekçi kurumlarla işbirliği kurulması
8. Üniversitelerle, akademik kuruluşlarla bağlantı kurulması
9. Benzer amaçlı dernek ve platformlarla bağlantı kurulması
10. Yayın kuruluşlarıyla bağlantı kurulması
11. Türkçe sözlük ve ansiklopedi sistemleriyle bağlantı kurulması
12. Türkçe üzerinde yapay zeka çalışması yapan ve/veya tez hazırlayanlarla bağlantı kurulması, bu tür çalışmaların özendirilmesi
13. Türkçe ile ilgili akademik ve / veya kişisel makalelerin sitede yayınlanması ve basımının desteklenmesi
14. Oyunlaştırma tekniğini kullanarak, mevcut bilgilerin daha sağlıklı hale getirilmesini ve yeni bilgiler kazanılmasını sağlayacak uygun programların modüler olarak geliştirilmesi
15. Diğer Türkçe konuşan ülkelerdeki benzer kuruluşlarla bağlantı kurulması
16. Diğer Türki dillerin veritabanına kazandırılması
17. Türk dili ve Türkçe eserler ile ilgili yarışmalar düzenlenmesi
18. Yabancı yazar ve kuruluşların Türk dili ile ilgili araştırmalarının özendirilmesi
19. Elde edilen verilerin güvenli ve sağlıklı olarak paylaşılabilmesinin sağlanması
20. Türkçe yazarların desteklenmesi
21. Türkçe ağız ve lehçelerin derlenmesi
22. Türkçenin tarihsel gelişim ve değişiminin araştırılması
23. Türkçenin yapay zeka ile çözümlenmesi; sesin karakterlere, karakterlerin sese dönüştürülmesi
24. Öğretmenlerle ve eğiticilerle bağlantı kurulması

Bu listedeki işlemler önem veya zamana bağlı bir sıralamaya sahip değil. Bu yüzden tekrar tekrar ele alınıp geliştirilmesi ve gerçekçi bir çalışma programına oturtulması gerekiyor.

Hedefimizin büyük olması, herşeyin baştan hazır olmasını şart koşmuyor. Şu anda elimizde olanlarla başlayabiliriz. Çalışmalarımız ilerledikçe, yeni katılımcılar ve destekçiler kazanacağımızdan eminim.

Web sitesi çalışmalarını geliştirirken, ilk aşamada çok daha küçük boyutlu bir sistem kullanabiliriz. Gerekirse yerel sunucular üzerinde çalışırız.

Bu proje beni giderek daha fazla heyecanlandırıyor.

Umuyorum ki, benim heyecanımı paylaşacak diğer arkadaşlarla en yakın zamanda bir araya geliriz.

Bu grupta sadece yazılımcılara değil, Türkçeyi seven ve onunla ilgili çalışmalara katkıda bulunabilecek her kesimden insana ihtiyacımız olacak. Bu yüzden, bu konuyu lütfen çevrenizdekilerle de paylaşın. Olabildiğince fazla kişiye ulaşalım.

Yapılması gereken ve yapabileceğimiz çok şey var.

Ahmet Aksoy
10.05.2016