GloVe Kütüphanesi

Standford tarafından açık kaynak kodlu geliştirilen bir proje olan GloVe ile sadece kelimelerin anlamsal bilgilerini görmüyor aynı zamanda birlikte kullanılma istatistiklerini de anlamaya başlıyoruz.

Buradaki örneği ele alarak GloVe kullanımına yakından bakalım.

İlk olarak python_glove kütüphanesini içe aktarıyoruz.

pip install glove_python

Ardından metin için ön işleme adımlarını uyguluyoruz. Stopwords için farklı stopword setleri var. Projede nltk stopword korpusu kullanılmış. Tabi bunun için ilk olarak nltk korpusunu indirmemiz gerekiyor.

import nltk nltk.download()

Şimdi vektörize edilecek satırların listesini verelim.

#list of sentences to be vectorized lines=[“Hello this is a tutorial on how to convert the word in an integer format”, “this is a beautiful day”,”Jack is going to office”]

Stop Wordsleri Silelim

from nltk.corpus import stopwords stop_words=set(stopwords.words(‘english’)) lines_without_stopwords=[] #stop words contain the set of stop words for line in lines: temp_line=[] for word in lines: if word not in stop_words: temp_line.append (word) string=’ ‘ lines_without_stopwords.append(string.join(temp_line)) lines=lines_without_stopwords

Kök Bulma İşlemini Yapalım ( Lemmatization )

#import WordNet Lemmatizer from nltk from nltk.stem import WordNetLemmatizer wordnet_lemmatizer = WordNetLemmatizer() lines_with_lemmas=[] #stop words contain the set of stop words for line in lines: temp_line=[] for word in lines: temp_line.append (wordnet_lemmatizer.lemmatize(word)) string=’ ‘ lines_with_lemmas.append(string.join(temp_line)) lines=lines_with_lemmas

Veriyi Hazırlama

Girişimizdeki metni dizilerden oluşan bir dizi haline getiriyoruz.

Önceki hal:


lines=[“Hello this is a tutorial on how to convert the word in an integer format”,“this is a beautiful day”,”Jack is going to office”]

Sonraki hal:

lines=[[‘Hello’, ‘this’,’tutorial’, ‘on’, ‘how’,’convert’ ,’word’,’ integer’,’format’],[‘this’ ,’beautiful’, ‘day’],[‘Jack’,’going’ , ‘office’]

lines=[[‘Hello’, ‘this’,’tutorial’, ‘on’, ‘how’,’convert’ ,’word’,’ integer’,’format’],[‘this’ ,’beautiful’, ‘day’],[‘Jack’,’going’ , ‘office’]
new_lines=[] for line in lines: new_lines=line.split(‘’) #new lines has the new format lines=new_lines

Şimdi GloVe modelimizi inşa edelim:

#glove kütüphanesini içe aktardık
from glove import Corpus, Glove
#korpus nesnesi oluşturduk
corpus = Corpus() 
#corpusu GloVe ile eğittik
corpus.fit(lines, window=10)
#Glove objesi oluşturduk
glove = Glove(no_components=5, learning_rate=0.05)
 
glove.fit(corpus.matrix, epochs=30, no_threads=4, verbose=True)
glove.add_dictionary(corpus.dictionary)
glove.save('glove.model')

Bu kodda Corpus.fit in aldığı parametrelere yakından bakalım:

lines: Ön işleme sonucunda oluşturduğumuz iki boyutlu dizilere işaret ediyor.
window: İki kelime arasındaki benzerlik kurulurken kullanılan maksimum uzaklık parametremiz.

GloVe parametrelerine bakalım:

no_of_components: GloVe tarafından oluşturulan çıkış vektörünün boyutu learning_rate: Gradient Descent olarak bilinen Dereceli Azalma değeri.

GloVe.fit parametrelerine bakalım:

cooccurence_matrix: Kelimelerin benzerlik matrisi.

epochs: Verisetindeki geçişlern sayısını veriyor.Bilgisayar hafızasındaki limitler nedeniyle hesaplamalarda sorun çıkmasına karşı epoch kullanılıyor. Örneğin 10 değerinde eğitim setini 10 parçaya bölüp bu 10 kerede bu parçaların her biri eğitimden geçiriliyor.

no_of_threads: Algoritma çalışırken kullanılan iş parçacığı sayısı

Bu işlemden sonra glove.add_dictionary(corpus.dictionary) koduyla sözlüğümüzü glove objesinin içine ekliyoruz.

Artık hazırız. Örnek bir kod çalıştıralım.

print glove.word_vectors[glove.dictionary['samsung']]
OUTPUT:
[ 0.04521741  0.02455266 -0.06374787 -0.07107575  0.04608054]

Samsung’un vektörel karşılığı bu şekilde oluştu. GloVe hakkında daha fazla bilgi için kütüphanenin mucidi Standford tarafından yayınlanan ana kaynağa buradan ulaşabilirsiniz.

You may also like...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir