低代码到底是不是行业毒瘤?一线大厂怎么做的?戳此了解>>> 了解详情
写点什么

百度凤巢提出新一代广告召回系统 MOBIUS,技术深度解读

Miao Fan等

2020 年 7 月 26 日

百度凤巢提出新一代广告召回系统MOBIUS,技术深度解读

众所周知,广告一直是互联网商业变现的主要来源。但在个性化推荐领域,广告推荐一直面临着诸多挑战。如何在不影响用户产品体验的情况下,更精准地推荐用户可能感兴趣的广告,是每个算法工程师长期思考的问题。百度搜索广告系统(“凤巢”)在精确匹配推荐方面积累了丰富的经验,近期,百度“凤巢”团队在 Mobius 项目中公布了广告推荐召回侧的最新研究成果。本文是 AI 前线第 109 篇论文导读,我们将对这项研究工作进行详细解读。


概览


百度搜索 ( 百度网 ) 作为中国最大的商业搜索引擎,每天为数以亿计的在线用户提供各种各样的搜索查询服务。众所周知,广告一直是世界上所有商业搜索引擎公司的主要收入来源。在这篇文章中,我们将重点介绍百度搜索广告系统(百度内部被称为“凤巢”) 的 一些令人兴奋的进展和探索。如 下 图 2 所示,它在检索与用户 queries 相关的广告(ads)以吸引点击方面起着至关重要的作用,因为广告商愿意在他们的广告被点击时付费。百度赞助搜索系统的目标是在在线用户、广告商和我们的赞助搜索平台之间形成并培养一个良性循环。



传统的赞助搜索引擎通常通过两个步骤来显示广告。第一步是给定一个查询检索相关的广告,下一步是根据预测用户的互动行为对这些广告进行排名。作为一个高效的商业赞助搜索引擎,我们曾采用三层漏斗状结构,根据低响应延迟的要求和计算资源的限制,从数十亿个候选广告中筛选出数百条广告。如 下 图 3 所示,顶部匹配层负责在给定用户查询和用户丰富的画像的情况下向下一层提供相关的广告候选。为了涵盖更多与语义相关的广告,主要应用查询扩展和自然语言处理(NLP)的技术。最底层的排名层更关注业务指标,如 CPM(CPM=CTR×Bid)、投资回报率(ROI)等。



然而,由于各种原因,匹配目标和排名目标之间的这种分离/区分导致了较低的商业回报率。给定一个用户查询,我们必须使用复杂的模型,并花费大量的计算资源来对数百甚至数千个候选广告进行排名。也许最令人失望的是,排名模型反馈,许多相关的广告不是由高 CPM 提供的,也不会显示出来。


为了解决这个问题,百度启动了“Mobius”项目,目的是推动 构建 百度的赞助搜索引擎的下一代查询-广告匹配系统。这个项目希望能将不同的学习目标(包括查询广告相关性和许多其他业务指标)统一在一起,以降低响应延迟 、 计算资源的限制和对用户体验的微小负面影响。


本文 将全面介绍 Mobius-V1,这是 团队 第一次尝试教匹配层将 CPM 作为除了查询和广告相关性之外的另一个优化目标。换句话说,Mobius-V1 能够准确、快速地预测数十亿用户查询和广告对的点击率(CTR)。要实现这一目标,必须解决以下主要问题:


  1. 点击历史不足:排名层采用的原始神经点击模型是通过高频广告和用户查询来训练的。当高频广告或高频查询出现时,它倾向于以更高的 CTR 估计查询广告对,即使它们的相关性可能很低。

  2. 高计算/存储成本:Mobius 预计将预测数十亿用户查询和广告对的多个指标(包括相关性、CTR、ROI 等)。它自然面临着计算资源消耗更大的挑战。


为了解决上述问题,我们首先设计了一个受“主动学习”思想启发的 “ teacher-student ” 框架,以增加大规模神经点击模型的训练数据,预测数十亿用户查询和广告对的 CTR。


具体地说,离线数据生成器负责构造给定数十亿用户查询和广告候选的合成查询广告对。这些查询对由教师代理不 断进 行判断,教师代理是从原始匹配层派生出来的,能够很好地度量查询广告对的语义相关性。它可以帮助检测合成查询广告对中的不良案例(即高 CTR 但低相关性)。神经点击模型作为学生,通过附加的 bad cases 来提高对尾部查询和广告的泛化能力,以节省计算资源,满足低响应延迟的要求 。 我们进一步采用最新的近似最近邻(ANN)搜索和最大内积搜索(MIPS)技术来更有效地索引和检索大量广告。


Mobius-V1 作为下一代查询广告匹配系统的第一个版本, 集成了 上述解决方案 来应对挑战 , 目前 已经在百度 的 赞助搜索引擎中部署 上线 。


百度赞助搜索的愿景

长期以来,漏斗形结构是赞助搜索引擎的经典架构。主要包括查询广告匹配和广告排名。查询广告匹配通常是一个轻量级的模块,它测量用户查询与数十亿个广告之间的语义相关性。相比之下,广告排名模块应该关注更多的业务指标,如 CPM、ROI 等,并使用复杂的神经模型来对数百个候选广告进行排序以供显示。这种解耦结构是早期节省昂贵计算资源的明智选择。此外,它还可以促进科学研究和软件工程,因为这两个模块可以分配给不同的研究/开发团队,以最大限度实现各自的目标。


百度的赞助搜索曾经采用三层漏斗状结构,如图 3 所示。顶层匹配层(用 O Matching 表示)的优化目标是使所有查询广告对之间的平均相关得分最大化:



然而,根据对百度赞助搜索引擎表现的长期分析,我们发现匹配目标和排名目标之间的区别/分离往往导致更低的 CPM,这是商业搜索引擎的关键业务指标之一。当排名层中的模型报告匹配层提供的许多相关广告由于估计没有较高的 CPM 而不会显示在搜索结果上,这是 无法 令人满意的。


随着计算资源的快速增长,百度搜索广告团队(“凤巢”)最近成立了 Mobius 项目,旨在研发百度赞助搜索中的下一代查询广告匹配系统。如图 4 所示,本项目的蓝图期望将多个学习目标(包括查询广告相关性和许多其他业务指标)统一到百度赞助搜索的单个模块中,以降低响应延迟、有限的计算资源和对用户体验的微小不利影响为前提。



我们在 Mobius 的第一版,即 Mobius-V1,首次尝试教匹配层,除了查询和广告相关性之外,还将 CPM 作为一个额外的优化目标。这里我们将 Mobius-V1 的目标表述如下:



因此,如何准确预测 Mobius-V1 中数十亿对用户需求和广告候选项的 CTR 成为一个挑战。在本文的其余部分,我们将详细描述如何设计、实现和部署 Mobius-V1。


MOBIUS:下一代查询广告匹配系统

“MobiusV1”是 我们 首次尝试(已成功部署)将神经网络点击模型转移到匹配层,直接面对数十亿用户查询和广告。随着输入数据规模的急剧增加,我们需要离线重新训练神经网络点击模型,并更新广告索引和检索技术。


3.1 主动学习 CTR 模型

6 年多来,百度赞助的搜索引擎一直在使用深度神经网络(DNN)来构建 CTR 模型(规模巨大)。最近,Mobius-V1 采用了一种创新架构。构建 Mobius-V1 的一个直观而简单的方法是在排名层重用原始的 CTR 模型。 这是 一种大规模稀疏的有利于记忆的深度神经网络(DNN)。然而,无论是用户查询还是尾部广告的 CTR 预测都存在严重偏差。


如图 5 所示,同一用户在搜索日志中请求两个查询“TeslaModel3”和“WhiteRose”。对于以往采用的漏斗型结构,首先通过匹配层保证查询“特斯拉车型”与广告“奔驰”的相关性。然后我们在排名层的神经点击模型倾向于预测更高的点击率在查询广告对,因为“特斯拉模型 3”是一个高频查询,并在我们的搜索日志中留下了丰富的“梅赛德斯-奔驰”广告的点击历史。


但 在 Mobius-V1 中,我们尝试使用神经点击网络来直接处理数十亿个查询广告对,而这些广告对缺乏相关性的保证。自然会出现许多不相关的查询广告对(例如,图 5 中的查询“White Rose”和广告“梅赛德斯-奔驰”)。然而,我们发现神经点击模型仍然倾向于预测那些不相关的查询广告对 会有 更高的 CTR。



根据我们对百度赞助搜索的查询日志的分析,广告和用户查询都存在长尾效应和冷启动问题。因此,我们不能直接利用原有的神经点击模型来准确预测数十亿用户查询和尾部广告的点击率。问题的关键在于如何教我们的模型学习识别“低相关性但高 CTR”的查询广告对作为 bad cases。



为了解决这个问题,我们建议使用匹配层中的原始相关判断器作为教师,使我们的神经网络点击模型能够感知到“低相关性”的查询广告对。神经点击模型作为学生,以一种积极的学习方式,从增加的 bad cases 中获得关于相关性的额外知识。图 6 用流程图说明了这种方式,算法 1 显示了用伪代码主动学习的神经点击模型的训练过程。一般来说,主动学习的迭代过程分为两个阶段:数据扩充和 CTR 模型学习。我们 接下来 将逐步细化每个阶段的模块。



数据扩充阶段从将一批点击历史(即用户查询和广告对)从查询日志加载到数据扩充器开始。每次数据增强器接收到查询广告对时,将它们分成两组:一个查询集和一个广告集。然后对这两个集合应用交叉连接运算(⊗),以构造更多的用户查询和广告对。假设一批点击历史中有 m 个查询和 n 个广告,那么数据增强器可以帮助生成 m×n 个综合查询广告对。


在列出所有可能的查询广告对之后,相关判断者参与并负责对这些 查询广告 对的相关性进行评分。为了发现低相关度的查询广告对,我们设定了一个阈值来保留这些对作为候选教材。这些低相关度的查询广告对作为教材,首次被输入到神经点击模型中,并且每一对都被分配上一次迭代的更新模型预测的 CTR。


为了教我们的三类(即点击、取消点击和坏)神经点击模型学习识别“低相关性但高点击率”的查询广告对,我们可以直观地设置另一个阈值来过滤出大部分低点击率的查询广告对。然而,我们考虑一个更好的选择来平衡扩展数据的探索和利用。我们使用了一个数据采样器来选择和标记这些合成查询广告对的预测 CTR 的扩展数据。一旦一个查询广告对作为神经点击网络的坏案例被抽样,这个对就被另一个类别标记,即 bad。


在学习 CTR 模型的阶段,点击/取消点击的历史记录和标记的坏案例都作为训练数据添加到扩充缓冲区中。如图 6 所示,左侧的用户查询 DNN 将丰富的用户画像和查询作为输入,右侧的广告 DNN 将广告嵌入视为特征。两个子网都产生了一个 96 维的分布式表征,每个子网被分割成三个向量(32×3)。我们对用户查询 DNN 和广告 DNN 之间的三对向量进行 3 次内积运算,并采用 softmax 层进行 CTR 预测。


总的来说,我们提供了一种学习范式,在百度赞助的搜索引擎中离线训练我们的神经点击模型。为了提高其对尾部数十亿个查询广告对的 CTR 预测泛化能力,神经点击模型(学生)可以主动地向相关模型(教师)查询标签。这种迭代监督学习被称为主动学习。


3.2 快速广告检索

在百度赞助的搜索引擎中,我们使用图 6 所示的深层神经网络(即用户查询 DNN 和广告 DNN)分别获取查询和广告的嵌入。给定一个查询嵌入,Mobius 必须从数十亿个广告候选中检索出最相关和最高的 CPM 广告,如等式(2)所述。当然,尽管暴力搜索理论上可以发现我们要寻找的所有广告(即 100%广告召回率),但对每个查询进行穷尽计算是不现实的。在线服务往往具有有限的延迟约束,广告检索必须在短时间内完成。因此,我们利用近似最近邻(ANN)搜索技术来加快检索过程,如图 7 所示。



3.2.1 ANN 搜索

如图 6 所示,通过余弦相似度将用户向量和广告向量相结合,然后将余弦值通过 softmax 层生成最终的 CTR。这样,余弦值和 CTR 单调相关。学习模型后,就可以清楚地看出它们是正相关还是负相关。如果它是负相关的, 通过否定广告向量, 可以很容易地把它转换成正相关。这样,我们 就能 将 CTR 排序问题简化为余弦排序问题,这是一个典型的人工神经网络搜索设置。


近似最近邻(ANN)搜索的目标是,对于给定的查询对象,只需扫描语料库中的一小部分对象,就可以从大型语料库中检索出“最相似”的对象集。这是 一个从计算机科学发展早期开始就被积极研究的 基本问题。通常,用于 ANN 的流行算法基于空间划分的思想,包括基于树的方法、随机散列方法、基于量化的方法、随机划分树方法等等,我们发现随机树划分方法相当有效。在其他变体中,有一个已知的随机分区树方法的实现称为“烦恼”。


3.2.2 Maximum Inner Product Search ( MIPS )

在上述解决方案中,在用户向量和广告向量匹配后,考虑与业务相关的权重信息。实际上,这个权重在广告排名中至关重要。为了在排序过程中考虑权重信息,我们通过加权余弦问题将快速排序过程形式化,如下所示:



其中 w 是业务相关权重,x 是用户查询嵌入,y 是广告向量。注意,加权余弦引起了内积搜索问题,通常称为最大内积搜索(MIPS)。在这一行中,多个框架可以应用于快速的内部产品搜索。


3.2.3 向量压缩

为数十亿个广告存储一个高维浮点特征向量需要大量的磁盘空间,如果这些特征需要存储在内存中以便快速排序,则会带来更多问题。一般的解决方案是将浮点特征向量压缩成随机二进制(或整数)哈希码或量化码。压缩过程可以在一定程度上降低检索召回率,但也可能带来显著的存储效益。


对于当前的实现,我们采用了一种基于量化的方法(如 K-Means)对索引向量进行聚类,而不是对索引中的所有广告向量进行排序。当一个查询到来时,我们首先找到查询向量分配到的集群,然后从索引中获取属于同一个集群的广告。乘积量子化(PQ)的思想更进一步,将向量分割成若干子向量,并将每一个子向量分别聚类。在 CTR 模型中,如第 3.1 节所述,我们将查询嵌入和 ad 嵌入分成三个子向量 , 然后将每个向量分配给一个三元组的簇质心。例如,如果我们为每组子向量选择 103 个质心,则可以利用 109 个可能的簇质心,这对于 10 亿个尺度的多索引来说是足够的。在 Mobius-V1 中,我们使用了一种称为优化产品量化(Optimized Product quantification,OPQ)的变异算法。


实验

在整合到百度赞助搜索引擎之前,我们对 Mobius-V1 进行了 全面 的实验。具体来说,首先对 CTR 预估模型和新的广告索引方法进行离线评估。我们需要确保 CTR 模型和更新的广告检索方法能够发现更多的相关广告和更高的 CPM。然后我们尝试将其部署到网上,处理百度搜索中的一部分查询流。 在 Mobius-V1 通过了线下评估和在线 A/B 测试后,我们 将它部署在 多个平台上 以 监控 CPM、CTR 和 ACP 的统计数据(即平均点击价格)。


4.1 离线评估

我们加载了搜索日志来收集点击/未点击的历史记录,并构建了一个包含 800 亿个样本的训练集。我们还使用搜索日志构造了一个测试集,该测试集有 100 亿条关于广告点击/未点击的记录。


我们比较了主动学习的 CTR 模型与两种基线方法的有效性 : 一种方法是原始排名层采用的 2-class 的 CTR 模型,该模型只根据点击历史进行训练,不使用任何增广数据 ; 另一种方法是用随机增加的数据训练出一个 3-class 的 CTR 模型,而不需要由相关模型(教师)来判断。


如表 1 所示,我们的模型可以保持与原始排名模型 差不多 的 AUC,但是显著提高相关性模型的得分(从 0.312 到 0.575)。换句话说,在 Mobius-V1 中,低相关性但高 CPM 的查询广告对被成功地识别为坏情况。



此外,我们将每种方法预测 出来 CTR 最高的 10 万个查询广告对交给百度众包团队,由人工专家对查询广告相关性从 0 到 4(0:无关联,4:相当相关)进行人工评分。主观意见报告也证明了 Mobius-V1 中的 CTR 模型在发现相关的查询广告对方面表现良好。


此外,我们使用相同的集合分别从两个广告索引系统中检索广告,这些索引系统分别由随机分区树(ANN+Re-Rank)和 OPQ(Compressed Code+MIPS)提供。表 2 显示,OPQ 使广告覆盖率提高了 33.2%。



4.2 在线 AB 测试

从平均响应时间和内存使用率两个角度对 Mobius-V1 采用的两种不同的广告检索策略进行了在线 A/B 测试。 如 表 2 所示 ,与随机分区树方法相比,OPQ 可以提供更低的延迟,并将平均响应时间减少 48ms/查询。此外,我们还研究了具有更大商业价值但需要更多计算资源的 3%高 CPM 广告的平均响应时间。结果表明,OPQ 将查询延迟缩短了 75%(从 120ms 缩短到 30ms),并大大节省了内存消耗。


4.3 部署上线

在 Mobius-V1 成功通过了线下评测和在线 A/B 测试后,我们决定 将其部署到 百度内外的多个平台上。这些平台包括手机上的百度应用程序、个人电脑上的百度搜索,以及我们赞助的搜索引擎服务的许多其他附属网站/应用程序。我们对整个在线流量 连续做了 7 天监测,表 3 显示了 CPM、CTR 和 ACP 的统计数据。 其中, CPM 是评价一个赞助搜索引擎性能的主要指标。与之前的系统相比,Mobius-V1 使百度应用程序的 CPM 和百度搜索的 CPM 分别提高了 3.8%和 3.5%,这是我们赞助搜索引擎的主要门户网站。



相关工作

我们在 Mobius 上的工作涉及到查询广告匹配和点击率(CTR)预测的研究。


5.1 查询广告匹配

查询广告匹配是一项广泛研究的任务,旨在检索与给定查询相同且语义相似的广告(例如,查询“美国旅游签证”和图 2 中显示的关于“旅行社”的广告)。由于查询通常都是短文本,因此该问题主要通过查询扩展、查询重写和语义匹配等技术来解决。除了可以利用不同的 NLP 工具直接计算查询与文本广告之间的相似度外,还可以通过学习广告印象来捕捉查询与广告之间的语义关系。DSSM 是一个著名的学习匹配范式,它利用一个深层神经结构来捕捉查询意图,并在给定点击信息的情况下提高所学语义匹配的质量。


5.2 CTR 预估

CTR 预估是赞助搜索的另一个核心任务,因为它直接影响到一些商业指标,如 CPM。它的重点是预测广告被点击的概率,如果广告显示为对提交的查询的响应。传统的 CTR 预测方法倾向于使用贝叶斯或特征选择方法从历史点击数据中获得的广告展示的手工特征。


随着最近出现的深度学习,许多用于 CTR 预测的方法利用各种深度神经网络,通过从原始查询和文本广告中自动学习,主要缓解创建和维护手工制作的特征的问题。百度搜索广告(“凤巢”) 自 2013 年以来就 已经成功 应用超高维和超大规模深层神经网络来 训练 CTR 模型。


结论

本文通过回答以下四个问题,向大家介绍百度赞助搜索引擎下一代查询广告匹配系统 Mobius 项目:


动机 为什么我们要提出 Mobius 项目?

我们过去采用三层漏斗形结构,从数十亿个候选广告中筛选和分类数百个广告进行展示。然而,匹配目标和排名目标之间的分离/区分会导致较低的商业回报。为了解决这个问题,我们建立了 Mobius-V1,这是我们首次尝试让匹配层考虑到业务影响度量(如 CPM),而不是简单地预测数十亿个查询广告对的 CTR。


挑战 我们在构建 Mobius-V1 时遇到了哪些挑战?

第一个问题是神经网络点击模型训练的点击历史不足,而期望是对长尾查询和广告具有泛化能力,由于排名层采用的原始神经网络点击模型是通过高频广告和查询进行训练的,当一个高频广告或一个高频查询出现时,它倾向于在较高的 CTR 处估计一个查询广告对,即使它们根本没有相关性。另一个问题是由于 Mobius 必须处理的查询和广告候选数量的增加,检索效率低和内存消耗高。


解决方案 我们如何设计和实施 Mobius 来应对这些挑战?

为了克服点击历史的不足,我们设计了一个基于主动学习的“师生”框架来增加训练数据。具体 地说 ,离线数据生成器负责构造给定数十亿用户查询和广告候选的合成查询广告对。这些查询广告对不断地被输入到教师代理中,教师代理是从原始匹配层派生出来的,能够很好地度量查询广告对的语义相关性。教师代理可以帮助从生成的查询广告对中检测出不良案例(即 CTR 较高但相关性较低)作为增强数据。Mobius-V1 中的神经网络点击模型作为一个学生,通过附加的坏案例来提高泛化能力。为了节省计算资源和满足低响应延迟的要求,我们测试了各种近似最近邻(ANN)搜索的空间划分算法,我们发现对于我们的数据集,OPQ 能够更有效地索引和检索数十亿个广告。


反馈 Mobius-V1 在百度赞助的搜索引擎中表现如何?

我们已经在百度赞助搜索引擎中部署了 Mobius-V1。线上和线下的实验结果表明,这种新的匹配系统将 CPM 提高了 3.8%,广告覆盖率提高了 33.2%。


未来工作

自 2013 年以来,百度搜索广告(又称凤巢) 就 成功部署了超大型深度神经网络来训练 CTR 模型。为了超越 CTR 模型,Mobius 被确立为一个创新和前瞻性的项目 , 将优化用户体验和业务目标统一起来的想法也启发了 feed 等其他产品。


未来 还有 许多潜在的方向 可以探索 。例如,我们希望能够在匹配层引入更多的业务目标,如 ROI(投资回报率),作为额外的学习目标,以便发现更为友好的商业广告。此外,我们还为数十亿候选广告和查询提供更多优化目标,计算复杂度将显著增加。考虑到 对较低 响应延迟的要求和计算资源的限制,赞助搜索引擎的有效性和效率之间 需要进行 权衡。


Mobius 项目的关键步骤是通过近似近邻搜索(ANN)实现快速的广告检索任务。目前系统使用余弦相似性来近似 CTR,基于它们的单调相关性。如果最后一层比较复杂,按余弦(或加权余弦)排序会有问题。 团队正在研究 用复杂的方法进行搜索,它可以被未来的 Mobius 版本采用。另一个很有前途的方向是采用基于 GPU 的快速神经网络系统,该系统已被证明对一般人工神经网络任务非常有效。


论文原文链接:


http://research.baidu.com/Public/uploads/5d12eca098d40.pdf


2020 年 7 月 26 日 14:002526
用户头像
蔡芳芳 InfoQ高级编辑

发布了 560 篇内容, 共 265.9 次阅读, 收获喜欢 1723 次。

关注

评论 1 条评论

发布
用户头像
能整点对社会有用的东西不?
2020 年 07 月 27 日 10:28
回复
没有更多了
发现更多内容

前端工程化之创建项目

春生

前端 前端工程 前端架构 全栈工程师

【写作群星榜】5.22~5.28写作平台优秀作者&文章排名

InfoQ写作平台官方

写作平台 排行榜

金灿灿的季节 - Apache DolphinScheduler收获5位新Committer

海豚调度

Vol.8 云栖小镇游记

pyfn2030

阿里云 随笔 数字化转型

Vol.9 Web前端发展历程及前端工程化

pyfn2030

前端 前端工程

《中国互联网简史》系列笔记之P2P

dongh11

读书笔记

在培训机构花了好几万学Java,当了程序员还常被鄙视,这是招谁惹谁了?

四猿外

Java 学习 程序员 个人成长 转行程序员

ARTS|Week 1 第一次使用LeetCode

Puran

LeetCode ARTS活动

控制 Pod 内容器的启动顺序

张晓辉

Kubernetes

做好领路人——写给技术新人的导师建议

南方

管理 新人

Rust 遇上 C/C++(二):函数传参

Coding Fatty

c c++ rust 编程语言

认识数据产品经理(四 与互联网产品经理的区别)

马踏飞机747

大数据 互联网 产品经理 职业规划

如何通过样本数据推断其分布

张利东

Python

自定义列表样式

寇云

CSS css3

地铁上看书的老外引发的思考

小天同学

写作 读书 个人感想 日常思考

Java 学习笔记(三)数据类型

杜朋

解决版权难题,“豪横”字体自己做

zhoo299

设计 CG

时序数据库

pydata

只用CSS实现响应式Full-Width img 2种方法

寇云

CSS css3

纯CSS“返回顶部”特效

寇云

CSS css3

团队与领导力健康检查 | 体检表

Bob Jiang

团队建设

避免争执

孙苏勇

职场 随笔杂谈

MySQL死锁系列-常见加锁场景分析

程序员历小冰

MySQL

重学 Java 设计模式:实战原型模式

小傅哥

Java 设计模式 小傅哥 复杂代码优化 重构

不懂送女朋友什么牌子的口红?没关系!Python 数据分析告诉你。

JackTian

Python 程序员 数据分析 python 爬虫 口红

Eureka 实例注册状态保持 STARTING 的问题排查

张晓辉

spring Spring Cloud netflix

写给产品经理的信(5):谈谈项目管理(青铜-王者)

夜来妖

产品 极客时间,项目管理 项目管理 产品经理 项目

HTML中实现合并单元格

JDoe

html

机器学习项目是如何开发和部署的?

陆道峰

人工智能 学习

偏头疼告诉我的,我想告诉每一个人

zkback

最香远程开发解决方案!手把手教你配置VS Code远程开发工具,工作效率提升N倍

程序员柠檬

Linux 后台开发 vscode 后端

2021 ThoughtWorks 技术雷达峰会

2021 ThoughtWorks 技术雷达峰会

百度凤巢提出新一代广告召回系统MOBIUS,技术深度解读-InfoQ