예, 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
임베드 매트릭스에서 찾습니다.
추신 : 그것은 embedding_dimension
응용 프로그램에 맞게 조정해야하지만 Word2Vec 및 GloVe 와 같은 인기있는 모델 인 하이퍼 매개 변수입니다.300
은 각 단어를 나타내는 차원 벡터를 사용 합니다.
보너스 읽기 word2vec 스킵 그램 모델