Doğal Dil İşleme Serisi 3: Vektör Uzayı Modelleri

Yusuf ANI
novaresearchlab
Published in
6 min readSep 14, 2020

Merhabalar, yazı serimizde Deep Learning AI ekibinin “Natural Language Processing with Classification and Vector Spaces” adlı NLP kursunun geniş özetini bulacaksınız. 4 haftadan oluşan bu kursun ana başlıkları şu şekilde:

1- Sentiment Analysis with Logistic Regression — Lojistik Regresyon ile Duygu Analizi

2- Sentiment Analysis with Naïve Bayes — Naïve Bayes ile Duygu Analizi

3- Vector Space Models — Vektör Uzayı Modelleri

4- Machine Translation — Makine Çevirisi — Giriş Seviyesi

Bu yazıda kursun üçüncü bölümü olan Vector Space Models konusunu özetledik. Yazımızın sonunda Github kodumuzu bulabileceksiniz. Ayrıca diğer yazılarımıza profillerimizden ulaşabilirsiniz. Keyifli okumalar :)

Vektör Uzayı modelleri doğal dil işlemede olmazsa olmaz başlıklardan biridir. Kısaca kelimelerin birbirleriyle olan ilişkilerini göstermenin bir yoludur. Daha iyi bir açıklama için neden gerekli olduğuna bakalım.

Şekil -1

Şekil-1'de 4 adet soru cümlesi görülüyor. Sol tarafta olan cümlelerin ilk 3 kelimesi aynı olmasına rağmen farklı anlamları var (Nereye gidiyorsun?, Nerelisin?). Sağ tarafta ise kelimeleri farklı olmasına rağmen aynı anlamda 2 soru cümlesi var. Bu durumda bizim kelimelerin anlamlarını tutacak yapılara ihtiyacımız var. İşte bu kelimeler arası bağlantıları tutmak için vektör uzayı modellerini kullanıyoruz.

Elimizdeki bilgileri (bu örnekte kelimeleri bilgi olarak aldık) vektörlere çeşitli şekillerde yerleştirerek anlamsal bağlantıları elde ediyoruz. Bu bağlantıları değişik yöntemlerle kurabiliriz:

Word by Word (Kelime Kelime)

İki kelime arasındaki ilişkiyi hesaplamak için bu iki kelimenin aynı cümlelerde kaç kez birlikte kullanıldığını hesaplayabiliriz. Uzun cümlelerdeki anlam bozukluğu ve hesaplama karmaşasını da hesaba katarak, iki kelime arasındaki uzaklık ‘k’ değerinden fazla ise hesaplama yapmamamız gerekir.

Şekil-2

Şekil-2'deki örnekte de görüldüğü üzere k parametresi 2 seçilerek, “data” kelimesinin uzaklığa bağlı olarak diğer kelimelerle ilişkisi hesaplanmıştır. Burada “I” kelimesinin ağırlığının 0 olmasının nedeni her 2 cümlede de “I” kelimesinin “data” kelimesine uzaklığının 2'den fazla olmasıdır.

Ayrıca “data” kelimesinin diğer birçok kelime ile bağlantısı olmayabilir. Bu durumda bu sıfırlardan kurtulmak için ilk yazımızdaki sparse matrix yöntemi kullanılabilir.

Word by Document (Belgeye Göre Kelime )

Bu yöntem önceki yönteme çok benzemektedir. Farkı ise bu sefer 2 kelimenin ortak kullanıldığı cümleler yerine, kelimelerin belge kategorileri ile arasındaki ilişki hesaplanır.

Şekil-3

Şekil-3'te “data” kelimesi Machine Learning kategorinde 9320 kere geçerken, Entertainment kategorisinde 500 kere geçmiştir.

Bu sıklıkları bir 2 boyutlu bir düzlem üzerinde gösterirsek “data” kelimesinin Machine Learning kategorisi ile daha ilişkili olduğu sonucuna varılabilir.

Şekil-4

Buraya kadar neden vektör uzaylarını kullanmamız gerektiğini öğrendik, şimdi çıkarımlarda bulunmak için ne gibi algoritmalarımız var onlara bakalım.

Öklid Uzaklığı ( Euclidean Distance )

Öklid uzaklığının matematiksel olarak ne olduğunu orta öğretim ve lise eğitimi boyunca çok fazla gördük. Gerçek hayatta “Ne işimize yarayacak ?” sorusunun bir cevabını bu örnekte görüyoruz. Öklid uzaklığı aslında bizim için bir benzerlik metriğidir. Kelimelerin uzaklıklarını bularak kategorilerin birbirlerine kadar benzediğini hesaplayabiliriz.

Şekil-5 Örnek Bir Öklid Uzaklığı Hesaplanması

Gerçek hayat problemlerinde 2'den fazla boyut oluyor. Bunun için n boyutlu Öklid uzaklığı Şekil-6'daki gibi hesaplanabilir. Cebirden hatırlarsanız, bu formül, karşılaştırdığınız vektörler arasındaki farkın normu olarak da bilinir.

Şekil-6 N boyutta Öklid Uzaklığı Hesaplanışı
Şekil-7 Öklid uzaklığının Python dilindeki hesaplanışı

Kosinüs Benzerliği (Cosine Similarity)

Kosinüs Benzerliği de Öklid Uzaklığı gibi bir benzerlik ölçme metriğidir. Temelde iki vektör arasındaki açının kosinüsünü kullanır.

Kosinüs benzerliği kategorilerin eşit olarak dağılmadığı durumlarda daha çok kullanılır.

Örnekle açıklayalım:

Şekil-8 Öklid Uzaklığı vs Kosinüs Benzerliği

Şekil-8'deki örnekte tarım derleminin(Agriculture corpus) yiyecek (Food) derlemine mi tarih (History) derlemine mi daha çok benzediğini bulmaya çalışalım.

Eğer Öklid uzaklığı kullanırsak d1>d2 olduğu için tarımın tarihe daha yakın olduğu sonucuna varırız. Tarım her ne kadar tarihle bir ilişki içerisinde olmuş olsa da yiyecek ile çok daha yakın olması gerekirdi. Buradaki hata yiyecek derleminin veri kümemizde çok az yer almasından kaynaklanmaktadır.

Eğer Kosinüs benzerliği kullanırsak β> α olduğu için tarımın yiyecekle daha fazla ilişkili olduğu sonucuna varırız. Peki bu açıları nasıl hesaplayacağız?

Vektörler arasındaki açının bulunma formülü hakkında detaylı bilgi istiyorsanız buradan ulaşabilirsiniz.

Şekil-9

Kosinüs benzerliğinin diğer avantajı ise oransal sonuç vermesidir. cos 0 = 1 ve cos 90 = 0 olmasından dolayı sonuçlar 0 ile 1 arasına sıkışmıştır.

PCA Algoritması

Çoğu zaman çok yüksek boyutlarda vektörlere sahip olursunuz ve veriyi insanların algılayabileceği 2 boyuta indirmeniz gerekebilir. Örnekle açıklayalım:

Şekil-10'daki gibi kelime vektörlerimizi 2 boyuta indirgeyerek Şekil-11'deki gibi bir görselleştirme yapabiliriz. Bu sayede corpusumuz hakkında daha ilişkisel bilgiler elde edebilir veya kümeleme dahi yapabiliriz.

Şekil-10 PCA ile Boyutu 2'ye İndirgenmiş Kelime Vektörleri
Şekil-11 Boyutu indirgenmiş Vektörlerin 2 Boyutta Gösterimi

Örnekteki işlemi gerçekleştirmek için birden fazla algoritma var. Bu yazıda PCA’den (Principial Component Analysis) bahsedeceğiz.

Cebirde matrislerin özdeğer (Eigenvalues) ve özvektör (Eigenvector) değerleri vardır. İşin matematiksel tarafını çok güzel anlatan Youtube linkine buradan ulaşabilir.

Bu değerlerin (özdeğer ve özvektörler) PCA için olmazsa olmaz olduklarını unutmamalısınız, çünkü verilerinizden çıkartılan kovaryans matrisinin özvektörleri, aralarında ilişki olmayan özelliklerin yönlerini verir ve özdeğerleri, bu yeni özelliklerin her birinin varyansıdır.

Şekil 12 — PCA Algoritması -1

İlk adım, bir dizi ilişkisiz özellik elde etmektir. Bu adım için, verilerinizi normalleştirmemiz, ardından kovaryans matrisini elde etmemiz lazım. Kovaryans iki değişkenin birlikte ne kadar değiştiklerinin ölçüsüdür. Ardından SVD (Singular Value Decomposition) kullanarak 3 matrisi elde ederiz. SVD hakkında Şadi Hocanın yazısına buradan ulaşabilirsiniz. (Eğer bu konuda istek gelirse detaylı bir yazı yazabilirim.)

SVD kısaca bir matrisi 3 parçaya ayırarak tutar ve bu üç parçayı kullanarak aynı matrisin yeniden elde edilmesini sağlar.

Bu matrislerden ilki, bir sütununa yığılmış özvektörü ve ikincisi, köşegeninin üzerinde özdeğerleri tutar. SVD birçok programlama kütüphanesinde hazır olarak yer alır.

Şekil 13 — PCA Algoritması -2

İkinci adım, verilerimizi yeni bir sütunda göstermektir. Bu adımda özvektörleri ve özdeğerleri kullanacağız. Özvektörleri U ile ve öz değerleri S ile gösterelim.

Önce kelime vektörlerimizi içeren matris ile U matrisinin ilk n sütunu arasındaki nokta çarpımlarını gerçekleştireceksiniz; burada n, sahip olmak istediğiniz boyutların sayısıdır.

Elimizde özdeğerlerimiz ve bunlara karşılık gelen özvektörler var. Tüm özdeğerlerin toplamı geçişteki toplam varyans değerine karşılık gelir. Eğer biz vektörler arasında en yüksek sonuçlu n tane vektörü istiyorsak, en yüksek yüzdelikli n özniteliğin vektörünü almamız gerekir.

Artık elimizde n boyutlu 2 vektör ve verilerimiz var. Bu vektörler üstünde verilerimizi temsil edebiliriz :D

Bu bölümde Vektör Uzayı Modellerinin nasıl işlediğini anlatmaya çalıştım. Tüm anlatılanların Python dilinde kodlanmış haline buradaki dosyalardan erişebilirsiniz.

Yazı konusunda kafanıza takılan noktalar, eleştiriler veya öneriler için yorumlar kısmında cevap vermeye çalışacağım. Sağlıcakla Kalın.

--

--

Yusuf ANI
novaresearchlab

Bilgiye sahip olarak doğmuş birisi değilim. Öğretmeyi seviyorum ve öğrenmeye çalışıyorum — Konfüçyüs