原文:
www.kdnuggets.com/2022/11/linkedin-uses-machine-learning-rank-feed.html
LinkedIn 动态是该网站上数百万用户的起点,它为用户建立了第一印象,这种印象,正如你所知,将会持久。为每个用户提供一个有趣的个性化动态,将传达 LinkedIn 最重要的核心价值,即让用户与他们的网络和活动保持联系,并建立专业身份和网络。
LinkedIn 的个性化动态为用户提供了能够快速、有效且准确地查看连接更新的便利。除此之外,它还过滤掉垃圾、非专业和无关的内容,以保持用户的参与。为此,LinkedIn 通过实时应用一系列规则来确定哪些内容符合要求,这些规则基于一系列可操作的指标和预测信号。这一解决方案由机器学习和深度学习算法驱动。
在这篇文章中,我们将讨论 LinkedIn 如何使用机器学习来排序用户的动态。我们将遵循在之前两篇文章中介绍的传统机器学习项目的工作流程。
机器学习项目的工作流程从业务问题陈述和定义约束开始。接着是数据收集和数据准备,然后是建模部分,最后是部署和将模型投入生产。这些步骤将以排名 LinkedIn 动态的背景进行讨论。
LinkedIn / 照片由Alexander Shatov拍摄,来源于Unsplash
设计个性化的 LinkedIn 动态,以最大化用户的长期参与度。由于 LinkedIn 动态应该为每个用户提供有益的专业内容,以增加他们的长期参与。因此,开发能够剔除低质量内容并保留高质量专业内容的模型至关重要。然而,重要的是不要过度过滤动态内容,否则会产生大量的假阳性。因此,我们应该针对分类模型追求高精度和高召回率。
我们可以通过测量点击概率,也就是点击率(CTR),来衡量用户的参与度。在 LinkedIn 动态中,有不同的活动,每种活动的 CTR 不同;在收集数据和训练模型时应考虑这些因素。主要有五种活动类型:
-
**建立连接:**成员与其他成员或公司、页面进行连接或关注。
-
**信息共享:**分享帖子、文章或图片
-
**基于个人资料的活动:**与个人资料相关的活动,例如更改个人资料照片、添加新经历、更改个人资料头部等。
-
**意见特定活动:**与成员意见相关的活动,例如点赞、评论或转发某个帖子、文章或图片。
-
特定网站活动:LinkedIn 特有的活动,例如推荐和申请职位。
指标主要有两种类型:离线评估指标和在线评估指标。我们使用离线指标在训练和建模阶段评估我们的模型。下一步是将模型迁移到一个阶段/沙箱环境中,测试少量真实流量。在此步骤中,使用在线指标评估模型对业务指标的影响。如果与收入相关的业务指标显示持续改善,则可以安全地将模型暴露于更大比例的真实流量中。
最大化 CTR 可以形式化为训练一个有监督的二分类模型。因此,对于离线指标,可以使用归一化交叉熵,因为它有助于模型对背景 CTR 的敏感度降低:
由于在线指标应反映模型部署时用户的参与程度,我们可以使用转换率,即每个动态的点击率。
技术要求将分为两个主要类别:训练阶段和推理阶段。训练阶段的技术要求包括:
-
**大规模训练集:**训练过程中的主要要求之一是能够处理大规模的训练数据集。这需要分布式训练设置。
-
数据偏移:在社交网络中,从离线训练数据到在线数据的数据分布偏移非常常见。解决此问题的一个可能方法是每天多次增量重新训练模型。
推理阶段的技术要求包括:
-
**可扩展性:**能够为超过 3 亿用户提供定制化的用户动态。
-
延迟: 确保延迟时间短,以便在 250 毫秒内为用户提供排名的动态内容是很重要的。由于多个管道需要从多个来源提取数据,然后将活动输入到排名模型中,因此所有这些步骤需要在 200 毫秒内完成。因此,
-
数据新鲜度:模型必须知道用户已经看到什么,否则动态内容将显示重复内容,这会减少用户参与度。因此,数据需要运行得非常快。
主要有四个技术挑战:
-
可扩展性: 主要的技术挑战之一是系统的可扩展性。由于需要服务的 LinkedIn 用户数量极大,大约 3 亿用户。每个用户平均每次访问时看到 40 个活动,每月平均访问 10 次。因此,我们有大约 1200 亿次观察或样本。
-
存储: 另一个技术挑战是数据量巨大。假设点击率每月为 1%。因此,收集到的正面数据将约为 10 亿条数据点,负面标签将为 1100 亿个。我们可以假设每个数据点有 500 个特征,为了简化计算,我们可以假设每行特征需要 500 字节来存储。因此,一个月的数据将为 1200 亿行,每行 500 字节,总大小将为 60TB。因此,我们只需在数据湖中保留最近六个月或一年的数据,其余的存档到冷存储中。
-
个性化: 另一个技术挑战是个性化,因为你需要为不同兴趣的用户提供服务,因此需要确保模型针对每个用户进行个性化。
-
内容质量评估:由于没有完美的分类器,因此某些内容将陷入灰色地带,即使是两个人也可能难以达成一致,是否适合展示给用户。因此,结合人工和机器的解决方案对于内容质量评估变得重要。
在训练机器学习分类器之前,我们首先需要收集标记数据,以便对模型进行训练和评估。数据收集是数据科学项目中的关键步骤,因为我们需要收集代表我们要解决的问题的样本数据,并且与模型投入生产后预期看到的情况相似。在本案例研究中,目标是收集大量不同类型的帖子和内容数据,如第 1.1 节所述。
我们希望收集的标记数据是用户动态中的点击或未点击标记数据。收集点击和未点击数据有三种主要方法:
-
按时间顺序对用户的信息流进行排名:数据将从用户的信息流中收集,并按时间顺序进行排名。这种方法可以用于数据收集。然而,它会基于用户的注意力吸引到前几个信息流。此外,这种方法会引发数据稀疏问题,因为某些活动(例如工作变动)相较于其他活动发生得很少,因此在数据中会被低估。
-
随机服务:第二种方法是随机提供信息流并收集点击和未点击的数据。这种方法不被推荐,因为它会导致糟糕的用户体验和非代表性的数据,而且也无法解决数据稀疏问题。
-
使用算法对信息流进行排序:我们可以使用的最后一种方法是使用算法对用户的信息流进行排序,然后使用排列来随机打乱顶级信息流。这将为信息流提供一些随机性,并有助于收集来自不同活动的数据。
第三步将是为建模步骤准备数据。这一步包括数据清理、数据预处理和特征工程。数据清理将处理缺失数据、异常值和噪声文本数据。数据预处理将包括标准化或归一化、处理文本数据、处理不平衡数据以及其他根据数据情况的预处理技术。特征工程将包括特征选择和降维。这一步主要依赖于数据探索步骤,因为你将获得更多理解,并对数据及其后续处理有更好的直觉。
可以从数据中提取的特征包括:
-
**用户个人资料特征:**这些特征包括职位、用户行业、人口统计信息、教育背景、工作经验等。这些特征是分类特征,因此必须转换为数值,因为大多数模型不能处理分类特征。对于高基数,可以使用特征嵌入,对于低基数,可以使用独热编码。
-
**连接强度特征:**这些特征代表用户之间的相似性。我们可以使用用户的嵌入表示,并测量它们之间的距离来计算相似性。
-
**活动年龄特征:**这些特征代表每个活动的年龄。可以将其处理为连续特征,也可以根据点击目标的敏感性进行分箱处理。
-
**活动特征:**这些特征代表活动的类型,比如标签、媒体、帖子等。这些特征也将是分类特征,并且如前所述,它们必须通过特征嵌入或独热编码转换为数值,具体取决于基数的水平。
-
**亲和力特征:**这些特征代表用户与活动之间的相似性。
-
**意见特征:**这些特征代表用户对帖子、文章、图片、工作变动和其他活动的喜欢/评论。
由于 CTR 通常很小(少于 1%),这会导致数据集不平衡。因此,数据预处理阶段的一个关键步骤是确保数据平衡。因此,我们需要对数据进行重新采样,以增加欠代表的类别。
然而,这只应在训练集上进行,而不应在验证集和测试集上进行,因为它们应代表生产环境中预期看到的数据。
现在数据已准备好进行建模部分,是时候选择和训练模型了。如前所述,这是一个分类问题,在这个分类问题中的目标值是点击。我们可以使用逻辑回归模型来完成这个分类任务。由于数据量非常大,因此我们可以在 Spark 中使用分布式训练的逻辑回归或使用乘法器方法。
我们还可以在分布式设置中使用深度学习模型。在这种情况下,将使用全连接层,并在最终层应用 sigmoid 激活函数。
对于评估,我们可以采用两种方法,第一种是将数据传统地拆分为训练集和验证集。另一种避免离线评估偏差的方法是使用重放评估,如下所示:
-
假设我们有截止时间点 T 的训练数据。验证数据将从 T+1 开始,我们将使用训练好的模型对其进行排序。
-
然后将模型的输出与实际点击进行比较,并计算匹配的预测点击数量。
有很多超参数需要优化,其中之一是训练数据的大小和模型保持频率。为了保持模型的更新,我们可以使用最近六个月的训练数据对现有深度学习模型进行微调,例如。
我们可以用图 1 中所示的高级设计来总结整个提要排序过程。
我们来看看下面图示中排序流程是如何进行的:
-
当用户访问 LinkedIn 主页时,请求将被发送到应用服务器以获取提要。
-
应用服务器将提要请求发送到Feed 服务。
-
Feed 服务随后从模型存储中获取最新的模型,并从特征存储中获取正确的特征。
-
**特征存储:**特征存储保存特征值。在推断过程中,应具有低延迟以在评分前访问特征。
-
Feed 服务接收来自ItemStore的所有提要。
-
项目存储:项目存储保存所有由用户生成的活动。除此之外,它还保存不同用户的模型。由于提供相同的排序方法对每个用户而言是重要的,因此ItemStore为正确的用户提供正确的模型。
-
信息流服务将为模型提供特征以获取预测。这里的信息流服务代表了检索和排名服务,以便于可视化。
-
该模型将返回按 CTR 可能性排序的信息流,然后返回给应用服务器。
图 1. LinkedIn 信息流排名的高层设计。
为了扩展信息流排名系统,我们可以在负载均衡器前放置应用服务器。这将平衡和分配系统中多个应用服务器的负载。
图 2. 扩展后的 LinkedIn 信息流排名高层设计。
-
机器学习设计面试
Youssef Hosni 是 Elfehres 的联合创始人,计算机视觉博士研究员,数据科学家
原文。经许可转载。
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 为你的组织提供 IT 支持