假设您正在开发一款餐点推荐应用,用户输入自己喜欢的餐点,应用会建议他们可能喜欢的类似餐点。您想开发一个可以预测食物相似度的机器学习 (ML) 模型,以便您的应用可以提供高质量的推荐(“因为您喜欢煎饼,所以我们推荐可丽饼”)。
为了训练模型,您需要整理一个包含 5,000 种热门餐点的数据集,包括罗宋汤、热狗、沙拉、披萨和沙瓦玛。

您可以创建一个 meal
特征,其中包含数据集中每种餐点的独热编码表示法。编码是指选择数据的初始数值表示法以训练模型的过程。
![图 2. 顶部:罗宋汤的独热编码图表。
向量 [1, 0, 0, 0, ..., 0] 显示在六个方框上方,每个方框从左到右对齐一个向量数字。方框从左到右包含以下图片:罗宋汤、热狗、沙拉、披萨、[空]、沙瓦玛。中间:热狗的独热编码图表。
向量 [0, 1, 0, 0, ..., 0] 显示在六个方框上方,每个方框从左到右对齐一个向量数字。这些方框中显示的图片从左到右与上面的罗宋汤图表相同。底部:沙威玛的独热编码图表。向量 [0, 0, 0, 0, ..., 1] 显示在六个方框上方,每个方框从左到右对齐一个向量数字。这些方框中显示的图片从左到右与上面的罗宋汤和热狗图表相同。](https://google-developers.gonglchuangl.net/static/machine-learning/crash-course/embeddings/images/food_images_one_hot_encodings.png?authuser=002&hl=zh-cn)
稀疏数据表示法的陷阱
查看这些独热编码时,您会发现这种数据表示法存在一些问题。
- 权重数量。较大的输入向量意味着神经网络需要大量的权重。在独热编码中,如果有 M 个条目,并且在网络输入层后的第一层中有 N 个节点,那么模型必须为该层训练 MxN 个权重。
- 数据点数。模型中的权重越多,高效训练所需的数据就越多。
- 计算量。权重越多,训练和使用模型所需的计算就越多。这很容易就会超出硬件的能力范围。
- 内存占用量。模型中的权重越多,用于训练和应用模型的加速器就需要越多的内存。要高效地扩大规模非常困难。
- 难以支持设备端机器学习 (ODML)。如果您希望在本地设备上运行机器学习模型(而不是在云端提供模型),则需要专注于缩小模型,并希望减少权重数量。
在本模块中,您将学习如何创建嵌入(稀疏数据的低维表示),以解决这些问题。