tensorflow--embedding_lookup 和 embedding_lookup_sparse

tf.nn.embedding_lookup ( tensor, id )

作用:选取一个张量里面索引对应的元素
应用场景:单值离散特征的 embedding,相当于 one-hot 编码

用户\水果 苹果 香蕉 草莓 芒果 西瓜 木瓜 火龙果
user1 1 0 0 0 0 0 0
user2 0 0 0 1 0 0 0
user3 0 0 0 0 0 0 1
import tensorflow as tf
import numpy as np

p = tf.Variable(np.arange(21).reshape(7,3))
u = tf.nn.embedding_lookup(p, ids=[0, 3, 6])
with tf.Session() as s:
  s.run(tf.global_variables_initializer())
  print(s.run(t))
  
# [[ 0  1  2]    --- p
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]
#  [12 13 14]
#  [15 16 17]
#  [18 19 20]]
  
# [[ 0  1  2]   ---user1
#  [ 9 10 11]   ---user2
#  [18 19 20]]  ---user3

tf.nn.embedding_lookup_sparse(params, sp_ids)

作用:选取一个张量里面多个索引对应的元素的平均值
应用场景:多值离散特征的 embedding,相当于多次 one-hot 后取平均值

用户\水果 苹果 香蕉 草莓 芒果 西瓜 木瓜 火龙果
user1 1 1 1 0 0 0 0
user2 1 0 0 1 0 0 0
user3 0 0 0 0 1 1 1
import tensorflow as tf
import numpy as np

p = tf.Variable(np.arange(21).reshape(7,3), dtype=tf.float32)
gs = tf.SparseTensor(indices=[[0,0],[0,1],[0,2],[1,0],[1,1],[1,2],[2,0],[2,1]], values=[0,1,2,6,0,3,4,5], dense_shape=(3,3))
embedded_tags = tf.nn.embedding_lookup_sparse(p, sp_ids=tags, sp_weights=None)

with tf.Session() as s:
  s.run([tf.global_variables_initializer(), tf.tables_initializer()])
  print(s.run([embedded_tags]))
  
#[[ 3. ,  4. ,  5. ],    ---user1
# [ 9. , 10. , 11. ],    ---user2
# [13.5, 14.5, 15.5]]    ---user3

比如 user1:( [ 0 1 2 ] + [ 3 4 5 ] + [ 6 7 8 ] ) / 3 = [ 3. , 4. , 5. ]

相关参考:推荐系统遇上深度学习(四)–多值离散特征的embedding解决方案

你可能感兴趣的:(tensorflow)