手推广告论文(二)Wide Deep 推荐系统算法Wide Deep Learning for Recommender Systems

news2024/9/17 9:13:31

Wide & Deep Learning for Recommender Systems

论文地址https://arxiv.org/pdf/1606.07792.pdf

摘要

广义线性模型结合非线性特征转换,在处理具有大规模稀疏输入的回归和分类问题中已被广泛应用。通过一系列交叉积特征转换来记忆特征交互既有效又具有解释性,然而要实现更好的泛化性能,需要投入更多的特征工程工作。相较于此,深度神经网络能够通过为稀疏特征学习低维度密集嵌入,以较少的特征工程来更好地泛化至未见过的特征组合。但是,在用户与项目互动稀疏且高秩的情况下,具有嵌入的深度神经网络可能过度泛化,导致推荐的项目相关性较低。

为了解决这一问题,本文提出了一种名为Wide & Deep学习的方法,它联合训练宽线性模型和深度神经网络,将记忆与泛化的优势结合到推荐系统中。我们将该方法应用于Google Play商店,这是一个拥有超过10亿活跃用户和100万应用的商业移动应用平台,并对其进行了评估。在线实验结果表明,与仅使用宽模型或深模型相比,Wide & Deep方法显著提高了应用的下载量。同时,我们还在TensorFlow框架中开源了我们的实现方法。

CCS概念: • 计算方法 → 机器学习;神经网络;监督学习; • 信息系统 → 推荐系统;

关键词: Wide & Deep学习,推荐系统。

引言

推荐系统可以看作是一种搜索排名系统,它接收一组包含用户和上下文信息的输入查询,然后输出一个按照相关性排序的项目列表。在给定查询的情况下,推荐任务的目标是在数据库中找到相关的项目,并依据一定的目标(例如点击率或购买率)对这些项目进行排序。

与普通搜索排名问题类似,推荐系统面临的一个挑战是实现记忆和泛化的平衡。记忆可以简要地定义为学习项目或特征之间频繁共现的模式,并从历史数据中挖掘潜在的相关性。相对而言,泛化是基于相关性的传递性,旨在探索过去从未出现或很少出现的新特征组合。基于记忆的推荐通常更贴近用户兴趣,并与用户过去互动过的项目具有更直接的相关性。而与记忆相比,泛化更能够提高推荐项目的多样性,从而增加用户发现新内容的可能性。

本文主要关注Google Play商店的应用推荐问题,但所提出的方法同样适用于其他通用的推荐系统。

在实际应用中的大规模在线推荐和排名系统,广义线性模型(如逻辑回归)因其简单性、可扩展性和可解释性而被广泛采用。这些模型通常采用独热编码处理稀疏特征。以二进制特征“user_installed_app=netflix”为例,当用户安装了Netflix时,其值为1。有效地记忆特征可以通过在稀疏特征上进行交叉乘积转换来实现,例如AND(user_installed_app=netflix, impression_app=pandora)”,在用户安装了Netflix且后来安装了Pandora的情况下,其值为1。这表明特征对的共现与目标标签之间存在关联。通过使用较为宽泛的特征,例如AND(user_installed_category=video, impression_category=music),可以实现泛化,尽管可能需要进行手动特征工程。交叉乘积转换的局限在于,它们无法泛化到训练数据中未出现过的查询-项目特征对。

基于嵌入的模型,如因子分解机或深度神经网络,通过为每个查询和项目特征学习低维密集嵌入向量,减少了特征工程的负担,从而使模型能够泛化到之前未见过的查询-项目特征对。然而,在查询-项目矩阵稀疏且高秩的情况下(例如具有特定喜好的用户或只吸引少数人的小众项目),学习有效的低维表示可能会变得困难。在这种情况下,大部分查询-项目对之间实际上不存在交互,但密集嵌入可能导致所有查询-项目对都产生非零预测,从而导致过度泛化和不够相关的推荐结果。相比之下,采用交叉乘积特征转换的线性模型可以用更少的参数捕捉到这些“特殊规则”,从而更好地处理这种情况。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

在本文中,我们提出了一种名为“Wide & Deep”学习框架,它能够在同一个模型中实现特征的记忆和泛化。该框架通过将线性模型组件与神经网络组件共同训练来实现这一目标,如图1所示。

本文的主要贡献如下: • 提出了Wide & Deep学习框架,该框架可以同时训练具有嵌入的前馈神经网络和带有特征转换的线性模型,适用于处理稀疏输入的通用推荐系统。 • 在Google Play上实现并评估了Wide & Deep推荐系统。Google Play是一个拥有超过10亿活跃用户和超过100万应用的移动应用商店。 • 我们已将实现及其高级API开源到TensorFlow1。

虽然这个想法看似简单,但我们证明了Wide & Deep框架在满足训练和服务速度度要求的同时,能够显著提高移动应用商店中应用的获取率。这表明该框架在实际应用中具有较高的价值。

编辑

添加图片注释,不超过 140 字(可选)

推荐系统简介

应用推荐系统的概述展示在图2中。当用户访问应用商店时,系统会根据各种用户和上下文特征生成一个查询请求。推荐系统会返回一个应用列表(亦称为展示项),在这些应用上,用户可以进行点击或购买等操作。这些用户操作,连同查询和展示项,都将记录在日志中,作为训练学习模型所需的数据。

鉴于数据库中拥有超过一百万款应用,要在满足服务延迟要求(通常为10毫秒级别)的前提下为每个查询逐一评分是不切实际的。因此,收到查询请求后的第一步便是检索。检索系统会利用各种信号(通常是机器学习模型与人工定义规则的结合)返回与查询最匹配的一小部分项目。在缩小候选项目范围后,排名系统会根据项目的得分对所有项目进行排序。得分通常基于P(y|x),即在给定特征x的条件下,用户操作标签y的概率。这些特征包括用户特征(如国家、语言、人口统计信息)、上下文特征(如设备、一天中使用的小时数、星期几使用)以及展示特征(如应用发布时长、应用的历史统计数据)。本文重点介绍了使用Wide & Deep学习框架的排名模型。

WIDE & DEEP

3.1 WIDE

WIDE是一种广义线性模型,其形式为 y = w^T x + b,如图1(左)所示。在这个模型中,y 代表预测值,x = [x1, x2, ..., xd] 是一个由 d 个特征组成的向量,w = [w1, w2, ..., wd] 是模型参数,b 是偏差项。特征集既包括原始输入特征,也包括经过变换的特征。其中一个最重要的变换就是交叉乘积变换,定义如下:

φk(x) = ∏ (i=1 to d) xi^cki, 其中 cki ∈ {0, 1}

在这个公式中,cki 是一个布尔变量。当第 i 个特征是第 k 个变换φk的一部分时,它的值为1;否则为0。对于二进制特征,交叉乘积变换(例如,“AND(gender=female, language=en)”)的值为1,当且仅当组成特征(如“gender=female”和“language=en”)都为1;否则为0。这样的交叉乘积变换捕捉了二进制特征之间的交互作用,并为广义线性模型引入了非线性。

通过引入交叉乘积变换,宽组件能够捕捉特征之间的复杂关系。这使得它在处理稀疏数据时具有较强的拟合能力,从而提高了推荐系统的表现。

3.2 DEEP

DEEP是一个前馈神经网络,如图1(右)所示。对于分类特征,原始输入是特征字符串(例如,“language=en”)。每一个这类稀疏的、高维的分类特征首先会被转换为低维且密集的实值向量,这通常被称为嵌入向量。嵌入向量的维度通常在 O(10) 到 O(100) 的数量级。嵌入向量最初是随机初始化的,然后在模型训练过程中调整其值以最小化最终损失函数。接下来,这些低维密集嵌入向量被输入到神经网络的隐藏层中。

具体而言,每个隐藏层执行以下计算:

A^(l+1) = f(W^(l) a^(l) + b^(l))

这里,l 表示层数,f 是激活函数,通常是(ReLU)。a^(l)、b^(l) 和 W^(l) 分别是第 l 层的激活值、偏差和模型权重。

通过这种方式,深度组件能够捕捉特征之间复杂的非线性关系。与宽度组件相结合,宽度和深度学习框架可以同时利用特征之间的线性关系(通过宽度组件)和非线性关系(通过深度组件)来提高模型的预测准确性。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

在本文中,我们提出了一种宽度和深度学习框架,通过联合训练线性模型组件和神经网络组件,实现了在一个模型中同时具备记忆和泛化能力。与集成方法不同,联合训练在训练阶段同时考虑了宽度和深度部分以及它们之和的权重,从而优化了所有参数。在宽度和深度学习框架中,线性模型的宽度部分只需通过少量交叉乘积特征转换来弥补深度部分的不足,而不需要一个完整规模的宽度模型。

模型预测公式为:P(Y = 1|x) = σ(w_wide^T [x, φ(x)] + w_deep^T a^(lf) + b),其中Y是二元类标签,σ(·)是sigmoid函数,φ(x)表示原始特征x的交叉乘积变换,b是偏置项。w_wide是所有宽度模型权重的向量,w_deep是应用于最终激活a^(lf)的权重。

该框架将线性模型的宽度部分与神经网络的深度部分同时训练,使用小批量随机优化方法将梯度从输出反向传播到模型的宽度和深度部分。在实验中,我们使用带有L1正则化的FTRL算法作为宽度部分的优化器,使用AdaGrad作为深度部分的优化器。

简而言之,我们提出了一种宽度和深度学习框架,旨在实现一个模型中的记忆和泛化能力,通过联合训练线性模型组件和神经网络组件。这种方法在训练阶段同时考虑了模型各个部分,从而优化了所有参数。

应用推荐系统的实现包括三个阶段:数据生成、模型训练和模型服务,如图3所示。

4.1 数据生成在这个阶段,利用一段时间内的用户和应用展示数据来生成训练数据。每个样本对应一个应用展示。标签表示应用安装:如果展示的应用被安装,则为1,否则为0。

此阶段还会生成词汇表,这是一个将分类特征字符串映射到整数ID的表。系统会计算出现次数超过最小阈值的所有字符串特征的ID空间。对于连续的实数特征,通过将特征值x映射到其累积分布函数P(X≤x)并将其划分为nq个分位数来将其归一化到[0,1]范围内。对于处于第i个分位数的值,归一化值为(i-1/nq - 1)。在数据生成过程中计算分位数边界。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

4.2 模型训练我们在实验中使用的模型结构如图4所示。训练过程中,输入层接收训练数据和词汇表,并一起生成稀疏和密集特征以及一个标签。宽模型部分包含了用户已安装应用与展示应用之间的交叉积变换。对于模型的深度部分,我们为每个分类特征学习一个32维的嵌入向量。我们将所有嵌入与密集特征连接在一起,形成一个大约1200维的密集向量。接着,将连接后的向量输入到3个ReLU层中,最后是逻辑输出单元。

Wide & Deep模型在超过5000亿个样本上进行了训练。每次收到新的训练数据时,都需要重新训练模型。然而,每次从头开始训练都会增加计算成本,延迟从数据到达到提供更新模型的时间。为了应对这个挑战,我们实现了一个热启动系统,该系统使用前一个模型的嵌入和线性模型权重初始化新模型。在将模型加载到模型服务器之前,进行一次干运行,以确保它不会在处理实时流量时出现问题。我们通过经验性地验证模型质量,将其与之前的模型进行对比,作为一个有效性检查。

“干运行”一般指在实际生产环境中,对某个系统或设备进行测试和验证,以确保其在正式使用前可以正常工作。这种测试可能涉及一系列的操作和流程,旨在模拟实际使用情况,以便在出现任何问题之前,能够及早发现和解决潜在的错误或缺陷。这种测试通常是在实际生产环境中进行,因为只有在实际使用情况下才能真正测试系统或设备的性能、可靠性和稳定性。

4.3 模型部署与服务当模型经过训练和验证后,我们将其加载到模型服务器中。对于每一个请求,服务器从应用检索系统中获取一组应用候选项,并利用用户特征对每个应用进行评分。接下来,根据评分将应用从高到低排序,按照这个顺序向用户展示。评分是通过在宽度和深度模型上执行一次前向推理计算得到的。

为了保证每个请求的响应时间在10毫秒以内,我们采用了多线程并行优化技术。通过并行执行较小批次,而非在单次大批量推理中为所有候选应用评分,从而提高了系统性能。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

实验结果为了评估 Wide & Deep 学习在实际推荐系统中的有效性,我们进行了在线实验,并从两个方面对系统进行了评估:应用获取和服务性能。

5.1 应用获取我们在 A/B 测试框架下进行了为期三周的在线实验。对于对照组,我们随机选择了1%的用户,向他们展示了由之前的排名模型生成的推荐。这个模型是一个高度优化的、仅基于宽度的逻辑回归模型,包含丰富的交叉特征转换。而对于实验组,我们向1%的用户展示了由 Wide & Deep 模型生成的推荐,该模型使用相同的特征集进行训练。如表1所示,与对照组相比,Wide & Deep 模型使应用商店首页的应用获取率相对提高了3.9%(具有统计显著性)。同时,我们还将结果与另一个仅使用相同特征和神经网络结构的深度模型的1%的用户组进行了比较,发现 Wide & Deep 模型相较于仅深度模型有1%的额外增益(具有统计显著性)。

除了在线实验,我们还在离线保留集上展示了接收者操作特征曲线下的面积(AUC)。尽管 Wide & Deep 在离线 AUC 方面略有提高,但其对在线流量的影响更为显著。这可能是因为离线数据集中的展示次数和标签是固定的,而在线系统可以通过将泛化与记忆相结合,生成新的探索性推荐,并从新的用户反馈中学习。

5.2 服务性能面对商业移动应用商店的高流量,实现高吞吐量和低延迟服务具有挑战性。在流量高峰期,我们的推荐服务器每秒需要为超过1000万个应用评分。使用单线程,在单个批次中为所有候选应用评分需要31毫秒。为了解决这个问题,我们采用了多线程并将每个批次拆分成较小的部分,显著降低了客户端延迟至14毫秒(包括服务开销),如表2所示。

相关研究将宽线性模型与交叉特征转换和深度神经网络与密集嵌入相结合的概念,受到了诸如因子分解机[5]等先前研究的启发。因子分解机通过将两个变量间的交互作用表现为两个低维嵌入向量间的点积,从而为线性模型增加泛化能力。在本文中,我们通过神经网络学习嵌入之间的高度非线性交互作用(而非点积),从而提高了模型的表达能力。

在语言模型方面,已提出联合训练递归神经网络(RNN)和具有n-gram特征的最大熵模型。通过学习输入和输出之间的直接权重,显著降低了RNN的复杂性[4]。在计算机视觉领域,通过使用快捷连接跳过一层或多层,深度残差学习[2]降低了训练更深模型的难度,并提高了准确性。神经网络与图模型的联合训练也被应用于从图像中估计人体姿态[6]。在本研究中,我们探索了前馈神经网络与线性模型的联合训练,以及稀疏特征与输出单元之间的直接连接,解决具有稀疏输入数据的通用推荐和排名问题。

在推荐系统文献中,已经探索了协同深度学习,它将深度学习用于内容信息处理,而协同过滤(CF)用于评分矩阵[7]。此外,还有一些关于移动应用推荐系统的研究,例如 AppJoy,它在用户的应用使用记录上使用 CF[8]。与之前基于 CF 或内容的方法不同,我们在应用推荐系统的用户和展示数据上联合训练 Wide & Deep 模型。

结论

对于推荐系统而言,记忆和泛化同等重要。宽线性模型通过交叉特征转换可以有效地记忆稀疏特征之间的交互,而深度神经网络则能通过低维嵌入实现对以往未见过的特征交互的泛化。我们提出了将这两种模型优势结合起来的 Wide & Deep 学习框架。我们将此框架应用于 Google Play 的推荐系统,并对这一大规模商业应用商店进行了实际评估。在线实验结果表明,与仅使用宽线性模型或深度神经网络的模型相比,Wide & Deep 模型在提高应用获取方面具有显著优势。

参考文献

  1. J. Duchi, E. Hazan, 和 Y. Singer. 用于在线学习和随机优化的自适应梯度下降方法。机器学习研究杂志,12:2121–2159,2011年7月。

  2. K. He, X. Zhang, S. Ren, 和 J. Sun. 深度残差学习用于图像识别。IEEE 计算机视觉和模式识别会议论文集,2016。

  3. H. B. McMahan. 跟随正则化领导者和镜像下降:等价定理和 L1 正则化。在 AISTATS 论文集,2011。

  4. T. Mikolov, A. Deoras, D. Povey, L. Burget, 和 J. H. Cernocky. 大规模神经网络语言模型的训练策略。在 IEEE 自动语音识别与理解研讨会,2011。

  5. S. Rendle. 带有 libFM 的因子分解机。ACM 智能系统技术交易,3(3):57:1–57:22,2012年5月。

  6. J. J. Tompson, A. Jain, Y. LeCun, 和 C. Bregler. 卷积网络和图形模型的联合训练用于人体姿态估计。在 Z. Ghahramani, M. Welling, C. Cortes, N. D. Lawrence 和 K. Q. Weinberger 编辑,NIPS,页面 1799–1807。2014。

  7. H. Wang, N. Wang, 和 D.-Y. Yeung. 用于推荐系统的协同深度学习。在 KDD 论文集,页面 1235–1244,2015。

     8. B. Yan 和 G. Chen. AppJoy:个性化的移动应用发现。在 MobiSys,页面 113–126,2011。

REFERENCES

[1] J. Duchi, E. Hazan, and Y. Singer. Adaptive

subgradient methods for online learning and stochastic

optimization. Journal of Machine Learning Research,

12:2121–2159, July 2011.

[2] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual

learning for image recognition. Proc. IEEE Conference

on Computer Vision and Pattern Recognition, 2016.

[3] H. B. McMahan. Follow-the-regularized-leader and

mirror descent: Equivalence theorems and l1

regularization. In Proc. AISTATS, 2011.

[4] T. Mikolov, A. Deoras, D. Povey, L. Burget, and J. H.

Cernocky. Strategies for training large scale neural

network language models. In IEEE Automatic Speech

Recognition & Understanding Workshop, 2011.

[5] S. Rendle. Factorization machines with libFM. ACM

Trans. Intell. Syst. Technol., 3(3):57:1–57:22, May 2012.

[6] J. J. Tompson, A. Jain, Y. LeCun, and C. Bregler. Joint

training of a convolutional network and a graphical

model for human pose estimation. In Z. Ghahramani,

M. Welling, C. Cortes, N. D. Lawrence, and K. Q.

Weinberger, editors, NIPS, pages 1799–1807. 2014.

[7] H. Wang, N. Wang, and D.-Y. Yeung. Collaborative

deep learning for recommender systems. In Proc. KDD,

pages 1235–1244, 2015.

[8] B. Yan and G. Chen. AppJoy: Personalized mobile

application discovery. In MobiSys, pages 113–126, 2011.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/433030.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【分布式事务 本地部署Seata服务】分布式事务框架Seata本地部署详细讲解

前言 这篇文章我会从0到1详细搭建分布式事务框架seata的使用,那么我们首先要先了解一下什么是分布式事务? 本篇文章是本地启动seata服务并且注册到nacos中,在SpringCloud中整合seata框架请转移下方连接 点我跳转SpringCloud整合seata教程&…

VMware ESXi 8.0U1 Unlocker OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版)

发布 ESXi 8.0U1 集成驱动版,在个人电脑上运行企业级工作负载 请访问原文链接:https://sysin.org/blog/vmware-esxi-8-u1-sysin/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023-04-18, VMware vSp…

【真北直播笔记】董越:简明DevOps学习地图

缘起 真北敏捷社区的宗旨是:求知、连接。求知就是学习,家里没矿的话,学习是一个人最重要的动力之源。连接就是把人拉在一起,我们相信人与人的互动会带来美好的变化。今天的直播是把大家拉在一起学习,就是求知、连接。 …

【万人推荐】黑客成长技术清单

最近两天,在reddit安全板块和Twitter上有个GitHub项目很火,叫“Awesome Hacking”。 “Awesome Hacking”在reddit上有超过四百个赞,但管理员后来认为不适合该板块(Awesome类项目没有新的内容),给了“rejec…

十大排序算法之插入排序、希尔排序、选择排序

个人主页:平行线也会相交 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 平行线也会相交 原创 收录于专栏【数据结构初阶(C实现)】 本篇主要讲解八大排序算法中的三种排序,分别是:插入排序、希尔排…

家用洗地机有什么优缺点?实用的洗地机分享

随着科技的不断发展,家庭清洁设备也在不断更新换代。现在市场上最常见的家用清洁设备包括洗地机、扫地机器人和吸尘器。这些设备各有优缺点,但在清洁效果、清洁范围和清洁方式等方面存在差异。洗地机是一种专业的清洁设备,它能够深度清洁地面…

SpringCloud之Gateway组件简介

网关的理解 网关类似于海关或者大门,出入都需要经过这个网关。别人不经过这个网关,永远也看不到里面的东西。可以在网关进行条件过滤,比如大门只有对应的钥匙才能入内。网关和大门一样,永远暴露在最外面 不使用网关 前端需要记住每…

Javascript进阶专题总结(函数、异步编程、设计模式)

函数式编程什么时候用 编程方法:函数式(js),面向对象(java,c),命令式 函数式(工具式操作) 优点:JavaScript种函数是一等公民,便于拆分组合可扩展性好,方便tree-shaking 缺点&…

【Linux系统】系统安全及应用二

开关安全控制一、开个安全控制1.1调整BIOS引导设置1.2GRUB限制1.3终端安全控制二、系统弱口令检查2.1安装JR工具三、网络端口扫描3.1NMAP端口扫描3.2NETSTAT,SS查看端口信息一、开个安全控制 1.1调整BIOS引导设置 将第一引导设备设为当前系统所在硬盘禁止从其他设…

1-时间复杂度分析

时间复杂度 ①what: 指执行当前算法所消耗的时间 ②简介结论: 时间复杂度由多项式T(n)中最高阶的项来决定,系数的影响忽略即可 例子: 操作数量T(n) 时间复杂度O(f(n)) 常数,比如 100000(即&#xff1…

ChatGPT将批量文档翻译成中文的方法

文档翻译成中文软件是指在处理文档时,自动将文档中的内容翻译成中文的软件。这些软件通常采用自然语言处理技术,通过对待翻译文本的分词、词义分析、语法分析等多种技术处理,实现对文本中的单词、短语、句子等级别的翻译。 文档翻译成中文软件…

CSDN,有幸遇见 ——我的三周年创作纪念日

一生二,二生三,三生万物 三年,与 CSDN 的相遇相识相知—— 前两年都没写,一是没纪念的概念,二是纪念日这天每年总是清明节。 还有就是不知道有勋章(( Meet 遇见 那年,我六年级&a…

JVM 垃圾回收详解之垃圾收集算法+垃圾收集器

标记-清除算法 该算法分为“标记”和“清除”阶段:首先标记出所有不需要回收的对象,在标记完成后统一回收掉所有没有被标记的对象。 它是最基础的收集算法,后续的算法都是对其不足进行改进得到。 这种垃圾收集算法会带来两个明显的问题&…

Node.js—path模块

目录 1、什么是path模块2、path.resolve 拼接规范的绝对路径 常用3、path.sep 获取操作系统的路径分隔符4、 path.parse 解析路径并返回对象5、path.basename 获取路径的基础名称6、path.dirname 获取路径的目录名7、path.extname 获得路径的扩展名8、 path.join()路径拼接 1、…

Linux高性能服务器编程|阅读笔记:第2章 - IP协议详解

简介 Hello! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~ ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专业,获得过国家奖学金,有幸在竞赛中拿过一些国奖、省奖…已保研 学习经验:扎实基础 + 多做笔…

超越ChatGPT:AgentGPT正在将自主AI带到浏览器中

你好,欢迎来到人工智能领域的新时代!今天我们介绍AgentGPT,这是一款最前沿的基于浏览器的平台,旨在革新人工智能的自主性。这项开创性的技术让你能够在舒适的网络浏览器中创建、配置和部署定制化的人工智能代理,以实现…

又涨了?2023全国程序员薪资最新统计(文末附招聘岗位)

大家好,金三银四招聘季还在进行中。刚好最近看到一份 2022 国内程序员薪酬报告,感觉挺有意思的,跟大家分享一下。 在科技迅速发展的时代,各行业对程序员的需求持续增长,程序员作科技市场的“重要基石”,薪…

nodejs+vue 高校校园食堂餐品在线订购网

食堂作为学校的一个重要的部门,为学生提供了用餐的地点,学生可以在食堂享用丰富的餐品,建立一个在校订餐网站,帮助了学生提供一个用餐订餐的系统,也帮助了食堂提供了一个餐品展示的站点。 园的食堂作为一个窗口单位&a…

【nacos配置中心】源码部分解析

启动初始化 SpringApplication.prepareContext applyInitializers 回调ApplicationContextInitializer的initialize方法 getInitializers()从applicationContext获取List<ApplicationContextInitializer<?>> initializers 这个集合是通过SpringApplication的…

Node.js -- Express中间件

1.中间件的概念 1.1 什么是中间件 中间件&#xff08;Middleware&#xff09;,特指业务流程的中间处理环节。 1.2 现实中的例子 1.3 Express中间件的调用流程 当一个请求到达Express服务器中&#xff0c;可以连续调用多个中间件&#xff0c;从而对这次请求进行预处理。 1…