Susam Sokağı ve Transfer Learning: Bölüm 1
Bu yazımda makine öğrenmesinde doğal dil anlama için kullanılan dil modellerinden bahsetmek istedim. Bunun için önce kelimelerin birlikteliklerinden (co-occurrence) sonra vektör gösterimlerinden, ardından yinelemeli sinir ağlarından, sonra da dil modellerinden bahsedeceğim. Hazırsak başlayalım.
Bilgisayarlar kelimeleri nasıl görüyor?
One Hot Encoding
Önce bilgisayarlara veriyi verirken nasıl kodlayarak verdiğimizden bahsetmek isterim. Bunu yapmanın birden fazla yolu var, en çok bilineni “One Hot Encoding” (Türkçesi bir-elemanı-bir kodlama). Biz doğal dil işlemede metinlere corpus adını veriyoruz, bu bir paragraf olabilir, cümle olabilir. Önce bu metni kelimelere bölüyorsunuz, ardından bu kelimelerden bir kelime hazinesi (vocabulary) oluşturuyorsunuz. Sonra kelime sayısı x corpus boyutu boyutunda sıfırlardan oluşan bir matris açtığınızı hayal edin. Bu matriste kelimenin cümlede geçtiği yere 1 yazıyorsunuz. Aşağı yukarı şuna benziyor:
Fakat bu çok yer kaplayan bir gösterim ve buradan pek bir anlam çıkarabileceğiniz söylenemez. Bir diğer gösterim iste hash trick.
Hashing Trick
İki tane cümlemiz olduğunu varsayalım. Bunlardan kelime hazinesi oluştururken ortak kelimeleri bir kez alıp kolonlara, cümleleri ise satırlara yerleştiriyoruz, aşağıdaki gibi.
Bu daha sıkıştırılmış bir gösterim ve iki cümle arasında bir ilişki olduğunu ortak kelimelerden çıkarabilirsiniz. Bununla duygu analizi bile yapabilirsiniz. (cümlelerin pozitif-negatif etiketli olduğunu varsayarsak) Ne yazık ki biz bu iki gösterimi de kullanmıyoruz.
Kelime Vektörleri/Gömülmeleri (Embeddings)
Vektörlere geçmeden önce “co-occurrence” kavramına değinmek istiyorum. Bilgisayar genellikle kelimelerin birlikte bulunma olasılıkları üzerinden cümle ya da doküman benzerliğine bakar. Elimizde imdb verisi olsun ve aşağıdaki kelimelerin kaç kez birlikte geçtiğine bakmış olalım.
Buradan filmler hakkında hiç fikrimiz olmadığını varsayarsak filmler hakkında bilgi edinebiliriz.
Elimizde kategorilere ayrılmış haberler olsun, bu kategorilerde “uzay” ve “büyücü” kelimesinin hangi kategoride kaçar kez geçtiklerine bakalım.
Buradan bir doküman sınıflandırma problemi çözmek istediğinizi düşünün, filme dair haberin içinde kaç kez uzay ya da büyücü kelimesinin geçtiğine bakarak filmin türünü tahmin edebilirsiniz. Daha güzel bir gösterimse vektör gösterimi.
Bu gösterimde dokümanlarda (Bilim Kurgu ve diğerleri) kaç tane ortak kelime olduğunu ve kaçar kez geçtiklerine bakarak dokümanların da birbirine olan benzerliğine bakabilirsiniz. Burada doküman benzerliği hesaplamak için vektörlerin uçları arası öklit mesafesi (cetvel koyarak ölçtüğünüz mesafe) yerine kosinüs benzerliği dediğimiz bir benzerlik kullanıyoruz. Burada popüler filmlerde haber sayısı (corpus büyüklüğü) çok fazla olduğu için diğer vektörlere göre daha uzun, bu da iki vektör arası benzerliğe bakarken anlam çıkarmamızı zorlaştırıyor. Bunun yerine iki vektör arası açının kosinüsüne bakıyoruz. Peki bu vektörleri nasıl kullanabiliriz?
GloVe
GloVe (Global Vectors) Stanford NLP tarafından çıkarılmış bir dil modeli. Tamamiyle kelimelerin birlikte geçme matrisi (word-word co-occurrence matrix) üzerinden kelimelerin birlikte bulunma olasılığına göre vektörler oluşturuyor. Bu vektörler öyle oluşturulmalı ki dot product’ları birlikte olma olasılıklarını vermeli. Nasıl hesaplandığına şuradan bakabilirsiniz. GloVe’yi çok büyük veri setiyle oluşturuyorlar, size de GloVe’den bu vektörleri alıp kullanmak kalıyor. Biz buna transfer learning diyoruz. Daha önce eğitilmiş ve başarı göstermiş bir modeli tekrar eğitmeden öğrendiği örüntülerden faydalanmak isterseniz transfer learning kullanabilirsiniz. Bu yazıda da daha çok NLP’de hangi modellerden faydalanabileceğinizden bahsedeceğim. GloVe bunlardan bir tanesi. Peki kelimeler GloVe’de neye benziyor?
Yukarıdaki görseli GloVe’nin sitesinden aldım. Kelimelerin arasındaki ilişkiler iki boyutta buna benziyor. En klasik örnek: “kral”dan “erkek” kelimesini çıkarıp “kadın” kelimesini eklerseniz “kraliçe”yi elde ediyorsunuz. Aslında tam olarak elde etmiyorsunuz, ama en yakınındaki vektör “kraliçe” oluyor.
İnternetteki kelime gömülmelerini görselleştiren sevdiğim bazı projeler var. Biri Tensorflow Embedding Projector.
Tensorflow Embedding Projector’de birkaç veri setinin gömülmeleri var, bu gömülmeler aslında 200 boyutlu bir uzayda üç (ya da tercih ederseniz iki) boyuta indirgenerek gösterilmiş. Bu boyut indirgemeyi principal component analysis’le (PCA), umap, ya da t-sne’yi seçerek gerçekleştirebilirsiniz. Bir kelimenin en yakınındaki kelimelere sağdaki search sekmesinden bakabilirsiniz.
Diğer bir site ise whatlies. Whatlies’ın kendi öneğitimli bir modeli var, şurada nasıl uygulayabileceğiniz anlatılıyor. Whatlies şu anlık üç boyutlu gösterimleri desteklemiyor.
Benden bugünlük bu kadar, bir dahaki yazımda word2vec, skip-gram ve bag-of-words, yinelemeli sinir ağları ve transformer (transformatör) yapılarından bahsedeceğim.