Goole App 推荐系统
混合了一个线性模型(Wide part)和Deep模型(Deep part),以同时获得推荐结果准确性和扩展性。适用于输入非常稀疏的大规模分类或回归问题。比如推荐系统、search、ranking问题。
e.g. 人脑可以记忆下每天发生的事情(麻雀可以飞,鸽子可以飞)然后泛化这些知识到之前没有看到过的东西(有翅膀的动物都能飞)。但是泛化的规则有时候不是特别的准,有时候会出错(有翅膀的动物都能飞吗),记忆可以修正泛化的规则
线性模型(Wide part)
广义线性模型(如逻辑回归),简单,可扩展,可解释, 需要人为的特征工程。
通过利用交叉特征引入非线性高效的实现记忆能力,达到准确推荐的目的。wide模型通过加入一些宽泛类特征实现一定的泛化能力,但是受限与训练数据,wide模型无法实现训练数据中未曾出现过的泛化。模型的记忆能力可以有效地通过稀疏特征之上的外积变换获得, 外积变换有一个限制,它对于不在训练数据中的查询项不具备泛化能力。
e.g 如:给model一个query(想吃的美食),model返回一个美食,然后你购买/消费了这个推荐。 Wide Part可以对一些特例进行记忆。比如AND(query=”fried chicken”, item=”chicken fried rice”)虽然从字符角度来看很接近,但是实际上完全不同的东西,那么Wide就可以记住这个组合是不好的,是一个特例,下次当你再点炸鸡的时候,就不会推荐给你鸡肉炒米饭了。
Deep模型(Deep part)
基于嵌入的模型(如FM和DNN)可以通过学习到的低维稠密向量实现对以前没有出现过的查询项特征对也具备泛化能力,通过为每个查询和条目特征学习一个低维稠密的嵌入向量,减轻了特征工程负担。如:泛化给你推荐一些字符上看起来不那么相关,但是你可能也是需要的。比如说:你想要炸鸡,Embedding Space中,炸鸡和汉堡很接近,所以也会给你推荐汉堡。
但嵌入的模型的缺点在于它很难有效学习低维表示,当query-item矩阵稀疏且高秩时很难非常效率的学习出低维度的表示(如user有特殊的爱好或item比较小众)。这种情况下,大多数query-item是没有交集的,但稠密嵌入(dense embedding)会给所有query-item带来非零预测,从而可能过度泛化,给出完全不相关的推荐,准确性不能得到保证。而使用外积特征变换的线性模型只需少量参数就能记住这些“特殊偏好”。
所以通过联合训练一个线性模型组件和一个深度神经网络组件设计了一种融合浅层模型和深层模型进行联合训练的框架,得到Wide & Deep模型。综合利用浅层模型的记忆能力(Memorization)和深层模型的泛化能力(Generalization),用一个模型就可以同时获得记忆能力和泛化能力,实现单模型对推荐系统准确性和扩展性的兼顾。