推荐模型如何进行推荐将取决于您拥有的数据类型。如果您只拥有过去发生的交互数据,您可能有兴趣使用协作过滤。如果您有描述用户及其与之交互过的物品的数据(例如,用户的年龄、餐厅的菜系、电影的平均评价),您可以通过添加内容和上下文过滤,对当前给定这些属性下新交互的可能性进行建模。
推荐矩阵分解
矩阵分解 (MF) 技术是许多热门算法(包括词嵌入和主题建模)的核心,已成为基于协作过滤的推荐中的主要方法。MF 可用于计算用户的评分或交互中的相似度,以提供推荐。在下方简单的用户物品矩阵中,Ted 和 Carol 喜欢电影 B 和 C。Bob 喜欢电影 B。为了向 Bob 推荐电影,矩阵分解计算喜欢 B 的用户也喜欢 C,因此 C 是 Bob 的一个可能建议。
使用交替最小二乘法 (ALS) 算法的矩阵分解将稀疏用户物品评价矩阵 u-by-i 近似为用户和物品因素矩阵的两个密集矩阵的乘积,其大小分别为 u × f 和 f × i(其中 u 表示用户数,i 表示物品数,f 表示潜在特征数)。因素矩阵表示算法尝试发现的潜在特征或隐藏特征。一个矩阵试图描述每个用户的潜在特征或隐藏特征,另一个矩阵则试图描述每部电影的潜在特性。对于每个用户和每个物品,ALS 算法会迭代学习 (f) 数字,“factors”表示用户或物品。在每一次迭代中,算法可以交替地修复一个因子矩阵并针对另一个矩阵进行优化,并且此过程会一直持续到其收敛。
CuMF 是基于 NVIDIA® CUDA® 的矩阵因子库,可优化替代最小二乘法 (ALS) 方法,以求解大规模的 MF。CuMF 使用一系列技术,以便在单个和多个 GPU 上更大限度地提高性能。这些技术包括利用 GPU 显存层次结构对稀疏数据进行智能访问、将数据并行与模型并行结合使用,以最大限度减少 GPU 之间的通信用度以及全新的拓扑感知型并行减少方案。
用于推荐的深度神经网络模型
人工神经网络 (ANN) 存在不同变体,如下所示:
- 只将信息从一层向前馈送至下一层的人工神经网络称为前馈神经网络。多层感知器 (MLP) 是一种前馈 ANN,由至少三层节点组成:输入层、隐藏层和输出层。MLP 是可应用于各种场景的灵活网络。
- 卷积神经网络是识别物体的图像处理器。
- 时间递归神经网络是解析语言模式和序列数据的数学工具。
深度学习 (DL) 推荐模型基于现有技术(例如,分解)而构建,以便对变量和嵌入之间的交互进行建模,从而处理类别变量。嵌入是表示实体特征的已学习的数字向量,因此相似的实体(用户或物品)在向量空间中具有相似的距离。例如,协作过滤深度学习方法基于用户和物品与神经网络的交互来学习用户和物品嵌入(潜在特征向量)。
DL 技术还利用庞大且快速发展的新颖网络架构和优化算法,对大量数据进行训练,利用深度学习的强大功能进行特征提取,并构建更具表现力的模型。
当前基于 DL 的推荐系统模型:DLRM、Wide and Deep (W&D)、神经协作过滤 (NCF)、b变分自动编码器 (VAE) 和 BERT(适用于 NLP)构成了 NVIDIA GPU 加速 DL 模型产品组合的一部分,并涵盖推荐系统以外的许多不同领域的各种网络架构和应用程序,包括图像、文本和语音分析。这些模型专为使用 TensorFlow 和 PyTorch 进行训练而设计和优化。
神经协作过滤
神经协作过滤 (NCF) 模型是一个神经网络,可基于用户和物品交互提供协作过滤。该模型从非线性角度处理矩阵分解。NCF TensorFlow 以一系列(用户 ID、物品 ID)对作为输入,然后分别将其输入到矩阵分解步骤(其中嵌入成倍增加)并输入到多层感知器 (MLP) 网络中。
然后,将矩阵分解和 MLP 网络的输出将组合到一个密集层中,以预测输入用户是否可能与输入物品交互。
用于协作过滤的变分自动编码器
自动编码器神经网络使用隐藏层中获取的表征,来重建输出层的输入层。用于协作过滤的自动编码器可以学习用户物品矩阵的非线性表征,并可通过确定缺失值重建该矩阵。
用于协作过滤 (VAE-CF) 的 NVIDIA GPU 加速变分自动编码器是一种优化的架构实现,首先在用于协作过滤的变分自动编码器中介绍。VAE-CF 是一个神经网络,可基于用户和物品交互提供协作过滤。此模型的训练数据由用户和物品之间的每次交互的用户项 ID 对组成。
模型包含两部分:编码器和解码器。编码器是一个前馈全连接神经网络,可将输入向量(包含特定用户的交互)转换为 n 维变分分布。这种变分分布用于获取用户(或嵌入)的潜在特征表征。然后,将这种潜在表征输入到解码器中,解码器也是一个与编码器结构相似的前馈网络。结果为特定用户的物品交互概率向量。
上下文序列学习
时间递归神经网络 (RNN) 是具有记忆或反馈回路的一类神经网络,允许其更好地识别数据中的模式。RNN 可以解决处理上下文和序列(例如自然语言处理)的艰巨任务,还可用于上下文序列推荐。序列学习与其他任务的区别是,序列学习需要使用具有主动数据存储的模型(例如 LSMS(长短期记忆模型)或 GRU 门控循环单元)来学习输入数据的时间依赖关系。这种对过往输入的记忆对于顺利进行序列学习至关重要。Transformer 深度学习模型,如 BERT(Transformer 双向编码器表征模型),是 RNN 的一个替代方案,它应用了一种注意力技术 – 通过将注意力集中在前后最相关的词上来解析一个句子。基于 Transformer 的深度学习模型不需要按顺序处理连续数据,与 RNN 相比,可以在 GPU 上实现更多的并行化,并减少训练时间。
在 NLP 应用中,会使用词嵌入等技术将输入文本转换为词向量。借助词嵌入,可将句子中的每个词翻译成一组数字,然后再输入到 RNN 变体、Transformer 或 BERT 中,以理解上下文。神经网络在训练自身时,这些数字会随时发生变化,编码每个单词的语义和上下文信息等独特属性,这意味着,相似词在此数字空间中彼此接近,不同词则相距遥远。这些 DL 模型为特定语言任务(例如下一词语预测和文本摘要)提供适当的输出,这些任务用于生成输出序列。
基于会话上下文的推荐将深度学习和 NLP 序列建模方面的进步应用于推荐内容。基于用户会话中的事件序列训练的 RNN 模型(例如,查看的产品、数据和交互时间)会学习预测会话中的下一个物品。会话中的用户物品交互类似于句子中的词嵌入。例如,在将观看的电影输入 RNN 变体(例如 LSTM、GRU 或 Transformer)之前,需要将其转换为一组数字,以理解上下文。
Wide & Deep
Wide & Deep 是指使用并行处理两个部分(Wide 模型和 Deep 模型)的输出,并对其输出进行求和以创建交互概率的网络类别。Wide 模型是特征及其转换的一个广义线性模型。Deep 模型是一个密集神经网络 (DNN),由 5 个隐藏 MLP 层(包含 1024 个神经元)组成,每个层都从密集特征嵌入开始。分类变量会嵌入到连续向量空间中,然后通过学习的嵌入或用户确定的嵌入输入到 DNN 中。
为何模型能够成功执行推荐任务,原因之一是提供数据中的两种学习模式:“deep”和“shallow”。复杂的非线性 DNN 能够学习数据中丰富的关系表征,并可通过嵌入来推广到相似的物品,但需要查看相关关系的多种示例才能做得更好。另一方面,线性部分能够“记住”可能仅在训练集内发生几次的简单关系。
综合来说,这两种表征信道通常比单种表征信道提供更多的建模能力。NVIDIA 与许多使用离线和在线指标报告改进的行业合作伙伴合作,他们使用 Wide & Deep 替代传统机器学习模型。
DLRM
DLRM 是一种基于 DL 的模型,适用于推荐,由 Facebook 研究院提出。它旨在同时使用推荐系统训练数据中通常呈现的分类输入和数值输入。要处理分类数据,嵌入层将每个类别映射到密集表征,然后再将其输入到多层感知器 (MLP)。数值特征可直接输入到 MLP。
在下一级别中,通过在所有嵌入向量对和已处理的密集特征之间取点积,显式计算不同特征的二次交互。并将这些成对交互输入到顶层 MLP 中,以计算用户和物品对之间的交互概率。
与其他基于 DL 的推荐方法相比,DLRM 有两种差异。首先,它可以对特征交互进行显式计算,同时将交互顺序限制为成对交互。其次,DLRM 将每个嵌入式特征向量(对应分类特征)视为一个单元,而其他方法(如 Deep 和 Cross)则将特征向量中的每个元素视为应生成不同交叉项目的新单元。这些设计选项,有助于降低计算/内存成本,同时保持竞争的准确性。
DLRM 是 NVIDIA Merlin 的一部分,后者是一个基于 DL 所构建的高性能推荐系统框架,我们下面将介绍这一框架。