wide&deep模型
线性模型无法学习到训练集中未出现的组合特征;
FM或DNN通过学习embedding vector虽然可以学习到训练集中未出现的组合特征,但是会过度泛化。
Wide Part
Wide Part其实是一个广义的线性模型
长处在于学习样本中的高频部分,优点是模型的记忆性好,对于样本中出现过的高频低阶特征能够用少量参数学习;缺点是模型的泛化能力差,例如对于没有见过的ID类特征,模型学习能力较差。
使用特征包括:
raw input 原始特征
cross-product transformation 组合特征
例子:你给model一个query(你想吃的美食),model返回给你一个美食,然后你购买/消费了这个推荐。 也就是说,推荐系统其实要学习的是这样一个条件概率: P(consumption | query, item)
Wide Part可以对一些特例进行memorization。
比如AND(query=”fried chicken”, item=”chicken fried rice”)虽然从字符角度来看很接近,但是实际上完全不同的东西,那么Wide就可以记住这个组合是不好的,是一个特例,下次当你再点炸鸡的时候,就不会推荐给你鸡肉炒米饭了。
代码部分
# 如果是用于线性部分的embedding层,其维度为1,否则维度就是自己定义的embedding维度 (不是特别理解为什么一定要是1维的)
if is_linear:
for fc in sparse_feature_columns:
embedding_layers_dict[fc.name] = Embedding(fc.vocabulary_size, 1, name='1d_emb_' + fc.name)
非零元素对应的权重相加就等同于进行了全连接操作(非零元素部分乘的是1) 这里提到的权重是否就是1维的embedding?
Deep Part
长处在于学习样本中的长尾部分,优点是泛化能力强,对于少量出现过的样本甚至没有出现过的样本都能做出预测(非零的embedding向量);缺点是模型对于低阶特征的学习需要用较多参才能等同wide部分效果,而且泛化能力强某种程度上也可能导致过拟合出现bad case.
Deep Part通过学习一个低纬度的dense representation(也叫做embedding vector)对于每一个query和item,来泛化给你推荐一些字符上看起来不那么相关,但是你可能也是需要的。比如说:你想要炸鸡,Embedding Space中,炸鸡和汉堡很接近,所以也会给你推荐汉堡。
待续:
[wide&deep模型中如何确定哪些特征适用于wide侧哪些特征适用于deep侧]?(https://www.zhihu.com/question/441160903/answer/1778365034)wide部分特征如何衍生 具体实列待研究