模型实战准备(二) | 模型特征、训练样本的处理
该思维导图由 AI 生成,仅供参考
为什么选择 Spark 为 TensorFlow 处理特征和样本?
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了使用Spark处理深度学习模型训练所需的样本和特征,并将特征存储到Redis中供模型线上服务调用的过程。文章强调了选择合适的平台进行合适的处理,详细介绍了从MovieLens数据集中提取物品特征、用户特征和场景特征的方法,并分享了经验。作者强调了模型自己去判断特征的有效性,并提供了生成模型所需训练样本的方法。此外,文章还讨论了避免引入未来信息的问题,并介绍了使用Spark中的window函数滑动生成历史行为相关特征的方法。最后,对特征数据存入线上供模型服务使用的问题进行了讨论,详细介绍了将特征存储到Redis的操作。整体而言,本文以实战的角度,深入浅出地介绍了模型特征、训练样本的处理方法,为读者提供了实用的技术指导。
《深度学习推荐系统实战》,新⼈⾸单¥68
全部留言(18)
- 最新
- 精选
- onepencil线上会组装当前访问时的历史序列及历史平均值等,可以利用flink实时落盘这些线上特征,这样线下就不用再离线生成,也就杜绝了特征穿越问题
作者回复: 赞,这是业界的解决方法之一,存储特征的snapshot。
2020-11-16353 - Sebastian老师好,想问下使用hset把用户和物品的特征存入redis的场景下,如果用户上亿物品也上亿的话,存入redis会使用很大的资源。实际场景下并不是所有用户都是活跃用户,很多情况下可能用不上。那是否是在redis只存入活跃用户的特征呢?但是如果这样解决,遇到非活跃用户是否就没有特征值了? 从您的实践经验里有什么好的方法吗?
作者回复: 我在存储模块那节课说过,SparrowRecsys项目确实对存储模块进行了一定程度的简化,实际应用中还是要多考虑分级存储,redis实际上当作一个缓存层来使用。 关于大量数据key value数据的存储和线上查找,可以多调研rocksdb,cassandra,dynamodb和mongodb。
2020-11-16211 - 那时刻把评分大于等于 3.5 分的样本标签标识为 1,意为“喜欢”,评分小于 3.5 分的样本标签标识为 0,意为“不喜欢”。这样可以完全把推荐问题转换为 CTR 预估问题。请问老师,3.5分这个值是怎么来的呢? 另外一个问题,我们把评分时间戳作为代表时间场景的特征放到特征工程中。请问把时间戳用于特征工程,有木有需要注意的地方?比如是否是周末,假日等?老师在实际应用中有哪些实践么?
作者回复: 两个问题都很好,希望大家都有这样实践中的思考。 第一个问题。基本原则是我在分析完分数的总体分布后得出的,3.5分基本是正负样本比例1:1的分界线,另外大于3.5分也符合我们直观意义上的高分,所以认为3.5分是比较合理的。 第二个问题。确实像你说的这样,我们实践中经常从时间戳中提取出周末,假日,季节这些特征,因为这些时间特征往往影响着数据的一些潜在模式,所以还是非常有价值的。
2020-11-1749 - AI老师好,为什么用户id和电影id要作为特征进行输入,我的理解是id不是相当于一个索引吗?
作者回复: 用户id和电影id都是非常重要的特征,因为他们之间的关系包含了用户的历史行为信息,其中又隐含了非常多的用户的兴趣偏好。
2021-03-0128 - ZLZ王老师,请问我在训练CTR模型过程中,有两种训练样本处理方式,第一种是使用T-1天的数据进行shuffle,其中80%作为train dataset,20%作为训练过程中的val dataset,即使用T-1天的数据进行模型训练,针对T天的数据进行线上预测;第二种方式是使用T-2天的数据作为train dataset,T-1天的数据作为val dataset,即2使用T-2天的数据进行模型训练,针对第T天的数据进行线上预测;我理解第一种方式是不是容易造成信息穿越,例如在某一天有某个活动,但是第二天没有这个活动,那模型在第二天会效果不好,但是第二种方式线上是采用T-2天的模型,相比于第一种方式(线上使用的是第T-1的模型),是不是效果会打折扣
作者回复: 是这样,第一种方式是不建议采用的。第二种我建议缩短数据分割的粒度,比如改成T-1小时
2021-05-1847 - 萬里長空老师,问一个spark-udf的问题,看官网上定义udf的时候要使用register,但是您这里并没有使用,是sql与DataFrame的区别吗?
作者回复: 是的,是spark sql和直接操作dataframe的区别。直接操作dataframe不用register
2020-11-206 - 倪钰鑫老师好,我想问下用户行为的时间序列,最一开始的那个用户行为的历史数据我们都是置0吗?比如您上面所说的“userAvgRating”,在B上是填A的打分3,那么在A上呢?因为这里收集到的信息A是最前面的,那此时就是置为0吗?还是说可以选一个全局中值填进去呢?
作者回复: 这是个好问题,涉及到默认值选取的问题。常规做法是把全局的均值填进去,但其实没有什么统一的最好的方法。
2021-01-2325 - abc-web王老师,想问一下,如果标签或其他属性是中文内容需要进行特征处理还是直接进行word2vec?谢谢!
作者回复: 先分词再word2vec
2021-01-243 - 榕//add rating features val movieRatingFeatures = samplesWithMovies3.groupBy(col("movieId")) .agg(count(lit(1)).as("movieRatingCount"), format_number(avg(col("rating")), NUMBER_PRECISION).as("movieAvgRating"), stddev(col("rating")).as("movieRatingStddev")) .na.fill(0).withColumn("movieRatingStddev",format_number(col("movieRatingStddev"), NUMBER_PRECISION)) 老师,特征处理中电影的打分特征应该也是要做window处理吧,谢谢~
作者回复: 是这样,最好要进行window处理。可以自行修改提交PR
2021-01-262 - Jay刚入坑,好像一直没有看到关于特征组合的内容,这个点一直没有理解清楚,啥时候会讲讲呢?
作者回复: 组合特征当然可以通过人工组合的手段进行组合,这点我们仍然可以沿用之前传统机器学习的经验。 对于深度学习模型来说,也可以交由模型的内部结构来组合,这一点后面关于模型的讲解还会涉及到。
2020-11-1822