Saya membaca makalah di bawah ini dan saya mengalami masalah, memahami konsep pengambilan sampel negatif.
http://arxiv.org/pdf/1402.3722v1.pdf
Apakah ada yang bisa membantu?
Saya membaca makalah di bawah ini dan saya mengalami masalah, memahami konsep pengambilan sampel negatif.
http://arxiv.org/pdf/1402.3722v1.pdf
Apakah ada yang bisa membantu?
Jawaban:
Idenya word2vec
adalah untuk memaksimalkan kesamaan (perkalian titik) antara vektor untuk kata-kata yang muncul berdekatan (dalam konteks satu sama lain) dalam teks, dan meminimalkan kesamaan kata-kata yang tidak. Dalam persamaan (3) kertas yang Anda tautkan, abaikan sejenak eksponennya. Kamu punya
v_c * v_w
-------------------
sum(v_c1 * v_w)
Pembilang pada dasarnya adalah kesamaan antara kata c
(konteks) dan w
(target) kata. Penyebut menghitung kesamaan dari semua konteks lain c1
dan kata target w
. Memaksimalkan rasio ini memastikan kata-kata yang tampak lebih berdekatan dalam teks memiliki vektor yang lebih mirip daripada kata-kata yang tidak. Namun, komputasi ini bisa sangat lambat, karena ada banyak konteks c1
. Pengambilan sampel negatif adalah salah satu cara untuk mengatasi masalah ini - cukup pilih beberapa konteks c1
secara acak. Hasil akhirnya adalah jika cat
muncul dalam konteks food
, maka vektor dari food
lebih mirip dengan vektor cat
(diukur dengan perkalian titiknya) daripada vektor beberapa kata lain yang dipilih secara acak.(misalnya democracy
, greed
, Freddy
), bukan semua kata lain dalam bahasa . Ini membuat word2vec
lebih cepat untuk berlatih.
word2vec
, untuk setiap kata Anda memiliki daftar kata yang harus serupa dengannya (kelas positif) tetapi kelas negatif (kata yang tidak mirip dengan kata yang lebih besar) disusun dengan pengambilan sampel.
Menghitung Softmax (Fungsi untuk menentukan kata mana yang mirip dengan kata target saat ini) mahal karena membutuhkan penjumlahan semua kata dalam V (penyebut), yang umumnya sangat besar.
Apa yang bisa dilakukan?
Berbagai strategi telah diusulkan untuk mendekati softmax. Pendekatan ini dapat dikelompokkan menjadi pendekatan berbasis softmax dan berbasis pengambilan sampel . Pendekatan berbasis softmax adalah metode yang menjaga lapisan softmax tetap utuh, tetapi memodifikasi arsitekturnya untuk meningkatkan efisiensinya (misalnya, hierarchical softmax). Pendekatan berbasis sampel di sisi lain benar-benar menghilangkan lapisan softmax dan sebagai gantinya mengoptimalkan beberapa fungsi kerugian lain yang mendekati softmax (Mereka melakukan ini dengan memperkirakan normalisasi di penyebut softmax dengan beberapa kerugian lain yang murah untuk dihitung seperti pengambilan sampel negatif).
Fungsi kerugian di Word2vec adalah seperti:
Logaritma mana yang dapat terurai menjadi:
Dengan beberapa rumus matematika dan gradien (Lihat detail selengkapnya di 6 ) itu diubah menjadi:
Seperti yang Anda lihat, itu dikonversi ke tugas klasifikasi biner (y = 1 kelas positif, y = 0 kelas negatif). Karena kami membutuhkan label untuk melakukan tugas klasifikasi biner kami, kami menunjuk semua kata konteks c sebagai label benar (y = 1, sampel positif), dan k dipilih secara acak dari korpora sebagai label salah (y = 0, sampel negatif).
Lihat paragraf berikut. Asumsikan kata target kita adalah " Word2vec ". Dengan jendela dari 3, kata konteks kita adalah: The
, widely
, popular
, algorithm
, was
, developed
. Kata konteks ini dianggap sebagai label positif. Kami juga membutuhkan beberapa label negatif. Kami secara acak memilih beberapa kata dari corpus ( produce
, software
, Collobert
, margin-based
, probabilistic
) dan menganggap mereka sebagai sampel negatif. Teknik yang kami ambil beberapa contoh secara acak dari korpus ini disebut pengambilan sampel negatif.
Referensi :
Saya menulis artikel tutorial tentang pengambilan sampel negatif di sini .
Mengapa kami menggunakan pengambilan sampel negatif?-> untuk mengurangi biaya komputasi
Fungsi biaya untuk vanilla Skip-Gram (SG) dan Skip-Gram negative sampling (SGNS) terlihat seperti ini:
Perhatikan bahwa itu T
adalah jumlah semua kosa kata. Itu setara dengan V
. Dengan kata lain, T
= V
.
Distribusi probabilitas p(w_t+j|w_t)
dalam SG dihitung untuk semua V
vocab dalam korpus dengan:
V
dapat dengan mudah melebihi puluhan ribu saat melatih model Skip-Gram. Probabilitas perlu dihitung V
kali, membuatnya mahal secara komputasi. Selanjutnya, faktor normalisasi pada penyebut membutuhkan ekstraV
perhitungan .
Di sisi lain, distribusi probabilitas di SGNS dihitung dengan:
c_pos
adalah vektor kata untuk kata positif, dan W_neg
merupakan vektor kata untuk semua K
sampel negatif dalam matriks bobot keluaran. Dengan SGNS, probabilitas hanya perlu dihitung K + 1
kali, di manaK
biasanya antara 5 ~ 20. Selain itu, tidak ada iterasi tambahan yang diperlukan untuk menghitung faktor normalisasi dalam penyebut.
Dengan SGNS, hanya sebagian kecil bobot yang diperbarui untuk setiap sampel pelatihan, sedangkan SG memperbarui jutaan bobot untuk setiap sampel pelatihan.
Bagaimana SGNS mencapai ini?-> dengan mengubah tugas multi-klasifikasi menjadi tugas klasifikasi biner.
Dengan SGNS, vektor kata tidak lagi dipelajari dengan memprediksi kata konteks dari sebuah kata tengah. Ia belajar untuk membedakan kata konteks aktual (positif) dari kata-kata yang ditarik secara acak (negatif) dari distribusi kebisingan.
Dalam kehidupan nyata, Anda biasanya tidak mengamati regression
dengan kata-kata acak seperti Gangnam-Style
, atau pimples
. Idenya adalah bahwa jika model dapat membedakan antara pasangan kemungkinan (positif) vs tidak mungkin (negatif), vektor kata yang baik akan dipelajari.
Pada gambar di atas, pasangan konteks kata positif saat ini adalah ( drilling
, engineer
). K=5
sampel negatif secara acak dari distribusi kebisingan : minimized
, primary
, concerns
, led
, page
. Saat model melakukan iterasi melalui sampel pelatihan, bobot dioptimalkan sehingga probabilitas untuk pasangan positif akan dikeluarkan p(D=1|w,c_pos)≈1
, dan probabilitas untuk pasangan negatif akan dikeluarkan p(D=1|w,c_neg)≈0
.
K
sebagai V -1
, maka pengambilan sampel negatif sama dengan model vanilla skip-gram. Apakah pemahaman saya benar?