हां, tf.nn.embedding_lookup()
फ़ंक्शन का उद्देश्य एम्बेडिंग मैट्रिक्स में एक लुकअप करना और शब्दों के एम्बेडिंग (या सरल शब्दों में वेक्टर प्रतिनिधित्व) को वापस करना है।
एक साधारण एम्बेडिंग मैट्रिक्स (आकार का vocabulary_size x embedding_dimension
) : नीचे की तरह दिखेगा। (यानी प्रत्येक शब्द को संख्याओं के एक वेक्टर द्वारा दर्शाया जाएगा ; इसलिए नाम word2vec )
मैट्रिक्स को एम्बेड करना
the 0.418 0.24968 -0.41242 0.1217 0.34527 -0.044457 -0.49688 -0.17862
like 0.36808 0.20834 -0.22319 0.046283 0.20098 0.27515 -0.77127 -0.76804
between 0.7503 0.71623 -0.27033 0.20059 -0.17008 0.68568 -0.061672 -0.054638
did 0.042523 -0.21172 0.044739 -0.19248 0.26224 0.0043991 -0.88195 0.55184
just 0.17698 0.065221 0.28548 -0.4243 0.7499 -0.14892 -0.66786 0.11788
national -1.1105 0.94945 -0.17078 0.93037 -0.2477 -0.70633 -0.8649 -0.56118
day 0.11626 0.53897 -0.39514 -0.26027 0.57706 -0.79198 -0.88374 0.30119
country -0.13531 0.15485 -0.07309 0.034013 -0.054457 -0.20541 -0.60086 -0.22407
under 0.13721 -0.295 -0.05916 -0.59235 0.02301 0.21884 -0.34254 -0.70213
such 0.61012 0.33512 -0.53499 0.36139 -0.39866 0.70627 -0.18699 -0.77246
second -0.29809 0.28069 0.087102 0.54455 0.70003 0.44778 -0.72565 0.62309
मैंने उपरोक्त एम्बेडिंग मैट्रिक्स को विभाजित किया और केवल लोड किया शब्दों को किया है vocab
जिसमें हमारी शब्दावली और emb
सरणी में संबंधित वैक्टर होंगे ।
vocab = ['the','like','between','did','just','national','day','country','under','such','second']
emb = np.array([[0.418, 0.24968, -0.41242, 0.1217, 0.34527, -0.044457, -0.49688, -0.17862],
[0.36808, 0.20834, -0.22319, 0.046283, 0.20098, 0.27515, -0.77127, -0.76804],
[0.7503, 0.71623, -0.27033, 0.20059, -0.17008, 0.68568, -0.061672, -0.054638],
[0.042523, -0.21172, 0.044739, -0.19248, 0.26224, 0.0043991, -0.88195, 0.55184],
[0.17698, 0.065221, 0.28548, -0.4243, 0.7499, -0.14892, -0.66786, 0.11788],
[-1.1105, 0.94945, -0.17078, 0.93037, -0.2477, -0.70633, -0.8649, -0.56118],
[0.11626, 0.53897, -0.39514, -0.26027, 0.57706, -0.79198, -0.88374, 0.30119],
[-0.13531, 0.15485, -0.07309, 0.034013, -0.054457, -0.20541, -0.60086, -0.22407],
[ 0.13721, -0.295, -0.05916, -0.59235, 0.02301, 0.21884, -0.34254, -0.70213],
[ 0.61012, 0.33512, -0.53499, 0.36139, -0.39866, 0.70627, -0.18699, -0.77246 ],
[ -0.29809, 0.28069, 0.087102, 0.54455, 0.70003, 0.44778, -0.72565, 0.62309 ]])
emb.shape
# (11, 8)
TensorFlow में एंबेडिंग लुकअप
अब हम देखेंगे कि हम कुछ मनमाने इनपुट वाक्य के लिए एम्बेडिंग लुकअप कैसे कर सकते हैं ।
In [54]: from collections import OrderedDict
# embedding as TF tensor (for now constant; could be tf.Variable() during training)
In [55]: tf_embedding = tf.constant(emb, dtype=tf.float32)
# input for which we need the embedding
In [56]: input_str = "like the country"
# build index based on our `vocabulary`
In [57]: word_to_idx = OrderedDict({w:vocab.index(w) for w in input_str.split() if w in vocab})
# lookup in embedding matrix & return the vectors for the input words
In [58]: tf.nn.embedding_lookup(tf_embedding, list(word_to_idx.values())).eval()
Out[58]:
array([[ 0.36807999, 0.20834 , -0.22318999, 0.046283 , 0.20097999,
0.27515 , -0.77126998, -0.76804 ],
[ 0.41800001, 0.24968 , -0.41242 , 0.1217 , 0.34527001,
-0.044457 , -0.49687999, -0.17862 ],
[-0.13530999, 0.15485001, -0.07309 , 0.034013 , -0.054457 ,
-0.20541 , -0.60086 , -0.22407 ]], dtype=float32)
निरीक्षण करें कि हमने अपनी शब्दावली में शब्दों के सूचकांकों का उपयोग करके अपने मूल एम्बेडिंग मैट्रिक्स (शब्दों के साथ) से एम्बेडिंग कैसे प्राप्त की ।
आमतौर पर, इस तरह के एक एम्बेडिंग लुकअप पहली परत (कहा जाता है) द्वारा किया जाता है एंबेडिंग लेयर ) जो बाद में इन एम्बेडिंग को आगे की प्रक्रिया के लिए RNN / LSTM / GRU लेयर्स तक पहुंचाता है।
साइड नोट : आमतौर पर शब्दावली में एक विशेष भी होगाunk
टोकन । इसलिए, यदि हमारी इनपुट वाक्य से एक टोकन हमारी शब्दावली में मौजूद नहीं है, तो अनुक्रमणिका unk
मैट्रिक्स में देखे जाने वाले अनुक्रमणिका को देखा जाएगा।
PS ध्यान दें कि embedding_dimension
एक हाइपरपैरेट है जो किसी को अपने आवेदन के लिए ट्यून करना पड़ता है लेकिन Word2Vec जैसे लोकप्रिय मॉडल और GloVe300
प्रत्येक शब्द का प्रतिनिधित्व करने के लिए आयाम वेक्टरका उपयोगकरते हैं।
बोनस रीडिंग word2vec स्किप-ग्राम मॉडल