• Sonuç bulunamadı

3. METODOLOJİ VE SONUÇLAR

3.2. PYTHON’DA TENSORFLOW KÜTÜPHANESİNİ İLE TÜRKÇE’DE

3.2.1. Veri Önişleme

Yukarıda bahsedildiği gibi kullanılan Word2vec modelinin oluşturulması ve eğitilmesi için verinin uygun bir şekilde düzenlenmesi gerekmektedir. Bunun için öncelikli olarak, derlemedeki makalelerden noktalama işaretlerinin kaldırılması gerekmektedir ve daha sonra tek satır halinde ayrı ayrı makalelerin her birinin bir satıra yazılması işlemi gerçekleştirilir.

Derlememizi önişleme işlemi yaptıktan sonraki görünümünün bir bölümü aşağıdaki Şekil 3.10’da gösterilmektedir.

Şekil 3.10. Verinin ön işleme aşamasından sonraki hali (Derlemenin sadece bir bölümünün görüntüsü).

Dosyadan görüldüğü gibi her bir makale bir satıra gelecek şekilde ve tüm noktalama vb. işaretlerden arınmış bir şekilde bir metin derlemesi elde edilmiştir.

Programı çalıştırdığımızda aşağıdaki ekran görüntüsü elde edilmektedir.

Tezde kullanılan word2vec eğitim modelinde, Türkçe kelimelerden oluşan Wikipedia derlemesi kullanılmıştır.

Tez çalışmasında oluşturulan dosyada, her satırda farklı bir makale bulunmaktadır. Noktalama işaretleri, rakamlar ve Türkçe stopwords sözcükleri mevcut cümlelerden temizlenmiştir. Bütün bu satırlar birbirinden yeni satır ayıracı ile ayrılmıştır.

Şekil 3.11. Verinin ön işleme aşamasındaki bilgisi.

Tezde kullanılan derlemede toplam olarak 852874 adet makale bulunmaktadır. Derlemede toplam 1,716,679 adet farklı kelime elde edilmiştir.

Word2vec modelimizi eğittikten sonra, eğer bir kelime derlemede 5 defadan daha az geçiyorsa (5’den daha az frekansa sahipse) (min_count=5) bu kelimeler derlemeden çıkarılmıştır ve bu yüzden kalan 183447 kelime bulunmaktadır. Diğer bir ifade ile modelimizin örnek bir boyutu şu şekilde olacaktır. Shape = (183447, 400): toplam kelime sayısı 183447 ve boyut olarak ise 400’dür.

Şekil 3.12. Wikipedia verisi ile ilgili bazı bilgiler.

Wikipedia verisini eğitmek ve modelimizi çıkarmak için gereksinimler

Modelimizin eğitim aşamasında verimizin boyutuna ve bilgisayarımızın işlemci veya ekran kartına göre eğitim süresi uzun sürmektedir. Modelimizi eğittikten sonra ekrana aşağıdaki görüntü gelecektir.

Kullanılan word2vec parametre değerleri

Word2vec modelimizi eğitirken kullandığımız parametre değerleri aşağıda gösterilmiştir. Bu şekilde parametreleri kullanmamızın nedeni diğer çalışmalarda genelde bu değerler üzerinden çalışmalar yapılmasıdır. Ama istenirse bu değerler istenilen şekilde değiştirilip, model tekrar bu değiştirilen parametrelere göre tekrardan eğitebilmektedir. Örneğin biz 1x400 boyutunda yani 400 tane değerden oluşan bir vektör ile her bir kelimenin ifade edilmesini istiyoruz. (Örneğin 1x400 boyutunda yani 400 tane değerden oluşan bir vektör ile her bir kelimenin ifade edilmesi gerçekleştiriliyor.) Mesela Google’ın İngilizce olarak eğitilmiş modelinde bu boyut 300’dür. Bazı makalelerde 200 olarak da kullanıldığı görülmüştür. Tabi bu seçim; başarım oranı, dilin yapısına vs bazı kriterlere göre değişebilmektedir. Eğer istenilen şekilde sonuçlar alınmaz ise boyut (dimentionality) parametresi, pencere boyutu vb. diğer parametreler değiştirebilmektedir.

Bu çalışmada word2vec modelleri eğitilirken kullanılan parametreler aşağıdaki gibidir:

sentences=None windows size=5 dimentionality = 400 alpha=0.025 min_count=5 max_vocab_size=None, sample=0.001 seed=1 workers=4 min_alpha=0.0001 sg=0, hs=0, negative=5, cbow_mean=1, hashfxn=, iter=5, null_word=0, trim_rule=None, sorted_vocab=1 batch_words=10000

Sistem eğitildikten sonra, kelimelerin 2-boyutlu olarak gösterilmesi olayı kavramak ve kelimeler arasındaki ilişki ve benzerlikleri görmek için güzel bir yöntemdir.

Şekil 3.14’de, eğitilmiş bir word2vec modelinde bulunan kelimeler arasındaki ilişkiler 2- boyutlu bir grafik ile gösterilmiştir.

Şekil 3.15. Kelimeler arasındaki ilişkinin 2-boyutlu bir grafik ile gösterimi.

Önerilen model eğitildikten sonra, model üzerinde yapılan bazı işlemler şu şekildedir. Örneğin, istenilen kelimelere en yakın kelimelerin bulunması işlemi yapılsın. Örneğin burada, danışman hocam ve tik üyesi hocalarımızın isimlerine en yakın kelimeleri çıkaralım. Mesela “Pakize” ismine en yakın olan kelimeler aşağıda gösterilmektedir. Bunun için kullanılan komut;

>>> model = word2vec.KeyedVectors.load_word2vec_format('wiki_tr_model', binary=True) >>> model.most_similar("pakize" ,topn=20) [('kezban', 0.7488099336624146), ('cemile', 0.7479231357574463), ('gülizar', 0.7477705478668213), ('hanife', 0.7431975603103638), ('şerife', 0.7430272102355957), ('nermin', 0.7383514642715454),

('kadriye', 0.7383173704147339), ('serpil', 0.7360681891441345), ('dilber', 0.7354772090911865), ('semiha', 0.7345553636550903), ('naciye', 0.7329187989234924), ('zekiye', 0.7323508262634277), ('gülcan', 0.7277635335922241), ('firdevs', 0.7272113561630249), ('hatice', 0.7261263728141785), ('rukiye', 0.7256830930709839), ('rahime', 0.7254846692085266), ('zeliha', 0.7239173650741577), ('melahat', 0.7201818227767944), ('fadime', 0.7180712819099426)]

Elde edilen sonuçlar incelendiğinde görüldüğü gibi “Pakize” ismine en yakın olan 20 kelimeyi arattığımızda bu isme en yakın kelimelerin hepsi birer bayan ismi olarak karşımıza çıkmaktadır. Burada dikkat edilmesi gereken en önemli nokta modelin, bırakın ismi isim ile ilişkilendirmesini, bu ismin hangi cinsiyet isimleri ile ilişkili olduğu bile bulmasıdır.

Mesela şimdi “Sinan” ismine en yakın olan kelimeleri ekrana yazdırmak için kullanılan komut ve elde edilen sonuçlar aşağıdaki gibidir.

>>> model.most_similar("sinan" ,topn=20) [('harun', 0.6272743940353394), ('mithat', 0.6244088411331177), ('ilyas', 0.6107788681983948), ('şakir', 0.6101808547973633), ('oğuzhan', 0.6087159514427185), ('orhan', 0.6021069288253784), ('gökhan', 0.6012135744094849), ('asım', 0.5980596542358398), ('cihan', 0.5974056720733643),

('berkay', 0.5970460176467896), ('alpaslan', 0.5967958569526672), ('hayrettin', 0.5963752865791321), ('halit', 0.5960071086883545), ('turgay', 0.5949937701225281), ('ozan', 0.592127799987793), ('tayfun', 0.5919956564903259), ('adem', 0.5917826890945435), ('serdar', 0.5912593603134155), ('şükrü', 0.5912504196166992), ('cevat', 0.5902488827705383)]

Burada “Sinan” ismine en yakın olan 20 tane kelime eğitilen modelimizde şu şekilde çıkmaktadır.

“Harun”,”Mithat”,”İlyas”,”Şakir”,”Oğuzhan”,”Orhan”,”Gökhan”,”Asım”,”Cihan”, ”Berkay”,…….…….,”Cevat”. Buradan bariz bir şekilde görülüyor ki eğitilen model spesifik olarak verilen bir isme en yakın kelimeler olarak aynı cinsiyet grubundaki isimleri getirmektedir. Bu durum gerçekten word2vec metodunun kelimeler arasındaki benzerlikleri bulma noktasında ne kadar iyi bir sistem olduğunu ve tez çalışmasında eğitilen modelde bu noktada ne kadar başarılı olduğu elde edilen sonuçlar ile gösterilmektedir.

Mesela şimdi “İbrahim” ismine en yakın olan kelimeleri bulmak için kullanılacak komut ve elde edilen sonuçlar aşağıda gösterilmiştir.

>>> model.most_similar("ibrahim" ,topn=20) [('halil', 0.6756748557090759), ('abdulkadir', 0.6535096764564514), ('halit', 0.6337379217147827), ('harun', 0.6311287879943848), ('adem', 0.6273553371429443), ('serkan', 0.6240724325180054), ('ayhan', 0.6234734058380127), ('remzi', 0.6219128966331482),

('ilyas', 0.6152039766311646), ('sezai', 0.6144105195999146), ('vedat', 0.6143486499786377), ('niyazi', 0.6140869855880737), ('cüneyt', 0.612125813961029), ('abdurrahman', 0.6099039316177368), ('yakup',0.60703045129776), ('rıdvan', 0.6052618026733398), ('hamza', 0.6052590608596802), ('sadettin', 0.602109968662262), ('serhat', 0.6011990904808044), ('cevat', 0.6011013984680176)]

Daha sonra “Alper” ismine en yakın olan kelimeleri bulmak için kullanılacak komut ve elde edilen sonuçlar aşağıda gösterilmiştir.

>>> model.most_similar("alperen" ,topn=20) [('halit', 0.7615171670913696), ('cüneyt', 0.7589068412780762), ('rafet', 0.7551712989807129), ('tayfun', 0.7531598210334778), ('tamer', 0.7501511573791504), ('caner', 0.7470196485519409), ('göksel', 0.7435181140899658), ('aytekin', 0.7433404326438904), ('harun', 0.7424810528755188), ('bahadır', 0.7387741804122925), ('tolga', 0.7379166483879089), ('suna', 0.737267017364502), ('fehmi', 0.7351404428482056), ('yener', 0.733652651309967),

('şakir', 0.7332720756530762), ('birol', 0.7303807735443115), ('turgay', 0.729336142539978), ('nazife', 0.7283114790916443), ('oğuzhan', 0.7278720736503601), ('remzi', 0.7274012565612793)]

Bu örneklerden başka, eğitilmiş modelde “Mercedes”, ”Ankara”, ”mühendis”, ”sevgi”, ”macera” kelimelerine en yakın olan kelimeler aşağıda gösterilmiştir.

>>> model.most_similar("mercedes")

[('bmw', 0.7478194832801819), ('audi', 0.6958447694778442), ('honda', 0.690802276134491), ('porsche', 0.6684471368789673), ('volkswagen', 0.6259704828262329), ('renault',

0.6073179244995117), ('chevrolet', 0.5857955813407898), ('fluence', 0.583267092704773), ('rover', 0.5826408267021179), ('plakasız', 0.5817165970802307)]

>>> model.most_similar("ankara")

[('bursa', 0.6280919313430786), ('malatya', 0.6221225261688232), ('konya',

0.6207783222198486), ('adana', 0.6181038618087769), ('antalya', 0.5986434817314148), ('londra', 0.5685679912567139), ('ısparta', 0.5570785999298096), ('amasya',

0.5540170669555664), ('moskova, 0.5476053357124329), ('atina', 0.5439431667327881)]

>>> model.most_similar("mühendis")

[('mühendisi', 0.7074471116065979), ('eczacı', 0.6966454386711121), ('mühendisler',

0.6208227872848511), ('tekniker', 0.6205563545227051), ('teknisyen', 0.6146419644355774), ('profesör', 0.6093071699142456), ('ekonomist', 0.5934444665908813), ('arkeolog',

0.588053822 517395), ('sosyolog', 0.5875837206840515), ('aşçı', 0.5737459659576416)]

>>> model.most_similar("sevgi")

[('muhabbet', 0.6220666766166687), ('hoşgörü', 0.6187677383422852), ('sevgiyle', 0.5753724575042725), ('şükran', 0.5681590437889099), ('neşe', 0.5558518171310425), ('minnet', 0.5477187633514404), ('sevgiyi', 0.5337120294570923), ('merhamet',

0.5256563425064087), ('sonsuz', 0.5156407356262207), ('şefkat', 0.5140125155448914)]

>>> model.most_similar("macera")

[('adrenalin', 0.5206633806228638), ('komedi', 0.5147168040275574), ('sürprizlerle', 0.49619579315185547), ('rüzgarı', 0.4882611632347107), ('aşk', 0.48620516061782837), ('kabus', 0.47754645347595215), ('esiyor', 0.475892037153244), ('çölde',

0.47405001521110535), ('gökyüzü', 0.4731104373931885), ('başarılarla', 0.4716060161590576)]

gruplarına en yakın olan kelimeler başarılı bir şekilde gösterilmiştir. Örneğin “Mercedes” kelimesine en yakın olanlar diğer araba markalarının isimleri olmuştur. Örneğin; BMW, Audi, Honda….

Şimdi verilen çeşitli sözcükler arasında farklı olan kelimeyi bulma işlemini yapalım. Aşağıda kullanılan metot ile, liste halinde verilen kelimeler arasında farklı olan kelimenin bulunması sağlanmaktadır ve sonuç olarak bakıldığında kelime grupları arasında “araba” haricindekilerin hepsi birer hayvan ismi ve çıktı olarak beklenildiği gibi “araba” kelimesi seçilmektedir.

>>> model.doesnt_match(["kedi","tavşan","kuş",”köpek”,"araba"]) 'araba'

Bir kelimenin kelime vektörünün gösterimi:

Bir kelimenin vektörü gösterilmek istenirse örneğin “Fransa” kelimesinin kelime vektörü aşağıdaki gibidir. Bu 1x400 boyutunda bir vektördür. Ekrana tam sığmadığı için sadece bir kısmının ekran görüntüsü aşağıda gösterilmektedir. Tek tek sayıldığında boyutunun 400 olduğu görülmektedir. Bu şekilde tez çalışmasında eğitilen modeldeki her bir kelime 1x400 boyutunda bir vektör ile temsil edilmektedir. Ayrıca 1x100, 1x200, 1x300 ve 1x400 boyutu da ayrıca elde edilmiştir. Kelimeler arasındaki benzerlik, yakınlık ve ilişkilerin kurulmasında bu vektörlerden faydalanılmaktadır. Mesela klasik bir örnek olarak gösterilen olarak “Fransa” kelimesinin vektörel gösterimi aşağıdaki gibidir:

Şekil 3.16. Bir kelimenin vektörel gösterimine örnek.

Benzer Belgeler