Sitemap
Codable

We’re sharing our world, via codes.

6 min readAug 6, 2018

--

Word2Vec, FastText, GloVe

Doğal Dil İşlemede kelimeleri bilgisayarların anlayabilmesi için sayısal değerler haline getiririz. Burada kullanılan yöntemlerden biri “Word Embedding”tir. Word Embedding benzer anlamdaki kelimelerin yakın şekilde temsil edilmesine yarayan bir yöntemdir. Google’da çalışan Tomas Mikolov ve ekibi tarafından 2013 yılında geliştirilmiştir.

Bu yazı Word2Vec, FastText, Glove vektörleri gibi farklı embedding yaklaşımlarını içermektedir.

Türkçe metin verisi arayanlar https://dumps.wikimedia.org/trwiki/ linkinden wikipedia verisine ulaşabilir. pages-articles-multistream , pages-articles içinde wikipedianın xml tabanlı text datası bulunmaktadır.

Gensim kütüphanesi ile wikipedia verisini kolaylıkla okuyup metin verisini elde edebilirsiniz.

Word2Vec Tutorial

One-hot encoding kelimeleri tanımlamak için kullanılan yöntemlerden biridir. Vektörün boyu elimizdeki kelimelerin çeşitliliği kadardır. Vektörde sadece ilgili kelimenin bulunduğu yerin değeri 1 diğer tüm kelimelerin değeri 0’dır. Örneğin “Ali ata bak.” cümlesini sayısal hale getirmek istersek aşağıdaki tablo gibi olmaktadır.

+-------+-------+-----+
| ali | ata | bak |
+-------+-------+-----+
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 1 |
+-------+-------+-----+

Bu yöntemde kelimeler kolay bir şekilde sayısal hale getirilebiliyor iken iki farklı kelime verildiği zaman bu iki kelime arasındaki ilişkileri çıkarma işlemi yapılamamaktadır. Başka bir problem ise kelime sayısı kadar vektör boyu olduğu için vektör içinde çok fazla “0” olacaktır. Bu durum çok fazla hafıza gereksinimine sebep oluyor. Bu tarz problemleri çözmek için daha iyi bir kelime temsiline ihtiyaç duyulmaktadır.

Word2Vec

Word2Vec yukarıda bahsedilen problemleri çözmüş olan kelimeyi temsil etmek için oldukça iyi bir yaklaşımdır. Word2Vec temel olarak birer adet girdi, çıktı ve gizli katmandan oluşan bir yapay sinir ağıdır. Kelime vektörlerini oluştururken pencere genişliği, embedding boyutu gibi hiper parametreler bulunmaktadır. Pencere genişliği hedef kelimenin sağında ve solunda kaç kelime olması gerektiğini belirtirken, embedding boyutu ise her bir kelimenin kaç boyutlu vektör olarak tanımlanacağını belirtir ki bu aynı zamanda gizli katmandaki nöron sayısına karşılık gelmektedir.

Press enter or click to view image in full size

Word2Vec Mimarisi: http://mccormickml.com/assets/word2vec/skip_gram_net_arch.png

Yukarıda örnek olarak Word2Vec mimarisi gösterilmiştir. Gizli katmanda 300 nöron bulunmaktadır. Bu her bir kelimenin 300 boyutlu bir vektör olarak temsil edildiğini göstermektedir. Sözlükte 10.000 farklı kelime olduğu için girdi ve çıktı boyutu 10.000 olarak belirtilmiştir.

Skip-gram ve CBOW olmak üzere bu iki farklı Word2Vec yaklaşımı bulunmaktadır. Bu iki farklı yaklaşımın ne olduğunu kısaca açıklayacağım.

Skip-gram

Skip-gramda girdi hedef kelime iken çıktılar ise hedef olarak verilen kelimenin etrafındaki kelimelerdir. Girdiler ile çıktıları olasılıksal olarak birbirine benzeterek anlamsal olarak en uygun şekilde temsil etmek hedeflenmektedir. Örnek vermek gerekirse “Bugün çok fazla yemek yedim.” cümlesi için ‘fazla’ kelimesi girdi olarak ce pencere boyutu 5 olarak ayarlandığı zaman ‘bugün’, ‘çok’, ‘yemek’ ve ‘yedim’ kelimeleri çıktı olarak kullanılır.

Press enter or click to view image in full size

The Skip-gram model architecture (Source: https://arxiv.org/pdf/1301.3781.pdf Mikolov el al.)

CBOW

CBOW (Continuous Bag of Words) skip-gram’a çok benzer bir yaklaşımdır. Aralarındaki tek fark girişlerle çıkışların yer değişmiş olmasıdır. Buradaki fikir bir kelimenin etrafındaki kelimeler verildiğinde hangi kelimenin bu kelimeler içinde görülme olasılığının en yüksek olduğunu bilmek istemesidir.

“Bugün çok fazla yemek yedim.” örneği üzerinden tekrar gitmek gerekirse bu sefer: “Bugün”, “çok”, “yemek” ve “yedim” kelimeleri girdi olarak verilirken bu kelimelerin arasına hangi kelime olsa daha iyi oluru bulmak hedeflenmektedir.

Illustration 1: https://arxiv.org/pdf/1301.3781.pdf

CBOW modelleri genel olarak daha küçük küçük datasetlerde daha iyi çalışırken Skip-gram modeller daha büyük datasetlerde daha iyi çalışmaktadır. CBOW daha az hesaplama gücü gerektirirken, Skip-Gram daha fazla hesaplama gücü gerektirir.

CBOW iki veya daha çok anlamlı kelimeleri anlamakta iyi değilken Skip-gram daha başarılı sonuçlar vermektedir. Örnek olarak “Hemşire hastalara bakmak için buradaydı (bir işi yapmakla görevli olmak)”, “ Doktor hastaya iyice bakmak için öksürmesini istedi. (muayene etmek)”

Word embeddingler için görsel bir tool arayanlar için: https://ronxin.github.io/wevi/

Veriyi Ön İşleme

  • Veriyi ön işleme yaparken noktalama işaretleri çıkartılmıştır.
  • Tüm text verisi küçük harf içerecek şekilde düzeltilmiştir.
  • Fazla kelime sayısını azaltmak için lemmatizer işlemi yapılıyor ama bu çalışmada yapılmadı.

Eğitim Aşaması

from gensim.models import Word2Vec

Get Mustafa Keskin’s stories in your inbox

Join Medium for free to get updates from this writer.

model = Word2Vec(sentences = sentences, size = 300, window = 5, min_count = 5, workers = cpu_core, sg = 0)

  • sentences: Gensim text verisini girdi olarak list of list olacak şekilde alır.
  • size: Embedding vector boyutu
  • window: Sağında ve solunda kaç kelime olacağı
  • min_count: Belli bir sayının altında geçen kelimeleri almaması
  • workers: Thread sayısı
  • sg: 0 sa Skip-Gram 1 ise CBOW.

FastText

“FastText” 2016 yılında Facebook tarafından geliştirilmiş Word2Vec’in bir uzantısıdır. Tek tek kelimeleri yapay sinir ağına girdi olarak vermek yerine kelimeleri birkaç harf bazlı “n-gram” halinde parçalar. Örneğin elma sözcüğü için tri gram: elm, lma’dır. N-gram ifadesinde yer alan n tekrar derecesini ifade etmektedir. Yani kaçar kaçar böleceğimizi buradaki n ifadesi sağlar. Bir kelime veya harften ne kadar olduğunu anlamamızı sağlar. Elma’nın word vektörü tüm bu n-gram vektörlerinin toplamıdır. Eğitim tamamlandıktan sonra eğitim setinde verilen tüm n-gramlar için kelime vektörlerine sahip olacağız. Nadir sıkılıkta geçen kelimelerin n-gramlarının ortaya çıkma olasılığı düşük olduğu için artık bu kelimeler daha doğru bir şekilde temsil edilebilir. Aşağıdaki bölümde FastText’in Gensim ile nasıl kullanılacağını gösterilmektedir.

from gensim.models import FastText

model_fast = FastText(sentences, size=100, window=5, min_count=5, workers=4,sg=1)

Bazı kelimeler eğitim veri setinde olmamasına rağmen n-gramlar sayesinde ifade edilebilmektedir. N-gram sayısı kelime sayısından kat kat fazla olacağı için eğitim süresi de uzamaktadır. Buna karşılık dokümanlarda az sayıda bulunan kelimeleri Word2Vec’e göre daha iyi bir şekilde ifade edebilmektedir.

GloVe: Global Vectors for Word Representation

Unsupervised algoritmaların temelinde verilerin istatistikleri yer almaktadır. Skip-gram, CBOW gibi modeller anlamsal bilgileri yakalar ama birlikte kullanılma istatistiklerini kullanmazlar. Matris ayrıştırma yöntemleri bu istatistikleri kullanmasına rağmen anlamsal ilişkileri yakalayamamaktadırlar. Bu tarz modellerde anlamsallık yoktur. Pennington ve diğerleri tarafından önerilen “GloVe” modeli olasılık istatistiklerinden yararlanarak yeni bir objektif fonksiyon oluşturarak bu problemi çözmeyi amaçlamaktadır.

Burada X_ij, korpustaki kelime çiftinin (i, j) birlikte geçme sayısıdır. F(x) ağırlık fonksiyonu 3 gereksinime sahiptir:

  • f (0) = 0 olması durumunda bütün terimler sonsuza gitme eğilimi göstermemeli.
  • Birlikte az geçen kelime çiftleri için düşük ağırlık verirken ağırlık fonksiyonu azaltıcı olmamalıdır.
  • X_ij’nin büyük değerleri için bu değer biraz daha küçük olmalıdır.

Daha fazla detay almak için makaleyi okuyabilirsiniz.

Bu proje Stanford tarafından açık kaynak kodlu olarak geliştirilmiştir. Kaynak kodlara https://github.com/stanfordnlp/GloVe adresinden c kodlarına erişebilirsiniz. Ya da python-glove kütüphanesi ile pythondan direk kullanabilirsiniz.

Eğitilmiş GloVe modeli için örnek çıktılar:

Ülke → Başkent İlişkisi

Press enter or click to view image in full size

Ülke → Para Birimi İlişkisi: İngiltere → Euro ilişkisi yakalanabilmişken, Türkiye → Lira ilişkisi yakalanamamıştır.

Ülke başkent ilişkisi düzgün yakalanabilmiş iken cinsiyet tam olarak yakalanamamıştır. Doktor ve hemşire gibi meslekler için cinsiyet olmamalıdır. Aynı şekilde kral → kraliçe ilişkisi yakalanamamıştır.

Press enter or click to view image in full size

Tekil → Çoğul İlişkisi

Press enter or click to view image in full size

Lokasyon

Din

Press enter or click to view image in full size

Sonuç

Word2Vec, FastText ve GloVe vektörleri hakkında yüzeysel bilgi sahibi olmanın yanı sıra bunları nasıl uygulayabileceğimizi öğrenmiş olduk.

CoVe (Contextual Vector), Negative Sampling, Hierarchical Softmax gibi kavramları bir sonraki yazımızda paylaşmayı düşünüyoruz.

--

--