मैं समझने की कोशिश कर रहा हूं कि कैसे word2vec example काम करता है और वास्तव में समझ नहीं आता है कि वजन और पूर्वाग्रहों का उद्देश्य nse_loss फ़ंक्शन में पारित किया गया है। फ़ंक्शन में दो परिवर्तनीय इनपुट होते हैं: वजन (प्लस पूर्वाग्रह) और एम्बेडिंग।tensorflow word2vec उदाहरण में वजन और पूर्वाग्रह का उद्देश्य क्या है?
# Look up embeddings for inputs.
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
# Construct the variables for the NCE loss
nce_weights = tf.Variable(
tf.truncated_normal([vocabulary_size, embedding_size],
stddev=1.0/math.sqrt(embedding_size)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))
दोनों यादृच्छिक रूप से प्रारंभ किए गए हैं और (जहां तक मैं समझता हूं) दोनों सीखने के दौरान अपडेट के अधीन हैं।
# Compute the average NCE loss for the batch.
loss = tf.reduce_mean(
tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,
num_sampled, vocabulary_size))
मुझे लगता है कि उनमें से दोनों को प्रशिक्षित मॉडल का प्रतिनिधित्व करना चाहिए। हालांकि समानता गणना के लिए बाद में वजन और पूर्वाग्रह का उपयोग कभी नहीं किया जाता है। इसके बजाए, केवल एक घटक का उपयोग किया जाता है:
# Compute the cosine similarity between minibatch examples and all embeddings.
norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))
normalized_embeddings = embeddings/norm
valid_embeddings = tf.nn.embedding_lookup(
normalized_embeddings, valid_dataset)
similarity = tf.matmul(
valid_embeddings, normalized_embeddings, transpose_b=True)
तो मॉडल के दूसरे घटक के बारे में क्या? क्यों वजन और पूर्वाग्रहों को नजरअंदाज किया जा रहा है?
धन्यवाद।
मुझे लगता है कि आपका क्या मतलब है, लेकिन इस मामले में प्रति शब्द इनपुट और आउटपुट प्रति इनपुट एम्बेडिंग से यादृच्छिक मूल्य हैं। आम तौर पर, सीखने की प्रक्रिया के दौरान परतों के वजन और पूर्वाग्रह अद्यतन किए जा रहे हैं। लेकिन इस मामले में (मुझे क्या भ्रमित करता है) सीखने की प्रक्रिया अद्यतन इनपुट, आउटपुट (जो दोनों एम्बेडिंग के विभिन्न हिस्सों से आ रहे हैं) के साथ-साथ वजन भी अपडेट करते हैं। और इसके अलावा, सीखना यादृच्छिक प्रतीत होता है क्योंकि भार प्रत्येक शब्द के लिए यादृच्छिक हैं। क्या मैं कुछ भूल रहा हूँ? – WarGoth
वे यादृच्छिक मान नहीं हैं, वे मूल्यवान रूप से चुने गए मान हैं। जब आपके पास डेटा सेट होता है और आप कई युगों के लिए एल्गोरिदम चलाने जा रहे हैं, तो आप प्रत्येक युग के डेटासेट के क्रम को यादृच्छिक बनाना है, यही कारण है कि मान यादृच्छिक रूप से चुने जाते हैं। वजन शुरुआत में यादृच्छिक हैं और फिर प्रत्येक बैच में अनुकूलक द्वारा संशोधित किया जाता है। स्थानीय minimums में फंसने से बचने के लिए वे शुरुआत में यादृच्छिक हैं। – jorgemf
यह मेरे लिए बहुत मस्तिष्क बह रहा है। क्या आपका मतलब है कि हमें वजन की आवश्यकता नहीं है क्योंकि हमें केवल शब्दों के बीच संबंधों की आवश्यकता है, न कि 'पूर्ण' मूल्य? और ऐसे गणित संचालन में सभी वजन रद्द हो जाएंगे? – WarGoth