Memprediksi kata menggunakan model Word2vec


20

Diberi kalimat: "Ketika saya membuka ?? pintu mulai memanas secara otomatis"

Saya ingin mendapatkan daftar kata-kata yang mungkin masuk ?? dengan probabilitas.

Konsep dasar yang digunakan dalam model word2vec adalah untuk "memprediksi" kata yang diberikan konteks sekitarnya.

Setelah model dibuat, operasi vektor konteks apa yang tepat untuk melakukan tugas prediksi saya pada kalimat baru?

Apakah ini hanya jumlah linier?

model.most_similar(positive=['When','I','open','the','door','it','starts' ,'heating','automatically'])

Saya menerapkan algoritma di atas dan menemukan pertanyaan: Mengapa softmax digunakan? Mari saya tunjukkan contoh dua fungsi normalisasi: def softmax (w, t = 1.0): # Sumber: gist.github.com/stober/1946926 e = np.exp (w / t) return e / np.sum ( e) def normalisasi (w): return w / np.sum (w) a = np.array ([. 0002, .0001, .01, .03]) cetak normalisasi (a) cetak softmax (a, t = 1 ) Mari kita bandingkan output: [0,00496278 0,00248139 0,24813896 0,74441687] [0,24752496 0,24750021 0,24996263 0,25501221] Seperti yang bisa kita lihat, softmax memberikan 0,03 kira-kira probabilitas yang sama seperti dibandingkan dengan 0,0001 (yang merupakan

Jawaban:


9

Word2vec bekerja dalam dua model CBOW dan skip-gram. Mari kita ambil model CBOW, karena pertanyaan Anda sama dengan cara memprediksi kata target, mengingat kata-kata di sekitarnya.

Pada dasarnya, model ini mengembangkan matriks bobot input dan output, yang tergantung pada kata konteks input dan kata target output dengan bantuan lapisan tersembunyi. Jadi back-propagation digunakan untuk memperbarui bobot ketika perbedaan kesalahan antara vektor output yang diprediksi dan matriks output saat ini.

Pada dasarnya, memprediksi kata target dari kata konteks yang diberikan digunakan sebagai persamaan untuk mendapatkan matriks bobot optimal untuk data yang diberikan.

Untuk menjawab bagian kedua, sepertinya sedikit rumit dari sekadar jumlah linier.

  1. Dapatkan semua vektor kata dari kata konteks
  2. Rata-rata mereka untuk mengetahui hukuran layer vektor yang tersembunyiNx1
  3. Dapatkan matriks keluaran syn1( word2vec.catau gensim) yang berukuranVxN
  4. Kalikan syn1dengan h, vektor yang dihasilkan akan zdengan ukuranVx1
  5. Hitung vektor probabilitas y = softmax(z)dengan ukuran Vx1, di mana probabilitas tertinggi menunjukkan representasi satu kata panas dari kata target dalam kosa kata. Vmenunjukkan ukuran kosa kata dan Nmenunjukkan ukuran embedding vektor.

Sumber: http://cs224d.stanford.edu/lecture_notes/LectureNotes1.pdf

Pembaruan: Model memori jangka pendek saat ini sedang melakukan pekerjaan besar dalam memprediksi kata-kata selanjutnya. model seq2seq dijelaskan dalam tutorial tensorflow . Ada juga posting blog tentang pembuatan teks.


Terima kasih ! Apakah Anda mengetahui adanya implementasi ini? (sebagai bagian dari gensim misalnya). Kalau tidak, sepertinya tidak terlalu rumit untuk dihitung.
DED

Hai, bisakah Anda memberi saya rincian lebih lanjut tentang cara mengambil matriks output (syn1 dalam contoh Anda) dari model embedded w2v terlatih? Saya pikir w2v menjatuhkan matriks keluaran saat menyelesaikan pelatihan.
Charles Chow

berdasarkan pemahaman saya, jawaban Anda dari pertanyaan 2 adalah merekonstruksi matriks output, apakah itu benar?
Charles Chow

1
Saya pikir ini perlu dicatat bahwa ini tidak berfungsi seperti urutan penggolong. Urutan kata-katanya diabaikan.
displayname

Orang bisa mendapatkan matriks keluaran syn1hanya dengan menyimpan model. ya, pemesanan diabaikan, untuk aplikasi yang benar-benar bisa pergi dengan model seq2seq berbasis LSTM.
yazhi

4

Prediksi kata yang hilang telah ditambahkan sebagai fungsi dalam versi terbaru dari Word2Vec. Tentu saja kalimat Anda harus sesuai dengan sintaks input model Word2Vec yang digunakan untuk melatih model (huruf kecil, kata berhenti, dll)

Penggunaan untuk memprediksi 3 kata teratas untuk "When I open? Door":

print(model.predict_output_word(['When','I','open','door']), topn = 3)

Bagaimana ia tahu bahwa kata centeritu berada di antara kata ke-3 dan ke-4? Itu tidak masuk akal bagi saya. Saya akan membayangkan hanya kata-kata konteks nomor yang dapat dimasukkan dan itu akan memilih kata antara floor(len(n)/2))danfloor(len(n)/2))+1
bmc
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.