Aşağıdaki makaleyi okuyorum ve olumsuz örnekleme kavramını anlamakta biraz sorun yaşıyorum.
http://arxiv.org/pdf/1402.3722v1.pdf
Birisi yardım edebilir mi lütfen?
Aşağıdaki makaleyi okuyorum ve olumsuz örnekleme kavramını anlamakta biraz sorun yaşıyorum.
http://arxiv.org/pdf/1402.3722v1.pdf
Birisi yardım edebilir mi lütfen?
Yanıtlar:
Buradaki fikir word2vec
, metinde birbirine yakın (birbirleri bağlamında) görünen kelimeler için vektörler arasındaki benzerliği (iç çarpım) maksimize etmek ve olmayan kelimelerin benzerliğini en aza indirmektir. Bağlandığınız kağıdın denkleminde (3) üssü bir an için göz ardı edin. Var
v_c * v_w
-------------------
sum(v_c1 * v_w)
Pay, temelde kelimeler c
(bağlam) ve w
(hedef) kelime arasındaki benzerliktir . Payda, diğer tüm bağlamların c1
ve hedef kelimenin benzerliğini hesaplar w
. Bu oranın maksimize edilmesi, metinde birbirine daha yakın görünen kelimelerin, olmayan kelimelere göre daha benzer vektörlere sahip olmasını sağlar. Ancak, bunu hesaplamak çok yavaş olabilir çünkü birçok bağlam vardır c1
. Negatif örnekleme, bu sorunu ele almanın yollarından biridir - sadece c1
rastgele birkaç bağlam seçin . Sonuç olduğu takdirde cat
bağlamında görünür food
, daha sonra vektör food
vektörü daha benzerdir cat
vektörleri daha (bunların nokta ürünün önlemler gibi) birçok rasgele seçilmiş kelimeler(örneğin democracy
, greed
, Freddy
) yerine dildeki tüm diğer bir deyişle . Bu, word2vec
eğitmeyi çok daha hızlı hale getirir .
word2vec
, verilen herhangi bir kelime için ona benzer olması gereken kelimelerin bir listesine sahip olursunuz (pozitif sınıf), ancak negatif sınıf (targer kelimesine benzemeyen kelimeler) örnekleme ile derlenir.
Softmax'ı hesaplamak (hangi kelimelerin mevcut hedef kelimeye benzer olduğunu belirleme işlevi) pahalıdır, çünkü genellikle çok büyük olan V'deki (payda) tüm kelimelerin toplamını gerektirir .
Ne yapılabilir?
Softmax'a yaklaşmak için farklı stratejiler önerilmiştir . Bu yaklaşımlar softmax tabanlı ve örnekleme tabanlı yaklaşımlar olarak gruplandırılabilir . Softmax tabanlı yaklaşımlar, softmax katmanını sağlam tutan, ancak verimliliğini artırmak için mimarisini değiştiren yöntemlerdir (örneğin, hiyerarşik softmax). Öte yandan, örneklemeye dayalı yaklaşımlar softmax katmanını tamamen ortadan kaldırır ve bunun yerine softmax'a yaklaşan başka bir kayıp işlevini optimize eder (Bunu, softmax'ın paydasındaki normalleşmeye benzer hesaplaması ucuz olan başka bir kayıpla yaklaştırarak yaparlar. negatif örnekleme).
Word2vec'deki kayıp işlevi şuna benzer:
Hangi logaritma şu şekilde ayrışabilir:
Bazı matematiksel ve gradyan formülleriyle ( 6'da daha fazla ayrıntıya bakın ) şuna dönüştürüldü:
Gördüğünüz gibi ikili sınıflandırma görevine dönüştürüldü (y = 1 pozitif sınıf, y = 0 negatif sınıf). İkili sınıflandırma görevimizi gerçekleştirmek için etiketlere ihtiyacımız olduğundan, tüm bağlam sözcüklerini c doğru etiketler (y = 1, pozitif örnek) ve korporadan rastgele seçilen k kelimelerini yanlış etiketler (y = 0, negatif örnek) olarak belirleriz.
Aşağıdaki paragrafa bakın. Hedef sözcüğümüzün " Word2vec " olduğunu varsayın . 3 penceresinde ile, bağlam kelimelerdir: The
, widely
, popular
, algorithm
, was
, developed
. Bu bağlam sözcükleri olumlu etiketler olarak kabul edilir. Ayrıca bazı negatif etiketlere de ihtiyacımız var. Biz rastgele Dosya topluluğunun bazı kelimeler seçmek ( produce
, software
, Collobert
, margin-based
, probabilistic
) ve negatif örneklerin olarak görüyoruz. Derlemeden rastgele bir örnek aldığımız bu tekniğe negatif örnekleme denir.
Referans :
Burada negatif örnekleme hakkında bir eğitim makalesi yazdım .
Neden negatif örnekleme kullanıyoruz? -> hesaplama maliyetini düşürmek için
Vanilya Skip-Gram (SG) ve Skip-Gram negatif örnekleme (SGNS) için maliyet fonksiyonu aşağıdaki gibi görünür:
Unutmayın ki T
tüm sözcüklerin sayısı. Eşdeğerdir V
. Diğer bir deyişle, T
= V
.
SG'deki olasılık dağılımı p(w_t+j|w_t)
, V
bütünlükteki tüm sözcükler için şu şekilde hesaplanır :
V
Skip-Gram modelini eğitirken onlarca bini kolayca aşabilir. Olasılığın V
zaman olarak hesaplanması gerekir , bu da onu hesaplama açısından pahalı hale getirir. Ayrıca, paydadaki normalleştirme faktörü fazladan V
hesaplamalar gerektirir .
Öte yandan, SGNS'deki olasılık dağılımı şu şekilde hesaplanır:
c_pos
pozitif kelime için bir kelime vektörüdür ve çıktı ağırlık matrisindeki W_neg
tüm K
negatif örnekler için kelime vektörleridir . SGNS ile, olasılığın yalnızca K + 1
zaman hesaplanması gerekir , burada K
tipik olarak 5 ~ 20 arasındadır. Ayrıca, paydadaki normalleştirme faktörünü hesaplamak için fazladan yinelemelere gerek yoktur.
SGNS ile, her eğitim numunesi için ağırlıkların sadece bir kısmı güncellenirken, SG her eğitim numunesi için milyonlarca ağırlığı günceller.
SGNS bunu nasıl başarır? -> çoklu sınıflandırma görevini ikili sınıflandırma görevine dönüştürerek.
SGNS ile kelime vektörleri artık bir merkez kelimenin bağlam kelimelerini tahmin ederek öğrenilmez. Gerçek bağlam kelimelerini (pozitif) rastgele çizilmiş kelimelerden (negatif) gürültü dağılımından ayırt etmeyi öğrenir.
Gerçek hayatta, genellikle veya regression
gibi rastgele sözcüklerle gözlemlemezsiniz . Buradaki fikir şudur: Model olası (pozitif) çiftler ile olası olmayan (negatif) çiftler arasında ayrım yapabilirse, iyi kelime vektörleri öğrenilecektir.Gangnam-Style
pimples
Yukarıdaki şekilde, mevcut pozitif kelime-bağlam çifti ( drilling
, engineer
) 'dir. K=5
negatif numune olan rasgele çekilen gelen gürültü dağılımı : minimized
, primary
, concerns
, led
, page
. Model eğitim örnekleri boyunca yinelendiğinde, ağırlıklar optimize edilir, böylece pozitif çift p(D=1|w,c_pos)≈1
olasılığı çıktılanır ve negatif çiftler olasılığı çıktılanır p(D=1|w,c_neg)≈0
.
K
Olarak ayarlarsak V -1
, negatif örnekleme vanilya gram atlama modeli ile aynıdır. Anladığım doğru mu?