Word2Vec Nedir ? ( Türkçe )

Muhammed Buyukkinaci
6 min readJan 7, 2018

--

Word2Vec , kelimeleri vektör uzayında ifade etmeye çalışan unsupervised (no labels) ve tahmin temelli(prediction-based) bir modeldir . Google araştırmacı Tomas Mikolov ve ekibi tarafından 2013 yılında icat edilmiştir. 2 çeşit alt yöntemi vardır: CBOW(Continous Bag of Words) ve Skip-Gram . 2 yöntem de genel olarak birbirine benzemektedir.

3 boyutlu uzayda Word2Vec örneği (Source : https://www.tensorflow.org/tutorials/word2vec)

Örneğin, Oğuz Atay’ın Tehlikeli Oyunlar isimli kitabından bir paragraf aldım(1) . Sonra o paragraftaki tüm karakterleri küçük harfe çevirdim(2). Sonra noktalama işaretleri vasıtası ile cümlelere böldüm(3). (4)’te ise noktalama işaretlerini cümlelerden attım. (5)’te ise noktalama işaretleri içermeyen cümleleri birleştirip paragraf_duzenlenmiş variable’ını oluşturdum. (6)’da ise paragraf_duzenlenmis’deki unique kelime sayısını ve total kelime sayısını buldum{99 kelime içinde 71 tane unique kelime var}. En son olarak da (7)’de Word2Vec formatına uygun olsun diye her bir cümleyi list olarak tuttum çünkü Word2Vec, input olarak list of lists alıyor. Örnek Python kodunun screenshot’u aşağıdaki resimdedir. [Not: Yukarıda bahsettiğim pre-processing işlemleri kolaylık olsun diye stop-words’lerden arındırmayı ve lemmatization(mesela “albayım” kelimesini “albay” kelimesine çevirmek) işlemlerini içermemektedir]

Jupyter Notebook’da yazılmış Python 3 kodu .

Özet olarak demek gerekirse, bu paragrafta 71 tane unique kelime var. Word2Vec modelinde , paragraf_duzenlenmis’teki 99 kelime için her bir kelimeye karşılık olarak 71 boyutlu(Microsoft Exceldeki 71 column gibi)bir vektör oluşturulacak .Mesela “insan” kelimesini alalım. paragraf_duzenlenmis’deki “insan” kelimesi için word2vec’teki 71 column’dan 70 tanesi 0 olacak, 1 tanesi(“insan” kelimesi ile ilgili olan) 1 olacak. Bu işleme one-hot encoding denir.

One-hot encoding örneği (Source :https://ayearofai.com/lenny-2-autoencoders-and-word-embeddings-oh-my-576403b0113a)

Word2Vec için en önemli hyperparameter’lardan bir tanesi window_size’dir. window_size hyperparametresi bize ortadaki kelimenin sağında ve solunda kaç kelime olabileceğini ifade ediyor . Aşağıdaki resim, window_size’ın 3 olduğu bir örnek :

window_size :(Source:https://www.linkedin.com/pulse/word2vec-skipgramcbowglove-shamane-siriwardhana)

CBOW ve Skip-Gram modelleri birbirlerinden output’u ve input’u alma açısından farklılaşıyor . CBOW modelinde window size’ın merkezinde olmayan kelimeler input olarak alınıp , merkezinde olan kelimeler output olarak tahmin edilmeye çalışırken; Skip-Gram modelinde ise merkezdeki kelime input olarak alınıp merkezde olmayan kelimeler output olarak tahmin edilmeye çalışılıyor . Bu işlem cümle bitene kadar devam ediyor. Bir cümleye uygulanan bu işlemler tüm cümlelere uygulanıyor ve böylece başlangıçta elimizde bulunan unlabeled dataya mapping işlemi uygulanmış oluyor ve train etmeye hazır oluyor.

Input layer’daki node sayısı ile output layer’daki node sayısı eşittir çünkü input layer ve output layer “unique” bir kelimeyi one-hot encode etmiş kelime vektörleridir(kelime vektörleri=word vectors = word embeddings) .Source:(https://stackoverflow.com/questions/42281078/word2vec-output-vectors)

Mesela yukarıda bahsettiğim paragrafın 4. cümlesi şudur : “ bir yandan da hiç konuşmak istemiyor”. Bu cümleyi input olarak alan ve window_size=1 olan CBOW modeli şu şekilde çalışıyor : Önce “bir” kelimesini window’un merkezine oturtuyor, sonra sağındaki ve solundaki 1'er kelimeyi ayrı ayrı input olarak alıp(çünkü window_size=1) merkeze oturttuğu “bir” kelimesini Neural Network modeli ile tahmin etmeye çalışıyor. Sonra window’u 1 sağa kaydırıyor, bu sefer window’un merkezine “yandan” kelimesi geliyor. “bir” ve “da” kelimelerinin one-hot encode edilmiş vektörlerini kullanarak “yandan” kelimesini tahmin etmeye çalışıyor.

CBOW Word2Vec modeli. Fıstık yeşili input’u, turuncu ise output’u temsil ediyor .
CBOW modelinNeural Network’te gösterimi(Source:https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/)

Aynı cümlenin window_size =1 olan Skip-gram modeli ise şu şekilde işlemektedir: Merkezdeki kelime input olarak alınıp merkezdeki kelimeye window_size büyüklüğünden daha az yakın olan kelimeler tahmin edilmektedir. Skip-gram modeli ilk önce cümledeki “bir” kelimesini merkeze oturtuyor ve “bir” kelimesini kullanarak “yandan” kelimesini tahmin etmeye çalışıyor. Sonra window’u bir sağa kaydırıyor ve “yandan” kelimesini kullanarak window’un içindeki kelimeleri yani “bir” ve “da” kelimelerini output’a koyarak tahmin etmeye çalışıyor .

Skip-Gram Word2Vec. Fıstık yeşili input’u, turuncu output’u temsil ediyor .
Skip-Gram modelin Neural Network’te gösterimi (Source:https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/)

CBOW modelleri genel olarak küçük datasetlerde daha iyi çalışırken, büyük datasetlerde Skip-gram daha iyi çalışmaktadır. CBOW daha az computation power gerektirirken, Skip-Gram daha fazla computation power gerektirir. CBOW 2 veya daha çok anlamlı kelimeleri anlamakta iyi değilken Skip-Gram 2 veya daha çok anlamlı kelimeleri daha iyi öğrenebilmektedir.

Input layer ile hidden layer arasında aktivasyon fonksiyonu yoktur(linear aktivasyon fonksiyonu) yani weight’lerin input layer’daki node’lar ile olan çarpımına relu, elu, tanh, sigmoid gibi herhangi bir non-linear aktivasyon fonksiyonu uygulanmaz. Hidden Layer ile Output Layer arasında ise softmax aktivasyon fonksiyonu uygulanır. Böylece herhangi bir kelime input olarak alındığında, o kelimenin output’u e’nin üzerine yazılarak tüm e^x lerin toplamına bölünür ve böylece bütün kelimelerin olasılık(probability) değerlerini içeren ve unique kelime sayısı kadar bir büyüklüğe sahip bir vektör elde edilir.

10000 unique kelimeden oluşan corpus’a hidden layer ile output layer arasına softmax uygulanması ve olasılıkların (probability) hesaplanması.(Source:http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/)
Hidden layer’da 300 node’a indirilen sonra output layer’da yeniden unique kelime sayısı boyutuna gelen “ants” kelimesinin yanına gelebilecek kelimeler ve olasılıkları softmax ile hesaplanıyor. Yukarıdaki örnekte, ”car”kelimesinin “ants” kelimesinin yanına gelme ihtimali örnek olarak hesaplanmıştır(Source: http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/)

Word2Vec’in genel çalışma mantığı Artificial Neural Network’te yapılan işlemlere benzemektedir. İlk başta Random olarak(veya başka türlü) weight’ler atanır, forward-propagation yapılır, loss hesaplanır, sonra loss fonkisyonun weight’ler cinsinden partial derivative’leri alınarak back-propagation algoritması uygulanır ve weight’ler update eder. Bu işlem epoch sayısı kadar yapılır. Default olarak Word2Vec, epoch sayısını 5 olarak almıştır. Epoch sayısını 15–20'ye kadar artırmak modeli improve ettirebilir.

Word2Vec bir sürü matrix çarpımı içerdiği için ve büyük bir ağ yapısına sahip olduğu için gradient’lerin hesaplanması işlemi çok karışık,zor ve yavaştır. Bu yüzden Word2Vec’i icat eden araştırmacılar, 2. makalelerinde bu sorunu 3 şekilde çözmüşlerdir(http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/):

  1. Ortak kelime çiftlerini veya kalıpları modellerinde tek “sözcük” olarak almak(mesela sabancı ve holding kelimeleri genelde yan yana ise “sabancı holding” olarak almak)
  2. Stopwords benzeri kelimeleri kullanmamak(mesela “ama” , “belki”, “şey” vb)
  3. Negative Sampling(output layer’daki tüm 0'ların değil sadece çok az bir kısmı{2 ile 20 arasında} gradient’leri update ederken kullanmak)
Word2vec genel işleyişi:(Source:https://www.youtube.com/watch?v=lfqW46u0UKc)

Yukarıda da bahsettiğim üzere en önemli hyperparameter’lardan birisi “window_size”dir. Diğeri ise hidden layer’daki node sayısıdır. Hidden layer’daki node sayısı bize kelimelerin kaç boyutlu uzayda temsil edildiğini söylemektedir. Mesela, hidden layer’daki node sayısı 150 ise, bizim kelimelerimiz 150 boyutlu uzayda hesaplanmıştır. Daha sonra bu 150 boyutlu uzayda temsil edilen kelimeleri iki boyutlu uzayda görselleştirmek için t-SNE yöntemi kullanılabilir.

Worc2Vec ile elde edilmiş çok boyutlu word embeddings’lerin t-SNE ile 2 boyutlu düzleme aktarılması (Source:https://www.mathworks.com/help/textanalytics/examples/visualize-word-embedding-using-text-scatter-plot.html)

Google’ın train ettiği Word2Vec modeli, 100 milyar kelimeden oluşan bir modeldir. Google, böyle büyük miktarda bir datayı Google News vasıtası ile kullanmıştır.Eğer ki ingilizce bir metin üzerinde çalışıyorsanız ve model train etmek istemiyorsanız, Google’ın train ettiği 1.5 gb’lik Word2Vec modelini kullanabilirsiniz.(Aşağıdaki 3 satır, pre-trained Word2Vec modelidir)

from gensim.models import Word2Vec

model = Word2Vec.load_word2vec_format(‘GoogleNews-vectors-negative300.bin’,binary=True, norm_only=True)

Word2Vec modeli distributional hypothesis’e dayanır. Yani, aynı metinde yer alan kelimeler benzer anlam almaya yatkındır. Britanyalı dil bilimci J. R. Firth’in şu sözü, günümüzün Natural Language Processing(Doğal Dil İşleme)uygulamalarının temelini oluşturmaktadır: “ you shall know a word by the company it keeps ” — “Bir kelimeyi onu tutan şirket aracılığıyla bileceksin/anlayacaksın”

Distributional Hypothesis için verilebilecek bir örnek “banking”. “banking” kelimesi genel olarak benzer metinlerde geçmektedir.(Source:https://www.slideshare.net/roelofp/zero-shot-learning-through-crossmodal-transfer)

Aşağıda opentable.com isimli internet sitesinin (Türkiye’deki zomato.com’un ABD’deki muadili gibi) müşterilerine recommendation verirken Word2Vec modelini kullanması gösterilmiştir. Mesela Jazz müzik çalan bir SteakHouse’a gitmek isteyenler için SteakHouse ile Jazz müziğe denk gelen vektörler toplanıyor ve müşterilere bu doğrultuda recommendation yapılıyor

Source:(https://www.youtube.com/watch?v=lfqW46u0UKc)
king - man + woman = queen(source:https://www.youtube.com/watch?v=lfqW46u0UKc)

Kaynakça (Sources):

  1. http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/
  2. http://mccormickml.com/2017/01/11/word2vec-tutorial-part-2-negative-sampling/
  3. https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/
  4. https://www.youtube.com/watch?v=lfqW46u0UKc
  5. https://www.opentable.com/start/home
  6. https://stackoverflow.com/questions/42281078/word2vec-output-vectors
  7. https://rare-technologies.com/making-sense-of-word2vec/
  8. https://www.quora.com/How-does-word2vec-work-Can-someone-walk-through-a-specific-example
  9. https://www.youtube.com/watch?v=ERibwqs9p38
  10. https://alikarahisar.blogspot.com/2016/08/google-stop-words-etkisiz-kelimeler.html

--

--