针对 特征 多值离散 的 embedding

现实中,存在以下情况:玩王者荣耀时,每个人喜欢的英雄有可能不同,有的人喜欢李白和阿珂;有的人喜欢伽罗和鲁班以及扁鹊,对于这种情况,称为多值离散特征。

在博文原 《DeepFM: A Factorization-Machine based Neural Network for CTR Prediction》 DeepFM 模型及python代码 中,DeepFM模型将每个Feature转换成定长的Embedding,即使每个Feature有多个取值结果,也要转换成定长的Embedding。

思路:一个人喜欢三个英雄,其field特征可以表示为[1, 1, 1, 0, 0, … , 0],这样的话对其进行三次embedding_lookup取平均值。

1、数据集

data = ["PengFei,yuji|zhuangzhou|xiaoqiao",
       "lizhen,niumowang|yase|luban",
       "lixu,jialuo|luban|bianque"]

2、离散值集合

Tag = ["yuji", "zhuangzhou", "xiaoqiao", "niumowang", "yase", "jialuo", "luban", "bianque"]

3、需要用到一个SparseTensor表示多维稀疏矩阵,indices记录记录非零元素的位置,values记录该indice下的值,dense_shape记录数组的大小。求解SparseTensor的函数如下:

import tensorflow as tf
def sparse_data(data, Tag):
    ids, tags = tf.decode_csv(data, [[""], [""]])
    table = tf.contrib.lookup.index_table_from_tensor(mapping=Tag, default_value=-1) # table for look up
    split_tags = tf.string_split(tags, '|')
    return tf.SparseTensor(indices=split_tags.indices, values=table.lookup(split_tags.values), dense_shape=split_tags.dense_shape)

4、定义Embedding变量

Tag_Embedding_Dim = 3
embeddings = tf.Variable(tf.truncated_normal([len(Tag), Tag_Embedding_Dim]))

5、得到Embedding值

tags = sparse_data(data, Tag)
embeded_tags = tf.nn.embedding_lookup_sparse(embeddings, tags, None)

sess = tf.Session()
sess.run([tf.global_variables_initializer(), tf.tables_initializer()])
print(sess.run(tags))
print(sess.run(embeded_tags))
SparseTensorValue(indices=array([[0, 0],
       [0, 1],
       [0, 2],
       [1, 0],
       [1, 1],
       [1, 2],
       [2, 0],
       [2, 1],
       [2, 2]], dtype=int64), values=array([0, 1, 2, 3, 4, 6, 5, 6, 7], dtype=int64), dense_shape=array([3, 3], dtype=int64))
[[-0.24038072 -0.58928764 -0.05793802]
 [ 0.7240241  -0.650106    0.5675421 ]
 [ 0.2580167  -0.44628993 -0.7523667 ]]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值