2016-01-31 7 views
7

मैं अजगरक्या Python में वाक्य के एक कॉर्पस से word2vec मॉडल (उदा। GoogleNews-vectors-negative300.bin) को फिर से प्रशिक्षित करना संभव है?

model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 

में Gensim लाइब्रेरी का उपयोग करके शब्द वैक्टर हो रही मॉडल लोड हो रहा है मैं वैक्टर

#reading all sentences from training file 
with open('restaurantSentences', 'r') as infile: 
x_train = infile.readlines() 
#cleaning sentences 
x_train = [review_to_wordlist(review,remove_stopwords=True) for review in x_train] 
train_vecs = np.concatenate([buildWordVector(z, n_dim) for z in x_train]) 

में प्रशिक्षण समीक्षा की सजा शब्द परिवर्तित कर रहा हूँ word2Vec के दौरान के बाद के लिए पूर्व प्रशिक्षित गूगल समाचार डाटासेट उपयोग कर रहा हूँ प्रक्रिया मुझे अपने कॉर्पस में शब्दों के लिए बहुत सारी त्रुटियां मिलती हैं, जो मॉडल में नहीं हैं। समस्या यह है कि मैं उन लापता शब्दों के लिए शब्द वैक्टर प्राप्त करने के लिए पहले से ही पूर्व-प्रशिक्षित मॉडल (जैसे GoogleNews-vectors-negative300.bin ') को कैसे रोक सकता हूं।

के बाद मैं क्या करने की कोशिश की है: कि मैं

# Set values for various parameters 
num_features = 300 # Word vector dimensionality      
min_word_count = 10 # Minimum word count       
num_workers = 4  # Number of threads to run in parallel 
context = 10   # Context window size                      
downsampling = 1e-3 # Downsample setting for frequent words 

sentences = gensim.models.word2vec.LineSentence("restaurantSentences") 
# Initialize and train the model (this will take some time) 
print "Training model..." 
model = gensim.models.Word2Vec(sentences, workers=num_workers,size=num_features, min_count = min_word_count, 
         window = context, sample = downsampling) 


model.build_vocab(sentences) 
model.train(sentences) 
model.n_similarity(["food"], ["rice"]) 

यह काम किया था प्रशिक्षण वाक्य से एक नया मॉडल प्रशिक्षित! लेकिन समस्या यह है कि मेरे पास एक बड़े मॉडल को प्रशिक्षित करने के लिए वास्तव में एक छोटा डेटासेट और कम संसाधन है।

दूसरा तरीका जो मैं देख रहा हूं वह पहले से ही प्रशिक्षित मॉडल जैसे GoogleNews-vectors-negative300.bin का विस्तार करना है।

model = Word2Vec.load_word2vec_format('GoogleNews-vectors-negative300.bin', binary=True) 
sentences = gensim.models.word2vec.LineSentence("restaurantSentences") 
model.train(sentences) 

क्या यह संभव है और यह एक अच्छी तरह से उपयोग करने के लिए है, मुझे बाहर करने में मदद

+0

[अद्यतन gensim word2vec मॉडल] के अद्यतन डुप्लिकेट (http://stackoverflow.com/questions/22121028/update-gensim-word2vec-model) – ksindi

उत्तर

1

कुछ लोगों gensim विस्तार ऑनलाइन प्रशिक्षण अनुमति देने के लिए काम कर रहे हैं कृपया।

एक जोड़े GitHub पुल अनुरोध आपको लगता है कि प्रयास पर प्रगति के लिए देखने के लिए चाहते हो सकता है:

यह इस सुधार की तरह दिखता है अद्यतन करने की अनुमति दे सकता गूगल समाचार-vectors- नकारात्मक 300.बीबी मॉडल।

+0

महान समाचार, ... काश मैं ऑनलाइन प्रशिक्षण कर सकता हूं और बस इसके लिए इंतज़ार कर रहा हूं :) –

0

मॉडल निर्माता ने मॉडल प्रशिक्षण को अंतिम रूप देने के लिए यह संभव है। अजगर में यह है:

model.sims(replace=True) #finalize the model 

अगर मॉडल यह बड़े डेटासेट के साथ मॉडल के लिए एक आदर्श तरीका है को अंतिम रूप देने में नहीं आया।

Radim Rehurek से वाक्य के साथ डेटा इनपुट तैयार कर रहा है iterable: https://rare-technologies.com/word2vec-tutorial/

sentences = MySentences('newcorpus') 

मॉडल

model = gensim.models.Word2Vec(sentences) 

साथ शब्दावली पारस्परिक की स्थापना

1

यह कैसे मैं तकनीकी रूप से समस्या हल हो जाती है गूगल शब्द वैक्टर

model.intersect_word2vec_format('GoogleNews-vectors-negative300.bin', 
           lockf=1.0, 
           binary=True) 

अंत मॉडल को क्रियान्वित करने और अद्यतन करने

model.train(sentences) 

चेतावनी का एक नोट: देखने के एक मूल बिंदु से, यह निश्चित रूप से अत्यधिक बहस का मुद्दा है कि क्या एक कोष बहुत छोटे होने की संभावना वास्तव में "सुधार" कर सकते हैं गूगल शब्दकोष एक बड़े पैमाने पर प्रशिक्षित ...

+1

आपकी टिप्पणी से पता चलता है कि इस विधि को Google के "सुधारने" के लिए डिज़ाइन किया गया है शब्द वैक्टर। [प्रलेखन] (https://radimrehurek.com/gensim/models/word2vec.html) सुझाव देगा कि यह वास्तव में आपके मॉडल को बेहतर बनाने के लिए Google के वैक्टर का उपयोग करता है, न कि दूसरी तरफ। * (मौजूदा शब्दकोष में कोई शब्द नहीं जोड़ा गया है, लेकिन शब्दों को छेड़छाड़ करने वाले शब्दों को छेड़छाड़ करने के लिए, और गैर-अंतरंग शब्दों को अकेला छोड़ दिया जाता है।) * मैंने आपकी विधि की कोशिश की और मेरे मॉडल के कॉर्पस आकार की जांच की। यह नए समाचार डेटा को प्रतिबिंबित करता है, न कि Google समाचार। – lgallen

+0

आप सही हैं - हो सकता है कि शब्द _to reform_ यहां भ्रामक है। कोड क्या करता है यह नए कॉर्पस से शब्दों को अद्यतन करता है और आपको उनको वापस देता है। –

संबंधित मुद्दे