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?
machine-learning
nlp
word2vec
Andy K
sumber
sumber
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 punyaPembilang pada dasarnya adalah kesamaan antara kata
c
(konteks) danw
(target) kata. Penyebut menghitung kesamaan dari semua konteks lainc1
dan kata targetw
. 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 konteksc1
. Pengambilan sampel negatif adalah salah satu cara untuk mengatasi masalah ini - cukup pilih beberapa konteksc1
secara acak. Hasil akhirnya adalah jikacat
muncul dalam konteksfood
, maka vektor darifood
lebih mirip dengan vektorcat
(diukur dengan perkalian titiknya) daripada vektor beberapa kata lain yang dipilih secara acak.(misalnyademocracy
,greed
,Freddy
), bukan semua kata lain dalam bahasa . Ini membuatword2vec
lebih cepat untuk berlatih.sumber
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 :
sumber
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 denganV
. Dengan kata lain,T
=V
.Distribusi probabilitas
p(w_t+j|w_t)
dalam SG dihitung untuk semuaV
vocab dalam korpus dengan:V
dapat dengan mudah melebihi puluhan ribu saat melatih model Skip-Gram. Probabilitas perlu dihitungV
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, danW_neg
merupakan vektor kata untuk semuaK
sampel negatif dalam matriks bobot keluaran. Dengan SGNS, probabilitas hanya perlu dihitungK + 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 sepertiGangnam-Style
, ataupimples
. 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 dikeluarkanp(D=1|w,c_pos)≈1
, dan probabilitas untuk pasangan negatif akan dikeluarkanp(D=1|w,c_neg)≈0
.sumber
K
sebagaiV -1
, maka pengambilan sampel negatif sama dengan model vanilla skip-gram. Apakah pemahaman saya benar?