tf.nn.embedding_look 通过参数 ids 查表检索params中对应位置的矩阵,进行维度的扩展,所以 传入的是一维矩阵如[None, 1],则输出 [None,1,embedding] 如果是多维的如[None, seq_length] ,则输 出[None, seq_length, embedding_size]
tf.nn.embedding_lookup(
params,
ids,
partition_strategy='mod',
name=None,
validate_indices=True,
max_norm=None
)
作用:在params表中按照ids查询向量。params是一个词表,大小为NH,N为词的数量,H为词向量维度的大小。图中的params大小为310,表示有3个词,每个词有10维。一句话中有四个词,对应的id为0,2,0,1,按照ids在params中查找。(注意此处只是举例说明,params可以是任意含义的表,不一定是词表,可以是张量,可以是list)
import tensorflow as tf
params = tf.constant([[0.1, 0.4, 0.5, 7.0, 6.4, 1.2, 0.5, 0.3, 3.3, 2.0],
[0.3, 0.4, 0.9, 0.8, 0.5, 0.3, 0.7, 0.5, 0.8, 3.2],
[0.4, 0.9, 1.1, 4.3, 3.4, 0.2, 0.3, 0.2, 0.5, 0.1]])
ids = tf.constant([0, 2, 0, 1])
ids_lookup = tf.nn.embedding_lookup(params, ids)
print("一维度的情况:ids:\n",ids,"\nids_lookup:\n", ids_lookup)
ids_2 = tf.constant([[0, 2, 0, 1]])
ids2_lookup = tf.nn.embedding_lookup(params, ids_2)
print("多维的情况:ids_2:\n", ids_2, "\nids_2_lookup:\n", ids2_lookup)