Word2vec yöntemiyle Türkçe sözcüklerin ilişkilendirilmesi
Word2vec sistemi, kabaca sözcüklerin vektörelleştirilmesine dayanıyor. Sözcüklerin birbirine göre konumunu sayısallaştırarak yeni ilişkilerin saptanabilmesini sağlıyor.
Yöntemi geliştiren Google. https://code.google.com/archive/p/word2vec/ adresinde kelime torbası (bag-of-words) ve skip-gram yaklaşımları tanıtılıyor. Ayrıca örnekler ve kaynak kodlarının paylaşıldığı link te verilmiş. Ama ne yazık ki bu sayfaya erişmek artık mümkün olmuyor. Sistemin kaynaklarının açılmasına ilişkin duyuru 14 Ağustos 2013 tarihinde Google Knowledge’tan Tomas Mikolov, Ilya Sutskever ve Quoc Le tarafından yapılmış. İlgili makaleyi http://google-opensource.blogspot.com.tr/2013/08/learning-meaning-behind-words.html adresinde bulabilirsiniz.
https://github.com/danielfrg/word2vec adresinde de konuya ilişkin ayrıntılar ve örnekler var. Burada kullanılan word2vec, bağımsız bir modül. Aynı modülü gensim‘in bir alt modülü olarak kullanmak ta mümkün.
github.com/danielfrg deposunda modülün kurulum ve kullanımıyla ilgili açıklamalar ve örnekler var. Örnek veritabanını http://mattmahoney.net/dc/text8.zip adresinden indirebilirsiniz. 100MB büyüklüğünde bir dosya bu. İçeriğinde noktalama işaretleri kaldırılmış çeşitli yazılar bulunuyor.
Benzer çalışmayı Türkçe bir veritabanı oluşturarak denedim.
4 GB belleği olan makinamda 125MB’lık örnekler sorunsuz çalışabiliyor. Bu boyutun üzerine çıktığım zaman, “buffer overflow” hatası alıyorum. Eğer sizin bilgisayarınızın belleği daha büyükse, daha büyük boyutlu veritabanlarıyla çalışmanız da mümkün.
Elde ettiğim sonuçlardan bazıları şu şekilde:
insan: [‘insanın’ ‘insanoğlu’ ‘ruh’ ‘insanların’ ‘insanlar’ ‘hayvan’ ‘insandan’ ‘birey’ ‘toplum’ ‘doğa’]
macera: [‘serüven’ ‘vaka’ ‘hayatımız’ ‘felaket’ ‘çılgınlık’ ‘evliliği’ ‘kentte’ ‘buluşmamız’ ‘aşk_hikayesi’ ‘eğlence’]
öfke: [‘tiksinti’ ‘korku’ ‘utanç’ ‘kızgınlık’ ‘çaresizlik’ ‘acıma’ ‘şaşkınlık’ ‘hiddet’ ‘dehşet’ ‘üzüntü’]
karanlık: [‘kasvetli’ ‘ıssız’ ‘aydınlık’ ‘karanlığı’ ‘loş’ ‘boğucu’ ‘zifiri’
‘bulanık’ ‘alacakaranlık’ ‘iç_karartıcı’]
öykü: [‘hikaye’ ‘roman’ ‘romanda’ ‘şiiri’ ‘hikayeler’ ‘öyküler’ ‘şiirler’
‘romanı’ ‘dizeler’ ‘öyküsü’]
ayşe: [’emine’ ‘aliye’ ‘makbule’ ‘naciye’ ‘fatma’ ‘dede’ ‘hatice’ ‘zübeyde’ ‘sabiha’ ‘ablası’]
recep: [‘halit’ ‘şakir’ ‘hamit’ ‘nusret’ ‘cemal’ ‘muharrem’ ‘sait’ ‘cemil’ ‘nedim’ ‘refik’]
Veritabanına noktalama işaretlerini kaldırmak dışında yapılmış herhangi bir müdahale yok. Tüm ilişkileri sistemin kendisi saptıyor. İsimlerdeki cinsiyet farkının bile yakalanmış olması dikkat çekici.
Önümüzdeki günlerde, kullandığım Türkçe veritabanı örneklerini de paylaşacağım.
Beni izlemeye devam edin!
Ahmet Aksoy
[…] mekanizması oluşturuyor ve buna bağlı sonuçlar üretiyor. Daha önce yazdığım “Word2vec yöntemiyle Türkçe sözcüklerin ilişkilendirilmesi” isimli yazıma bir göz atmak […]
Merhabalar, elimizde pozitif,negatif ve nötr olarak işaretlenmiş tweetler var. ben bunları word2vec ile eğitmek istiyorum. ardından yeni bir tweet girdiğimde yapılan yorumun poz,neg yada nötr olarak sınıflandırmasını istiyorum.
Nasıl bir yol izlemeliyim. hangi word2vec paketini kullanmalıyım. teşekkürler…
Gensim paketinden yararlanabilirsiniz.
model oluşturma tamamda, test aşamasında sıkıntı var…yani bir kelime girince benzer kelimeleri bulabiliyoruz da cümle girince onun poz,neg yada nötr olduğunu sonucunu nasıl alabiliriz…Çok teşekkürler…(eğitim aşamasında da poz,neg ve nötr olmak üzere 3 sınıf var. )
http://linanqiu.github.io/2015/10/07/word2vec-sentiment/ adresindeki belge bu konuyu anlatıyor. Şahsen duygu analizi konusuna pek girmedim. Özellikle dataset hazırlaması oldukça zahmetli bir çalışma gerektiriyor.