作者:Ivan Ilin,Vladimir Chikin,Kirill Solodskih
iki每日馈送的屏幕截图
这篇文章解决了构建基于深度学习架构的推荐系统的一般问题。文中描述的特定架构是为的新智能馈送提供支持,提升技能,检查其性能,请尝试使用产品测试版。
https://app.iki.ai/
如果你了解推荐系统的一般概念和主流方悉的话,并了解解决方案的细节,请跳过本文的前两部分。
介绍
推荐系统改变了我们与大量服务交互的方式。它们不是提供静态数据,而是提供了交互式体验,可以选择留下你的反馈,并使提供的信息实现个性化。推荐系统为每个用户独立创建个性化信息流,但也考虑了所服务的所有用户的行为。
通常,用户不可能通过检查在线电影网站中的电影、在线商店中的消费品或任何其他内容来选择各种给定选项。如果服务中存在大量内容,则用户将面临信息过载的问题。解决此问题的方法之一是利用目标建议。
iki是一种服务示例,其中目标内容起着至关重要的作用。Iki将成为用户的个人事业和专业顾问,由机器学习和人工智能相关技术提供支持。在用户定义了其专业兴趣领域之后,iki在推荐系统的帮助下创建了日常内容来源,以及下面描述的深度学习架构。
推荐系统问题设置的一般描述
任何推荐系统中存在的主要对象是用户U,项目R和它们之间的一些交互。这这些交互通常以矩阵F(|U|x|R|)表示,每个单元格包含一些关于交互的信息,也就是项目已被查看/购买的事实、给定的评级,喜欢/不喜欢或其他信息。根据系统中用户和项目的数量,F矩阵可能变得非常大。但是每个用户通常只给出一些评级或仅与系统中的一小部分项目进行交互,这导致非常稀疏的评级矩阵。众所周知,可以减少稀疏模型的独立参数的数量而不会显著地丢失信息。我们讨论了在推荐系统中正确呈现评级数据的问题:我们必须通过具有固定长度n的向量将每个用户映射到一些向量空间,n << |U|和每个项目,通过具有固定长度m,m <<|R 的向量到另一个向量空间。这个问题最常用的解决方案之一是F矩阵的SVD(奇异值分解),它给出了两个形状为|U|xn的矩阵和nx |R|对于给定的n,其乘积是矩阵F的最佳近似值。第一矩阵的行对应于用户的向量,第二矩阵的行对应于系统项目的向量。让我们相应地将这些向量称之为用户和项目的"SVD嵌入"。
https://en.wikipedia.org/wiki/Singular_value_decomposition
在推荐系统中建立预测的传统方法是协同过滤。这种方法的主要假设是,过去对某些项目给出类似评级的用户将来倾向于对其他项目给出类似评级。解决协同过滤问题的最常用方法之一是利用初始稀疏评分矩阵F的SVD创建用户和项目的密集嵌入、NG用户和项目的SVD嵌入。
有几个开放库提供了基于用户评级矩阵来构建各种推荐系统的工具。其中我们可以命名各种矩阵因子分解方法(SVD和NMF)、不同的最近邻算法、聚类方法,基于用户和基于项目的模型。此类解决方案的示例是Surprise库和LightFM库。
除了关于用户与项目交互的信息之外,推荐系统中通常还有一些其他数据分别描述用户和项目。这些数据可以是变化的和异构的,这些项目和用户可以包含一些文本描述、数字特征、分类特征、图像和其他类型的数据。处理和使用这些数据的方式取决于特定问题,而不是推荐系统的通用部分。
推荐系统的主要属性或指标是在大量用户或项目的情况下的推荐相关性和可扩展性。该设置使得共同推荐系统的体系结构由两部分组成:生成候选者(从大型项目集中选择相对较小的子集)和排序模块,给出对所选子集中的每个项的用户兴趣的相关性评级。此评级通常用于按照用户将看到的顺序对项目进行排序。
深度学习驱动的推荐系统架构
具有深度学习架构的基于内容的推荐系统与系统中存在的实际内容密切相关。接下来我们将深入研究iki推荐系统的细节来描述深度学习(DL)方法。
在iki中,用户与内容的交互是视图和评级,这是用户可以喜欢或不喜欢的任何内容元素。我们案例中的一个项目是一个网页,其中包含博客、文章、教程、课程或其他提供专业知识的内容。每个内容元素都有文本描述或文本本身。
内容嵌入是文本向量化过程的结果。我们使用具有300个维度的GloVe语言模型来向量化单独的单词。GloVe是斯坦福大学开发的语言模型,类似于word2vec(保留单词的语义相似性)。区别在于除了保持语义之外,GloVe还利用了统计方法,考虑了文本语料库中出现的单词数量。
我们计算文本语料库中所有出现的单词的tf-idf权重,然后将对应于内容元素的向量计算是该内容元素中具有tf-idf权重的单词的GloVe向量的加权和。
用户可以向他的简历档案中添加关于他当前和过去的工作的一些信息(例如每个工作的职位和内容描述)。我们的系统处理这些数据,并使用为此目的开发的特殊语言模型Skills
Extractor提取每个用户的专业技能列表。简而言之,这个模型的想法是在英语简历的语料库中学习"技能"的语义,并能够从非结构化的英语文本中提取以前看不见的技能。用户还可以人工添加一些技能。为了调整内容馈送,用户必须在类似于Apple Music mechanics的分层标签云上选择一些专业兴趣的领域。iki提供数百种专业兴趣,以及作为用户内容馈送的一部分。用户的技能和选定的标签在我们的推荐系统中用作用户的特征。
iki推荐系统架构
用于训练我们的推荐系统的另一组特征是在将SVD应用于用户的评级矩阵之后获得的内容和用户嵌入。这不是关于系统中评级和视图的信息的唯一用法,我们可以创建用户的向量表示来描述他的观看和评级内容。这是通过以下方式完成的:通过内容的向量表示,我们可以获取用户所查看内容的整个语料库中每个坐标的最小值、最大值和平均值。该操作将产生三个向量,其长度与内容嵌入相同。我们对喜欢和不喜欢的内容集实施相同的操作,获得另外6个具有相同长度的向量。在推荐系统训练步骤中,这些密集嵌入也用作用户的特征。
用户在内容向量空间中喜欢/不喜欢和查看的内容,为简单起见采用3D空间来描绘
生成候选者
对于每个标签(内容主题),我们的推荐系统创建一组单独的推荐,特别是选择候选者子集以进一步排序。iki推荐系统的目标不仅是提供相应主题的内容,而且还按质量和专业水平对内容元素进行排序,以使得每个用户的专业水平适应所得到的馈送。
让我们更深入地了解候选者生成步骤的细节。对于每个标签,我们的系统在以下机制的帮助下选择排序的候选者:最近已经接收到特定用户的正面评级的内容元素,以及围绕这些选定的内容元素的集合被选择(我们采用几个邻域的一些内容嵌入空间)被添加到候选空间。我们还考虑了在所选标签上具有类似近期活动的用户组(为该组用户计算评级和视图向量之间的余弦距离)。最近查看或评级的内容元素集也被添加到候选集中。所描述的邻域半径的变化提供了不同数量的生成候选者。
候选者排序
对于每个标签,训练单独的神经网络实例并将其用于内容候选者排序。训练每个神经网络实例,然后用于对与该标签相对应的内容子集进行排序。排序网络将关于内容元素和用户的一些数据作为输入,并输出1和-1之间的一些数字作为用于内容元素的最终排序的预测评级。该模型根据给定的评级和观点进行训练;该集合的每个样本由用户和内容元素组成,目标值为1表示喜欢,-1表示不喜欢,0表示用户刚刚查看内容而未给予任何评级。
iki排序神经网络架构
排序神经网络有6个不同维度的输入。第一个输入获取有关用户所选标签及其技能的信息,这些信息在嵌入下一层的密集用户配置文件中进行转换。该信息允许系统在对与特定兴趣相对应的内容进行排序时考虑特定用户的其他兴趣(标签)。iki中有一定数量的标签,因此有关它们的信息用固定长度的二进制编码向量进行编码(所选标签为1,其余为0)。
使用SkillsExtractor从用户简历中提取的技能可能有很大的不同,因此我们在统计上需要将它们进行标准化,以消除非常罕见的短语,并最终得到固定长度集。然后我们以与标签相同的二进制方式对技能进行向量化。在定期推荐系统训练期间,我们会更新实际的技能集。
接下来的两个输入采用我们之前描述的用户向量表示,包括评级和查看的平均内容嵌入。它们的输出在下一层结合在一起,在内容嵌入空间中创建密集用户的嵌入,我们将其称为密集用户首选项嵌入。这两个嵌入与其他输入结合在一起,采用内容和用户的SVD嵌入以及内容嵌入。获得的向量向前传递,并经过神经网络的几个密集层。最后一个网络图层的激活函数是tanh,它给出了[-1,1]中的输出值。
iki中冷启动的问题通过以下方式解决:对于没有任何评级的特定标签,系统向新用户推荐一组彼此之间具有显著距离的随机内容元素。这提供了各种完全不同的内容元素,供新用户在其体验开始时进行选择。
结果与模型的基准
在构建上述最终模型之前,我们已经在研究阶段测试了各种推荐系统模型和组合(如SVD、NNMF等)。我们最终得到的模型显示了特定iki数据集的最佳结果准确性。为基于深度学习的推荐系统提供有意义的基准并不是一项简单的任务,因为排序网络的架构是针对特定类型的数据量身定制的,很明显这个特定的架构优于任何基于交互矩阵的推荐系统,因为它利用了形成预测分数的更多数据。
另一个问题是,当你没有足够大的真实用户库、所有配置文件,以及评级数据时,很难模拟真正的推荐系统性能。你可以生成一个数据集,但是生成一个数据集是没有意义的,因此你需要为某些用户量身定制一些技能、经验和偏好,推荐系统将解码此信息,并根据人工用户配置文件定制建议。这种方法为现实世界的自发用户的行为处理提供了空间,这真的很重要。