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! 🙂 )
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:
import gensim sentences = gensim.models.word2vec.LineSentence("gundem-nz.txt", max_sentence_length=10000) model = gensim.models.Word2Vec() model.build_vocab(sentences) model.train(sentences) model.save("gundem-nz.w2v")
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:
import gensim model = gensim.models.Word2Vec.load("gundem-nz.w2v") liste = ['insan','macera','öfke','karanlık','öykü','savaş','ayşe','recep'] for l in liste: try: print("\n{} : ".format(l), model.most_similar(l,topn=10)) except Exception as e: print("\nHata: {}".format(e))
Bunlar da elde ettiğimiz sonuçlar:
insan : [('insanın', 0.7184045910835266), ('insanı', 0.6390043497085571), ('telif', 0.623468816280365), ('bireyin', 0.5812070369720459), ('hükümranlık', 0.5806869268417358), ('insanların', 0.5787061452865601), ('hayvan', 0.5763564109802246), ('vatandaşımızın', 0.5759616494178772), ('insanımızın', 0.5680772066116333), ('insana', 0.5672792196273804)] macera : [('adrenalin', 0.6709521412849426), ('uyanış', 0.6266379356384277), ('fantezi', 0.623974084854126), ('sürprizlerle', 0.6162750720977783), ('komedi', 0.6155664324760437), ('güzellik', 0.613574206829071), ('imiş', 0.6111560463905334), ('dargınlık', 0.607806921005249), ('delibal', 0.6044014692306519), ('aşk', 0.6036908626556396)] öfke : [('öfkeyi', 0.7293636202812195), ('kutuplaşma', 0.7028578519821167), ('kin', 0.6928874254226685), ('nefretin', 0.6928364038467407), ('öfkenin', 0.679904043674469), ('kine', 0.6615806818008423), ('kamplaşma', 0.6605017185211182), ('korku', 0.6601911783218384), ('korkular', 0.6572867631912231), ('umutsuzluk', 0.6526254415512085)] karanlık : [('kirli', 0.7713050842285156), ('kanlı', 0.6834880709648132), ('sinsi', 0.6720633506774902), ('sinsice', 0.6145445108413696), ('kısır', 0.6139363050460815), ('zifiri', 0.6014318466186523), ('barbar', 0.6010445356369019), ('şeytani', 0.6009888648986816), ('sömürgeci', 0.5817840099334717), ('faşizmin', 0.5803823471069336)] öykü : [('canlandırdığı', 0.6937543153762817), ('şevval', 0.6839919090270996), ('ezgi', 0.6804139614105225), ('oyuncusu', 0.6786413192749023), ('canlandıran', 0.6749861240386963), ('dizisinde', 0.6706443428993225), ('ayça', 0.6693533062934875), ('şebnem', 0.6675156354904175), ('beste', 0.6666886806488037), ('oyuncu', 0.664427638053894)] savaş : [('çatışma', 0.644310712814331), ('sovyet', 0.5768229961395264), ('savaşın', 0.5562214851379395), ('çatışmalar', 0.5305419564247131), ('düşman', 0.521373987197876), ('esad', 0.5169921517372131), ('huruç', 0.5067846775054932), ('darbe', 0.506030797958374), ('rejim', 0.5023961067199707), ('uçaklarının', 0.5002716779708862)] ayşe : [('hatice', 0.8990086913108826), ('fatma', 0.8909963965415955), ('zeynep', 0.8839824795722961), ('zehra', 0.8828982710838318), ('melike', 0.873733639717102), ('merve', 0.8727182149887085), ('perihan', 0.8706949353218079), ('aynur', 0.8698521256446838), ('nurcan', 0.869812548160553), ('gamze', 0.8696713447570801)] recep : [('osman', 0.6628806591033936), ('bilal', 0.6573498845100403), ('süleyman', 0.655899167060852), ('abdullah', 0.6490527987480164), ('muzaffer', 0.64844810962677), ('necmettin', 0.6424939632415771), ('saffet', 0.6397663354873657), ('ahmet', 0.6386175751686096), ('suat', 0.6368176937103271), ('abdurrahim', 0.6269806027412415)]
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
Hocam merhabalar..
Buradaki sonuçları nasıl yorumlamamız gerekiyor ?
Merhaba Sezer bey,
Şimdilik yorumlanacak fazla bir şey yok. Bu çalışmalar, hem veri setleri, hem de kullanılan yöntemlere ilişkin deneysel girişimler. Ülkemiz büyük veri analizleri konusunda pek de iyi bir seviyede değil. Ama bu durumu değiştirmek mümkün. Benzer çalışmaları daha da geliştirerek, bunları daha fazla kişiye ulaştırarak, nelerin yapılabileceğini göstererek hem kendimizi geliştirebilir, hem de ülkemizin gelişimine katkıda bulunabiliriz.
Kelime vektörleri benzer koşullara uygun adayları belirleme açısından çok yararlı. Benzer yaklaşımı belge düzeyinde de kullanmak mümkün. Büyük miktarda veriyi kullanarak elde edilen vektörleri benzerlik ve farklılıkları tespit etmek amacıyla kullanabiliriz.