word2vec: sampling negatif (dalam istilah awam)?

Jawaban:

166

Idenya word2vecadalah 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 c1dan 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 c1secara acak. Hasil akhirnya adalah jika catmuncul dalam konteks food, maka vektor dari foodlebih 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 word2veclebih cepat untuk berlatih.

mbatchkarov.dll
sumber
15
terima kasih atau penjelasan yang bagus. Saya pikir itu hanya pengambilan sampel. Tapi tahukah Anda mengapa itu disebut "negatif"?
HappyCoding
46
Terminologi ini dipinjam dari klasifikasi, aplikasi umum jaringan saraf. Di sana Anda memiliki banyak contoh positif dan negatif. Dengan 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.
mbatchkarov
40

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.

masukkan deskripsi gambar di sini

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:

masukkan deskripsi gambar di sini

Logaritma mana yang dapat terurai menjadi:

masukkan deskripsi gambar di sini

Dengan beberapa rumus matematika dan gradien (Lihat detail selengkapnya di 6 ) itu diubah menjadi:

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

Referensi :

Amir
sumber
1
Hai @amir, pertanyaan awal saya adalah saya mengalami masalah, memahami konsep pengambilan sampel negatif ...
Andy K
1
Dijelaskan dengan sangat baik dan sedikit lebih teknis daripada jawaban yang diterima. Jadi situasi SO yang sempurna: baca jawaban yang diterima untuk mendapatkan ide dan kemudian jawaban ini untuk memahaminya secara detail.
Ursin Brunner
22

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:

masukkan deskripsi gambar di sini

Perhatikan bahwa itu Tadalah 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 Vvocab dalam korpus dengan:

masukkan deskripsi gambar di sini

Vdapat dengan mudah melebihi puluhan ribu saat melatih model Skip-Gram. Probabilitas perlu dihitung Vkali, membuatnya mahal secara komputasi. Selanjutnya, faktor normalisasi pada penyebut membutuhkan ekstraV perhitungan .

Di sisi lain, distribusi probabilitas di SGNS dihitung dengan:

masukkan deskripsi gambar di sini

c_posadalah vektor kata untuk kata positif, dan W_negmerupakan vektor kata untuk semua Ksampel negatif dalam matriks bobot keluaran. Dengan SGNS, probabilitas hanya perlu dihitung K + 1kali, 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.

masukkan deskripsi gambar di sini

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.

masukkan deskripsi gambar di sini

Dalam kehidupan nyata, Anda biasanya tidak mengamati regressiondengan 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.

masukkan deskripsi gambar di sini

Pada gambar di atas, pasangan konteks kata positif saat ini adalah ( drilling, engineer). K=5sampel 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.

Eric Kim
sumber
1
T adalah untuk jumlah token (kemunculan kata dalam teks). V untuk kosakata (kata-kata unik) yang akan saya katakan.
Adam
Jika kita tetapkan Ksebagai V -1, maka pengambilan sampel negatif sama dengan model vanilla skip-gram. Apakah pemahaman saya benar?
Shashwat
@Shashwat jumlah vektor kata yang diperbarui untuk setiap sampel pelatihan sama, tetapi fungsi tujuan pelatihan akan tetap berbeda secara fundamental
Eric Kim