feature column浅析和pytorch实现

简介

一提到feature column我相信大部分人都想到的是tf中的类。但是我自己一直好奇为什么pytorch没有一个官方的feature column类,导致每次使用还需要自己写预处理的逻辑。所以我也实现了一个简单的torch feature col。

当然了,我写的比较简单,处理一般的比赛数据或者小数据还是可以的,不过这样也对他的功能和机理有了比较清楚的了解。

feature column

为什么需要有feature column呢?
很显然,他并不是一个必需品,因为在我刚刚接触的时候就是自己jupyter一个cell一个cell的代码去做预处理或者embedding什么的。但是这样在大的项目或者实际生产应用中肯定是不能接受的。

所以feature column的产生现在似乎已经是公认的预处理必须的一个类了。也就是为什么,即使是使用torch框架的人也要去自己实现,然后再去使用。

当然我个人认为真正的feature column应当是体现在他的分布式处理上的。我自己实现的并不能分布式计算,毕竟我还差得远,但是真正读了tf的feature column源码之后,着实令人佩服。如果有基于分布式的torch实现的feat col还希望某位大佬教教我?

那么什么是feature column呢?
我认为就是一个数据预处理类,或者说特征预处理器。这就很好理解了。

这里有一张非常经典的图,我从百度上截取的:

在这里插入图片描述
简单来说,左边是我们输入的dataframe然后经过feat_col的处理输入到nn网络中。

对于feature column来说本身并不会复制或者存储df数据,而是通过col_name对原始df进行操作,然后输出处理过后的数据。

torch实现

说是torch实现其实就是用了numpy和pandas,哈哈,因为也就是使用torch框架的 才会自己写feat_col,人家TensorFlow毕竟自己有。

有哪几类特征

这里我写了三类,

  1. number

ex:
年份,年龄,成绩
当然了也可以叫连续特征

对于number特征并不需要做什么embedding什么的,处理起来最简单,同时也是因为毕竟连续特征在ctr和推荐等场景中并不会占有很大的比重,毕竟sparse_feat才是老大。

所以对于number特征,我们只需要做一些简单地预处理就可以了,包括scaler,离散化,归一等等。

  1. category

ex:
性别、id

类别特征是最重要的,对于推荐系统来说。
这里的处理就比较重要了,因为不能直接输入,即使输入计算机也看不懂。
所以除了要将类别特征进行编码还需要进行一些变换,我实现的是word2vec的变换,所以对于类别特征的transformer中需要建立词表等操作。

  1. sequence

ex:
用户点击序列1|2|10|100

可别小看这个sequence特征,如果数据里面没有的话我们一般还需要自己去进行特征工程build 序列特征。

很明显,神经网络并不能看懂带有*|*的一个字符串,所以我们需要进行切分,然后转换为array的形式进行return。
不过其中有一个问题比较重要,对于一个batch_size的数据,我们需要保证sequence的dimension是相同的,那么还需要添加padding,保证返回的dimension是相同的。

各个类依赖关系

后面我会将源代码放在git上面,然后对照我画 的这个各个类之间的关系图食用体验更佳。

最终我们会返回一个Feature Class,其中包含三个list,分别对应三种特征。
然后每一个list中都是特征类。

在这里插入图片描述

然后对于每一个list中的number class、category class、sequence class,又存在如下的结构:
他们都继承Base class。然后分别包含不同的transformer预处理类。
在这里插入图片描述
当调用Feature的transform方法的时候就会对不同的特征进行各自不同的transform变换。

git地址

传送门

大家共勉~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值