基于深度学习的CTR模型DeepCTR 更新啦!

文章来源于浅梦的学习笔记,作者努力学习的浅梦

自deepctr v0.7.0在去年11月底发布后,由于个人的一些原因没能及时的跟进和解答朋友们在github issue区,DeepCTR交流群以及通过邮件的方式提出的相关问题,这里先说一声抱歉,希望没有影响到朋友们的学习和工作。

放假回家在家里躺平放空若干天后,总算有心情打开电脑改改代码了。这篇文章主要介绍一下在新版本v0.7.1中主要做了哪些改动~

主要功能和改进

WeightedSequenceLayer的参数weight_normalization 在外部没有暴露API

  • 问题描述

基于深度学习的CTR模型DeepCTR 更新啦!_第1张图片

https://github.com/shenweichen/DeepCTR/issues/163

  • 问题分析

这个问题起源于v0.6.3中deepctr支持了带权重的序列类型特征。

对于权重分数,我们在实现的时候是支持了对权重进行归一化操作的,而用户在实际使用的时候无法感知到这个功能,默认使用不进行归一化的模式,需要用户自己修改源码令WeightedSequenceLayer中的weight_normalization=True来实现启用权重分数归一化的模式。

  • 解决方案

VarLenSparseFeat中添加weight_norm参数,用户在定义带权序列特征的时候,通过设置weight_normTrue或者False来控制是否进行权重分数归一化,默认为True

问题修复

线性特征列中的离散稀疏特征的embedding维度不为1会导致模型失去记忆性

  • 问题描述

基于深度学习的CTR模型DeepCTR 更新啦!_第2张图片

https://github.com/shenweichen/DeepCTR/issues/178

  • 问题分析

这个问题是在v0.7.0版本中支持了对不同特征组采用不同的embedding维度引入的。

在v0.7.0以前的版本中,模型支持linear_feature_columnsdnn_feature_columns,分别为代表记忆性的wide侧和代表泛化性的deep侧。wide侧的SparseFeat模型会自动设置其embedding维度为1来模拟onehot的记忆特性,deep侧的SparseFeat通过模型的embedding_size参数来控制所有特征组的embedding维度。

在v0.7.0中,特征组的embedding维度需要在定义特征列时使用SparseFeatembedding_dim参数设置,该参数默认为4。

若用户没有指定输入进linear_feature_columnsSparseFeatembedding_dim=1,则会导致模型的wide侧失去记忆性。这不符合预期。

  • 解决方案

在获取wide侧logit值的方法get_linear_logit中,强制覆盖SparseFeatembedding_dim=1。换言之,输入进linear_feature_columnsSparseFeatembedding_dim失效,会被模型强制设置为1。

版本检查中抛出的异常用户难以理解,影响后续使用

  • 问题描述

基于深度学习的CTR模型DeepCTR 更新啦!_第3张图片

https://github.com/shenweichen/DeepCTR/issues/176

  • 问题分析

在一些无法连接网络或者pip配置有过修改的机器上,deepctr的版本检查会抛出大段用户难以理解的异常。

  • 解决方案

版本检查在出现错误时提示用户访问deepctr网站进行人工版本检查,不再输出异常提示信息。

API变化

deepctr.layers.sequence.WeightedSequenceLayer

WeightedSequenceLayer中的weight_normalization默认值变为True

  • 旧:deepctr.layers.sequence.WeightedSequenceLayer(weight_normalization=False, supports_masking=False)

  • 新:deepctr.layers.sequence.WeightedSequenceLayer(weight_normalization=True, supports_masking=False)

deepctr.inputs.VarLenSparseFeat

由于VarLenSparseFeatSparseFeat存在较多相同参数,且很多情况下相同参数的取值也是相同的(如用户历史商品点击序列和待预估商品),故将VarLenSparseFeat的初始化参数更改为由一个SparseFeat的实例和其他序列相关的参数组成。

对用户而言,只需要理解SparseFeat的参数含义以及一些序列相关的参数含义就可以使用VarLenSparseFeat

  • 旧:VarLenSparseFeat(name, maxlen, vocabulary_size, embedding_dim=4, combiner="mean", use_hash=False, dtype="float32", length_name=None, weight_name=None, embedding_name=None, group_name=DEFAULT_GROUP_NAME)

  • 新:VarLenSparseFeat(sparsefeat, maxlen, combiner="mean", length_name=None, weight_name=None, weight_norm=True)

以上就是本次更新的说明,快使用命令pip install -U deepctr更新吧!希望朋友们能够多多支持,多多提意见!谢谢!

备注:公众号菜单包含了整理了一本AI小抄非常适合在通勤路上用学习

往期精彩回顾




适合初学者入门人工智能的路线及资料下载机器学习在线手册深度学习在线手册AI基础下载(第一部分)备注:加入本站微信群或者qq群,请回复“加群”获取一折本站知识星球优惠券,请回复“知识星球”

喜欢文章,点个在看

你可能感兴趣的:(基于深度学习的CTR模型DeepCTR 更新啦!)