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 :)

Nomiluk
sumber

Jawaban:

10

Ya, Anda dapat memanfaatkan model pra-terlatih. Yang paling terkenal adalah model terlatih GoogleNewsData yang dapat Anda temukan di sini.

Vektor kata dan frasa pra-terlatih https://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

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:

https://github.com/idio/wiki2vec/raw/master/torrents/enwiki-gensim-word2vec-1000-nostem-10cbow.torrent

Sumber: https://github.com/idio/wiki2vec/

Menggunakan model prebuilt

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')

Anda juga dapat menggunakan Stanford NLP Glove

Berikut ini adalah kompilasi model word2vec yang telah dilatih sebelumnya.

Beberapa model pra-pelatihan tambahan:

Lebih lanjut tentang gensim dan kode di sini: https://radimrehurek.com/gensim/models/word2vec.html

Forum Quora dengan pertanyaan serupa

Guru
sumber
2
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

wabbit
sumber
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
wabbit
@HrishikeshGanu Apakah tautan ini masih berfungsi? github.com/idio/wiki2vec/raw/master/torrents/... Sumber: github.com/idio/wiki2vec
Anish
1

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.

Vladislavs Dovgalecs
sumber
-1
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)
Alan Yang
sumber