पूर्व-प्रशिक्षित मॉडल भार के साथ एक नया शब्द 2vec मॉडल कैसे शुरू करें?


14

मैं Word2vector मॉडल का उपयोग और प्रशिक्षण के लिए अजगर में जेनसिम लाइब्रेरी का उपयोग कर रहा हूं। हाल ही में, मैं अपने मॉडल के वज़न को कुछ पूर्व-प्रशिक्षित वर्ड 2vec मॉडल जैसे (GoogleNewDataset pretrained मॉडल) के साथ शुरू करने पर विचार कर रहा था। मैं इसके साथ कुछ हफ़्ते से जूझ रहा हूं। अब, मुझे अभी पता चला है कि गेसिम में एक ऐसा फंक्शन है जो मुझे अपने मॉडल के वज़न को पहले से प्रशिक्षित मॉडल वेट के साथ आरंभ करने में मदद कर सकता है। इसका उल्लेख नीचे दिया गया है:

reset_from(other_model)

    Borrow shareable pre-built structures (like vocab) from the other_model. Useful if testing multiple models in parallel on the same corpus.

मुझे नहीं पता कि यह कार्य समान कार्य कर सकता है या नहीं। कृपया सहायता कीजिए!!!


क्या मॉडलों की शब्दावली समान है?
हेमा वर्षा

प्रत्येक रन के लिए यादृच्छिक उत्पन्न संख्या के साथ शब्द 2vec पैरामीटर में से प्रत्येक को आरंभ क्यों नहीं किया जाता है? मैं ऐसा कर सकता था और प्रत्येक पैरामीटर के लिए रैंडम नंबरों के सावधानीपूर्वक चयन के साथ (numFeatures, संदर्भWindow, बीज) मैं यादृच्छिक समानता टुपल्स प्राप्त करने में सक्षम था जो मैं अपने usecase के लिए चाहता था। एक पहनावा वास्तुकला का अनुकरण। दूसरे इसके बारे में क्या सोचते हैं? Pls जवाब दो।
ज़ोर्ज़ करें

आपकी सहायता के लिए धन्यवाद। यह मुझे एक बहुत मदद करता है
frhyme

जवाबों:


18

अभिषेक को धन्यवाद। मैंने इसका पता लगा लिया है! यहां मेरे प्रयोग हैं।

1)। हम एक आसान उदाहरण प्रस्तुत करते हैं:

from gensim.models import Word2Vec
from sklearn.decomposition import PCA
from matplotlib import pyplot
# define training data
sentences = [['this', 'is', 'the', 'first', 'sentence', 'for', 'word2vec'],
            ['this', 'is', 'the', 'second', 'sentence'],
            ['yet', 'another', 'sentence'],
            ['one', 'more', 'sentence'],
            ['and', 'the', 'final', 'sentence']]
# train model
model_1 = Word2Vec(sentences, size=300, min_count=1)

# fit a 2d PCA model to the vectors
X = model_1[model_1.wv.vocab]
pca = PCA(n_components=2)
result = pca.fit_transform(X)
# create a scatter plot of the projection
pyplot.scatter(result[:, 0], result[:, 1])
words = list(model_1.wv.vocab)
for i, word in enumerate(words):
    pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
pyplot.show()

यहाँ छवि विवरण दर्ज करें

उपरोक्त भूखंडों से, हम देख सकते हैं कि आसान वाक्य अलग-अलग शब्दों के अर्थ को दूरियों से अलग नहीं कर सकते।

2)। पूर्व-प्रशिक्षित शब्द एम्बेडिंग लोड करें:

from gensim.models import KeyedVectors

model_2 = Word2Vec(size=300, min_count=1)
model_2.build_vocab(sentences)
total_examples = model_2.corpus_count
model = KeyedVectors.load_word2vec_format("glove.6B.300d.txt", binary=False)
model_2.build_vocab([list(model.vocab.keys())], update=True)
model_2.intersect_word2vec_format("glove.6B.300d.txt", binary=False, lockf=1.0)
model_2.train(sentences, total_examples=total_examples, epochs=model_2.iter)

# fit a 2d PCA model to the vectors
X = model_2[model_1.wv.vocab]
pca = PCA(n_components=2)
result = pca.fit_transform(X)
# create a scatter plot of the projection
pyplot.scatter(result[:, 0], result[:, 1])
words = list(model_1.wv.vocab)
for i, word in enumerate(words):
    pyplot.annotate(word, xy=(result[i, 0], result[i, 1]))
pyplot.show()

यहाँ छवि विवरण दर्ज करें

उपरोक्त आकृति से, हम देख सकते हैं कि शब्द एम्बेडिंग अधिक सार्थक हैं।
आशा है कि यह उत्तर मददगार होगा।


1
यह जवाब काफी जानकारीपूर्ण है और एक मॉडल फ़ाइल में एम्बेड करने में सहायक है।
आकाश कांडपाल

@ harrypotter0 Thx!
शिजियांग वान

साफ और स्पष्ट दोस्त !!!
विजया अथिति

जब मैंने इसका उपयोग करने का प्रयास किया, तो मैंने दो समान डेटासेट के साथ इसका परीक्षण किया। प्रत्येक मॉडल के लिए परिणाम अलग थे। मैं उम्मीद कर रहा था कि जब से मैं एक ही शुरुआती वजन के साथ शुरू करूंगा, मॉडल बाद में समान होंगे। कैसे आया यह मामला नहीं था?
एरिक वीनर

1
@ EricWiener भले ही प्रशिक्षण डेटासेट समान हो, लेकिन प्रत्येक प्रशिक्षण के लिए वैक्टर शब्द यादृच्छिक हैं। समान डेटासेट द्वारा गणना किए गए वेक्टर रिक्त स्थान शब्द समान होना चाहिए, और एनएलपी कार्यों में उपयोग किया जाने वाला प्रदर्शन भी समान होना चाहिए।
शिजियांग वान

4

आइए हम एक नमूना कोड देखें:

>>>from gensim.models import word2vec

#let us train a sample model like yours
>>>sentences = [['first', 'sentence'], ['second', 'sentence']]
>>>model1 = word2vec.Word2Vec(sentences, min_count=1)

#let this be the model from which you want to reset
>>>sentences = [['third', 'sentence'], ['fourth', 'sentence']]
>>>model2 = word2vec.Word2Vec(sentences, min_count=1)
>>>model1.reset_from(model2)
>>>model1.similarity('third','sentence')
-0.064622000988260417

इसलिए, हम देखते हैं कि मॉडल 1 को मॉडल 2 द्वारा रीसेट किया जा रहा है और इसलिए शब्द, 'तीसरा' और 'वाक्य' इसकी शब्दावली में है जो अंततः इसकी समानता दे रहा है। यह मूल उपयोग है, आप रीसेट / चेक () को अप्रशिक्षित / प्रारंभिक अवस्था में भार को रीसेट करने के लिए भी देख सकते हैं।


2

यदि आप शब्द-एम्बेडिंग के लिए पूर्व-प्रशिक्षित नेट की तलाश कर रहे हैं, तो मैं सुझाव दूंगा GloVe। Keras से निम्न ब्लॉग बहुत जानकारीपूर्ण है कि इसे कैसे लागू किया जाए। इसमें पहले से प्रशिक्षित GloVe एम्बेडिंग का लिंक भी है। 50 आयामी वेक्टर से लेकर 300 आयामी वैक्टर तक पूर्व प्रशिक्षित शब्द वैक्टर हैं। वे या तो विकिपीडिया, कॉमन क्रॉल डेटा या ट्विटर डेटा पर बनाए गए थे। आप उन्हें यहाँ डाउनलोड कर सकते हैं: http://nlp.stanford.edu/projects/glove/ । इसके अतिरिक्त, आपको उन्हें लागू करने के तरीके के बारे में केरस ब्लॉग की जांच करनी चाहिए। https://blog.keras.io/using-pre-trained-word-embeddings-in-a-keras-model.html


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.