keras menyematkan vektor kembali ke one-hot

Saya menggunakan keras dalam masalah NLP. Muncul pertanyaan tentang penyematan kata ketika saya mencoba memprediksi kata berikutnya berdasarkan kata sebelumnya. Saya telah mengubah kata satu-panas menjadi vektor kata melalui lapisan keras Embedding seperti ini:

word_vector = Embedding(input_dim=2000,output_dim=100)(word_one_hot)

Dan gunakan word_vector ini untuk melakukan sesuatu dan model akhirnya memberikan word_vector lain. Namun saya harus melihat apa sebenarnya kata prediksi tersebut. Bagaimana cara mengembalikan word_vector ke word_one_hot?


person MeteorKepler    schedule 22.04.2017    source sumber


Jawaban (1)


Pertanyaan ini sudah lama tetapi tampaknya terkait dengan titik kebingungan umum tentang apa itu embeddings dan apa tujuannya.

Pertama, Anda tidak boleh mengonversi ke one-hot jika Anda ingin menyematkannya setelahnya. Ini hanyalah langkah yang sia-sia.

Dimulai dengan data mentah, Anda perlu melakukan tokenisasi. Ini hanyalah proses menetapkan bilangan bulat unik untuk setiap elemen dalam kosakata Anda (kumpulan semua kemungkinan kata/karakter [pilihan Anda] dalam data Anda). Keras memiliki fungsi kemudahan untuk ini:

from keras.preprocessing.sequence import pad_sequences
from keras.preprocessing.text import Tokenizer
max_words = 100 # just a random example, 
# it is the number of most frequently occurring words in your data set that you want to use in your model.
tokenizer = Tokenizer(num_words=max_words)
# This builds the word index
tokenizer.fit_on_texts(df['column'])

# This turns strings into lists of integer indices.
train_sequences = tokenizer.texts_to_sequences(df['column'])

# This is how you can recover the word index that was computed
print(tokenizer.word_index)

Embeddings menghasilkan representasi. Lapisan selanjutnya dalam model Anda menggunakan representasi sebelumnya untuk menghasilkan representasi yang lebih abstrak. Representasi akhir digunakan untuk menghasilkan distribusi probabilitas pada jumlah kelas yang mungkin (dengan asumsi klasifikasi).

Saat model Anda membuat prediksi, model tersebut memberikan perkiraan probabilitas untuk setiap bilangan bulat di indeks_kata. Jadi, 'cat' sebagai kata berikutnya yang paling mungkin, dan word_index Anda memiliki sesuatu seperti {cat:666}, idealnya model tersebut akan memberikan kemungkinan tinggi untuk 666 (bukan 'cat'). Apakah ini masuk akal? Model ini tidak pernah memprediksi vektor penyematan, vektor penyematan adalah representasi perantara dari data masukan yang (semoga) berguna untuk memprediksi bilangan bulat yang terkait dengan kata/karakter/kelas.

person shallow_water    schedule 29.09.2017