Tensorflow2的多值离散特征embedding处理

最近项目需要用到对多值离散特征embedding处理,但是网上流行的都是tensorflow1的实现,用tensorflow2实现又踩了颇多API的坑,这里贴一下基于tensorflow2的代码以供朋友们参考。
输入:

0         757713 757713 757713 718096 757713 613698 7577...
1         800752 800752 800752 800752 800752 800752 8007...
2         709909 709909 709909 709909 709909 709909 1133...
3                                             399879 399879
4          684569 684569 488509 684569 684569 670847 670847
5         918215 918215 918215 918215 207615 836298 5043...
6         117858 594091 117858 488509 488509 488509 4885...

这里是Dataframe里面一列,每个item以空格分隔。
输出结果:


import tensorflow as tf

TAG_SET=list(key2index.keys()) ##表示所有items的集合##
def sparse_from_csv(csv):
    post_tags_str=list(csv)
    table = tf.lookup.StaticHashTable(
        tf.lookup.KeyValueTensorInitializer(list(key2index.keys()),list(key2index.values())), default_value=-1) ## 这里构造了个查找表 ##
    split_tags=tf.strings.split(csv," ")
    split_tags=tf.RaggedTensor.to_sparse(split_tags)
    return tf.SparseTensor(
        indices=split_tags.indices,
        values=table.lookup(split_tags.values), ## 这里给出了不同值通过表查到的index ##
        dense_shape=split_tags.dense_shape)
EMBEDDING_DIM=16 ##embedding向量的维数##
embedding_params=tf.Variable(tf.random.truncated_normal([len(TAG_SET)+1,EMBEDDING_DIM]))
tags=sparse_from_csv(train['item_id'])
embedded_tags=tf.nn.embedding_lookup_sparse(embedding_params,sp_ids=tags,sp_weights=None)

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

你可能感兴趣的:(Tensorflow实战,推荐系统)