hello大家好,
自deepctr v0.7.0在去年11月底更新后,由于个人的一些原因没能及时的跟进和解答朋友们在github issue区,DeepCTR交流群以及通过邮件的方式提出的相关问题,这里先说一声抱歉,希望没有影响到朋友们的学习和工作。
放假回家在家里躺平放空若干天后,总算有心情打开电脑改改代码了。这篇文章主要介绍一下在新版本v0.7.1中主要做了哪些改动~
主要功能和改进
WeightedSequenceLayer的参数weight_normalization 在外部没有暴露API
-
问题描述
-
问题分析
这个问题是在v0.6.3中我们支持了带权重的序列类型特征。
对于权重分数,我们在实现的时候是支持了对权重进行归一化操作的,而用户在实际使用的时候无法感知的这个功能,默认使用不进行归一化的模式,需要用户自己修改源码令WeightedSequenceLayer
中的weight_normalization=True
来实现启用权重分数归一化的模式。
- 解决方案
在VarLenSparseFeat
中添加weight_norm
参数,用户在定义带权序列特征的时候,通过设置weight_norm
为True
或者False
来控制是否进行权重分数归一化,默认为True
。
问题修复
线性特征列中的离散稀疏特征的embedding维度不为1会导致模型失去记忆性
-
问题描述
-
问题分析
这个问题是在v0.7.0版本中我们支持了对不同特征组采用不同的embedding维度引入的。
在v0.7.0以前的版本中,模型支持linear_feature_columns
和dnn_feature_columns
,分别为代表记忆性的wide侧和代表泛化性的deep侧。wide侧的SparseFeat
模型会自动设置其embedding维度为1来模拟onehot的记忆特性,deep侧的SparseFeat
通过模型的embedding_size
参数来控制所有特征组的embedding维度。
在v0.7.0中,特征组的embedding维度需要在定义特征列时使用SparseFeat
的embedding_dim
参数设置,该参数默认为4。
若用户没有指定输入进linear_feature_columns
的SparseFeat
的embedding_dim=1
,则会导致模型的wide侧失去记忆性。
- 解决方案
在获取wide侧logit的方法get_linear_logit
中,强制覆盖SparseFeat
的embedding_dim=1
。换言之,输入进linear_feature_columns
的SparseFeat
的embedding_dim
失效,会被模型强制设置为1。
版本检查中抛出的异常用户难以理解,影响后续使用
-
问题描述
-
问题分析
在一些无法连接网络或者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
由于VarLenSparseFeat
和SparseFeat
存在较多相同参数,且很多情况下相同参数的取值也是相同的(如用户历史商品点击序列和待预估商品),故将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
更新吧!希望朋友们能够多多支持,多多提意见!谢谢!