Bisakah kita mengambil manfaat dari menggunakan pembelajaran transfer sambil melatih model word2vec?
13
Saya mencari bobot pra-terlatih dari model yang sudah dilatih seperti data Google News dll. Saya merasa sulit untuk melatih model baru dengan jumlah data (10 GB dll) yang cukup untuk saya sendiri. Jadi, saya ingin mengambil manfaat dari pembelajaran transfer di mana saya akan bisa mendapatkan bobot lapisan pra-dilatih dan melatih bobot tersebut pada kata-kata spesifik domain saya. Jadi, pastinya akan membutuhkan waktu yang relatif lebih sedikit dalam pelatihan. Segala jenis bantuan akan sangat dihargai. Terima kasih sebelumnya :)
Anda kemudian dapat memuat vektor dalam format biner dalam model Anda menggunakan gensim seperti yang ditunjukkan di bawah ini.
>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.txt', binary=False) # C text format
>>> model = Word2Vec.load_word2vec_format('/tmp/vectors.bin', binary=True) # C binary format
Berikut adalah model pra-bangun yang berbeda untuk Wikipedia bahasa Inggris:
Get python 2.7
Install gensim: pip install gensim
uncompress downloaded model: tar -xvf model.tar.gz
Load model in gensim:
from gensim.models import Word2Vec
model = Word2Vec.load("path/to/word2vec/en.model")
model.similarity('woman', 'man')
Oke, itu informasi yang bagus. Tapi, bisakah saya menggunakan model lapisan pra-terlatih untuk menginisialisasi model baru dan kemudian menyempurnakan model itu dengan kalimat saya?
Nomiluks
@Nomi Ya. Dari [dokumentasi gensim] ( radimrehurek.com/gensim/models/word2vec.html ), begitu Anda memuat model,model = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru
1
Tautan dokumentasi di atas menyebutkan: "CATATAN: Tidak mungkin untuk melanjutkan pelatihan vektor yang dimuat dari format C karena bobot tersembunyi, frekuensi kosa kata dan pohon biner tidak ada."
trailblazer
3
Representasi terdistribusi (sarung tangan) berdasarkan pelatihan pada corpus besar tersedia langsung dari kelompok NLP Stanford. Anda dapat menggunakan kata embeddings secara langsung di aplikasi Anda (alih-alih menggunakan 1 vektor panas yang dikodekan dan kemudian melatih jaringan untuk mendapatkan embeddings). Jika tugas Anda tidak terlalu khusus dimulai dengan rangkaian embeddings ini akan bekerja dengan baik dalam praktik.
Ini akan menyelamatkan Anda dari pelatihan jumlah parameter tambahan dim × V mana adalah ukuran kosakata dan adalah dimensi ruang penyisipan yang ingin Anda proyeksikan.mVm
Tapi, saya ingin menginisialisasi model word2vec baru saya dengan bobot model pra-terlatih. Apakah mungkin untuk menggunakan bobot lapisan model yang sudah dilatih sebelumnya untuk menginisialisasi model baru. Setelah inisialisasi saya ingin melatih model itu dengan kalimat baru. apa itu mungkin?
Nomiluks
Ya kamu bisa. Namun saya tidak berpikir matriks bobot tersedia untuk umum
wabbit
Yup, benar ...? Jika kami melatih model sendiri dan mencoba mengakses akses bobot model yang terlatih menggunakan perpustakaan Gensim. Apakah mungkin
Nomiluks
Tidak yakin tentang gensim tetapi karena ini adalah parameter yang harus dioptimalkan, sebagian besar perangkat lunak harus mengizinkannya
Lihatlah makalah ini [PDF] . Fokus utama adalah tentang tugas NER tetapi idenya sama - ambil vektor word2vec yang telah dilatih sebelumnya dan sesuaikan untuk aplikasi tertentu.
Banyak aplikasi berbasis jaringan saraf umum untuk NLP sering dimulai dengan vektor pra-terlatih. Sebagai contoh, sebuah makalah yang sangat baru [PDF] (tugas penandaan NER dan POS) melakukan hal ini.
from gensim.models import Word2Vec
# Word2Vec is full model which is trainable but takes larger memory
from gensim.models import KeyedVectors
# KeyedVectors is reduced vector model which is NOT trainable but takes less memory
model = KeyedVectors.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) #load pretrained google w2v
sen1 = 'w1 w2 w3'
sen2 = 'word1 word2 word3'
sentences = [[word for word in sen1.split()],[word for word in sen2.split()]]
total_examples = model_2.corpus_count
model_2 = Word2Vec(size=300, min_count=1) #initiate a full model
model_2.build_vocab(sentences) #add words in training dataset
#load words from pretrained google dataset
model_2.build_vocab([list(model.vocab.keys())], update=True)
model_2.intersect_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True, lockf=1.0)
#retrain pretrained w2v from new dataset
model_2.train(sentences, total_examples=total_examples, epochs=model_2.iter)
model = Word2Vec.load(fname) # you can continue training with the loaded model!
Representasi terdistribusi (sarung tangan) berdasarkan pelatihan pada corpus besar tersedia langsung dari kelompok NLP Stanford. Anda dapat menggunakan kata embeddings secara langsung di aplikasi Anda (alih-alih menggunakan 1 vektor panas yang dikodekan dan kemudian melatih jaringan untuk mendapatkan embeddings). Jika tugas Anda tidak terlalu khusus dimulai dengan rangkaian embeddings ini akan bekerja dengan baik dalam praktik.
Ini akan menyelamatkan Anda dari pelatihan jumlah parameter tambahan dim × V mana adalah ukuran kosakata dan adalah dimensi ruang penyisipan yang ingin Anda proyeksikan.mV m
sumber
Lihatlah makalah ini [PDF] . Fokus utama adalah tentang tugas NER tetapi idenya sama - ambil vektor word2vec yang telah dilatih sebelumnya dan sesuaikan untuk aplikasi tertentu.
Banyak aplikasi berbasis jaringan saraf umum untuk NLP sering dimulai dengan vektor pra-terlatih. Sebagai contoh, sebuah makalah yang sangat baru [PDF] (tugas penandaan NER dan POS) melakukan hal ini.
sumber
sumber