เราสามารถใช้ประโยชน์จากการใช้การเรียนรู้การถ่ายโอนในขณะฝึกรูปแบบ word2vec ได้หรือไม่?


13

ฉันกำลังมองหาน้ำหนักของรุ่นที่ผ่านการฝึกอบรมมาแล้วเช่นข้อมูล Google Newsเป็นต้นฉันพบว่ามันยากที่จะฝึกฝนโมเดลใหม่ด้วยจำนวนข้อมูลที่เพียงพอ (10 GB เป็นต้น) สำหรับตัวฉันเอง ดังนั้นฉันต้องการได้รับประโยชน์จากการเรียนรู้การถ่ายโอนซึ่งฉันสามารถรับน้ำหนักของเลเยอร์ที่ได้รับการฝึกอบรมมาล่วงหน้าและฝึกฝนน้ำหนักเหล่านั้นใหม่ด้วยคำศัพท์เฉพาะโดเมนของฉัน ดังนั้นแน่นอนว่าจะใช้เวลาค่อนข้างน้อยในการฝึกอบรม ความช่วยเหลือใด ๆ จะได้รับการชื่นชมอย่างมาก ขอบคุณล่วงหน้า :)

คำตอบ:


10

ใช่คุณสามารถรับประโยชน์จากรุ่นที่ผ่านการฝึกอบรมมาแล้ว หนึ่งที่มีชื่อเสียงที่สุดคือรูปแบบการฝึกอบรมของ GoogleNewsData ซึ่งคุณสามารถหาได้ที่นี่

คำศัพท์และวลีที่ผ่านการฝึกอบรมล่วงหน้าhttps://drive.google.com/file/d/0B7XkCwpI5KDYNlNUTTlSS21pQmM/edit?usp=sharing

จากนั้นคุณสามารถโหลดเวกเตอร์ในรูปแบบไบนารีในแบบจำลองของคุณโดยใช้ gensim ดังที่แสดงด้านล่าง

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

นี่คือแบบจำลองที่สร้างไว้ล่วงหน้าแล้วสำหรับ Wikipedia ภาษาอังกฤษ:

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

ที่มา: https://github.com/idio/wiki2vec/

ใช้แบบจำลองที่สร้างไว้ล่วงหน้า

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

คุณสามารถใช้ถุงมือสแตนฟอร์ดเอ็นแอลพี

นี่คือการรวบรวมยอดเยี่ยมของรุ่น word2vec ที่ผ่านการฝึกอบรมมาแล้ว

รุ่นที่ได้รับการฝึกฝนมาล่วงหน้าเพิ่มเติม:

เพิ่มเติมเกี่ยวกับ gensim และรหัสที่นี่: https://radimrehurek.com/gensim/models/word2vec.html

ฟอรั่ม Quora กับคำถามที่คล้ายกัน


2
โอเคนั่นเป็นข้อมูลที่ดีเยี่ยม แต่ฉันสามารถใช้ตุ้มน้ำหนักเลเยอร์ที่ได้รับการฝึกอบรมมาแล้วเพื่อเริ่มต้นโมเดลใหม่แล้วปรับแต่งโมเดลนั้นด้วยประโยคของฉันได้หรือไม่
Nomiluks

@Nomi ใช่ จาก [เอกสาร gensim] ( radimrehurek.com/gensim/models/word2vec.html ) เมื่อคุณโหลดแบบจำลองmodel = Word2Vec.load(fname) # you can continue training with the loaded model!
Guru

1
ลิงก์เอกสารด้านบนกล่าวถึง: "หมายเหตุ: เป็นไปไม่ได้ที่จะฝึกเวกเตอร์ที่โหลดจากรูปแบบ C ต่อไปเนื่องจากน้ำหนักที่ซ่อนอยู่ความถี่คำศัพท์และต้นไม้ไบนารีหายไป"
trailblazer

3

การรับรองการเป็นตัวแทน (ถุงมือ)จากการฝึกอบรมในคลังข้อมูลขนาดใหญ่มีให้บริการโดยตรงจากกลุ่ม Stanford NLP คุณสามารถใช้คำว่า embeddings ในแอปพลิเคชันของคุณโดยตรง (แทนที่จะใช้เวกเตอร์ที่เข้ารหัสร้อน 1 ชุดจากนั้นฝึกเครือข่ายเพื่อให้ได้ embeddings) หากงานของคุณไม่เฉพาะเจาะจงมากเกินไปเริ่มต้นด้วยชุดแต่งงานนี้จะทำงานได้ดีในทางปฏิบัติ

m×VVm


แต่ฉันต้องการเริ่มต้นรุ่น word2vec ใหม่ของฉันด้วยน้ำหนักแบบฝึกอบรมล่วงหน้า เป็นไปได้หรือไม่ที่จะใช้ตุ้มน้ำหนักเลเยอร์รุ่นที่ผ่านการฝึกอบรมมาแล้วเพื่อเตรียมใช้งานโมเดลใหม่ หลังจากการเริ่มต้นฉันต้องการฝึกโมเดลนั้นด้วยประโยคใหม่ เป็นไปได้ไหม?
Nomiluks

ใช่คุณสามารถ. อย่างไรก็ตามฉันไม่คิดว่าเมทริกซ์น้ำหนักจะเปิดเผยต่อสาธารณะ
wabbit

ใช่แล้ว ... หากเราฝึกแบบจำลองตัวเองและพยายามเข้าถึงน้ำหนักแบบจำลองที่ผ่านการฝึกอบรมโดยใช้ห้องสมุด Gensim เป็นไปได้หรือไม่
Nomiluks

ไม่แน่ใจเกี่ยวกับ gensim แต่เป็นพารามิเตอร์ที่ต้องปรับให้เหมาะที่สุดซอฟต์แวร์ส่วนใหญ่ควรอนุญาต
wabbit

@HrishikeshGanu ลิงก์นี้ยังใช้งานได้หรือไม่ github.com/idio/wiki2vec/raw/master/torrents/… ที่มา: github.com/idio/wiki2vec
Anish

1

ลองดูที่บทความนี้[PDF] จุดสนใจหลักเป็นเรื่องเกี่ยวกับงาน NER แต่ความคิดนั้นเหมือนกัน - ใช้เวกเตอร์ word2vec ที่ผ่านการฝึกอบรมมาก่อนและปรับให้เข้ากับการใช้งานเฉพาะ

แอปพลิเคชั่นที่ใช้โครงข่ายประสาทส่วนกลางส่วนใหญ่สำหรับ NLP มักเริ่มด้วยเวกเตอร์ที่ผ่านการฝึกอบรมมาล่วงหน้า ตัวอย่างเช่นกระดาษล่าสุด[PDF] (งานการแท็ก NER และ POS) ทำสิ่งนี้


-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)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.