当前位置: 首页 > news >正文

Youtube DNN:Deep Neural Networks for YouTube Recommendations

1.介绍

本文主要解决的三个挑战:

  • 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。
  • 不断更新的新物料。
  • 稀疏的用户行为,包含大量的噪声。

2.推荐系统

文章包含推荐系统的两阶段模型:召回和排序。
召回网络根据用户的历史行为从视频库中检索几百个候选视频,这些视频被认为有很高的准确率与用户相关。候选集的生成是根据粗粒度的个性化—协同过滤生成的。用户之间的相似性是以粗粒度特征表示的,例如视频观看ID,搜索query和统计特征。
在这里插入图片描述

3.召回

在候选生成期间,庞大的YouTube语料库被缩小到可能与用户相关的数百个视频。前身是一种矩阵分解的召回方法。我们早期的神经网络模型通过学习用户历史观看的嵌入,模仿了这种因子分解行为。从这个角度来看,我们的方法可以看作是因子分解技术的非线性推广。

3.1 推荐到分类

我们将推荐视为极端多类分类问题,其中预测问题变为准确地将特定视频分类问题。
基于用户 U 和上下文 C 在时间 t t t,指定视频 w t w_t wt为视频 i i i的概率:
P ( w t = i ∣ U , C ) = e v i u ∑ j ∈ V e v j u P(w_t=i|U,C)=\frac{e^{v_iu}}{\sum_{j\in V}e^{v_ju}} P(wt=iU,C)=jVevjueviu

V V V指语料库,其中 u ∈ R N u∈R^N uRN 表示用户向量,上下文对以及候选视频 v j ∈ R N v_j∈R^N vjRN 的高维向量。
深度神经网络的任务是学习用户嵌入:通过一个将用户历史和上下文映射为用户嵌入的函数和 softmax 分类器。
虽然YouTube上存在显式反馈机制(点赞/取消赞,产品调查),但我们使用观看的隐含反馈来训练模型,其中用户完成视频是一个正样本。这个选择是基于可用的用户历史的数量级更多,这能够产生位于长尾的视频推荐,而显式反馈对长尾视频的数据是极其稀疏的。
为了有效地训练这样一个数百万个类别的模型,我们依赖于一种从背景分布随机负采样的方法,并通过重要性加权对其进行校正。对于每个示例,最小化真实标签和负采样交叉熵损失。
实际上,每次取几千个负例,速度是传统softmax速度的100倍以上。流行的替代方法是层次Softmax,但我们未能实现可比的准确性。在层次Softmax中,遍历树中的每个节点涉及到区分通常无关的分类,从而使分类问题变得更加困难,降低了性能。

在服务时,我们需要计算最可能的N个类(视频),以便选择顶部N个显示给用户。在严格的几十毫秒的服务延迟条件下为数百万项评分,需要近似评分方案,其类的数量呈线性。YouTube先前的系统依赖于哈希,这里的分类器也使用类似的方法。由于不需要在服务时间内使用softmax输出似然,因此评分问题减少到了在点积空间中的最近邻搜索,其中可以使用通用目的库。我们发现在A / B测试结果对最近邻居搜索算法的选择不太敏感。

3.2 模型结构

受连续词袋语言模型的启发,我们为固定词汇中的每个视频学习高维度嵌入,并将这些嵌入馈送到前馈神经网络中。用户的观看历史通过稀疏视频ID的可变长度序列表示,并通过嵌入映射到稠密矢量表示。网络要求固定的密集型输入,只需简单地平均嵌入就表现得最好,这是几种策略(求和、逐元素最大值等)中的一种。重要的是,嵌入是通过正常的梯度下降反向传播更新与其他所有模型参数一起联合学习的。特征连接到宽的第一层,后面跟着几个完全连接的Rectified Linear Unit (ReLU)层。结构如下:
在这里插入图片描述

3.3 特征

使用深度神经网络作为矩阵分解的一般化实现方式的一个关键优势是:可以添加任意连续和分类特征到模型中。搜索历史与观看历史类似,每个query都分为单个单词和双字,并且每个标记都被嵌入。通过求平均值,用户的标记化、嵌入的查询就代表了摘要的密集搜索历史。人口统计数据很重要,因为它为新的用户提供先验,使推荐行为合理。用户的地理位置和设备被嵌入并连接起来。简单的二进制和连续特征,如用户的性别、登录状态和年龄,直接作为实值输入到网络中,并归一化到[0, 1]。

特殊特征:样本年龄 Example Age

每秒上传到YouTube的视频很多。对于YouTube作为产品来说,推荐这种最近上传的新鲜内容是非常重要的。我们一致认为,用户喜欢新鲜内容,但并不牺牲相关性为代价。除了仅仅推荐用户想要观看的新视频的第一个效应外,还有一个至关重要的次要现象,即启动和传播病毒内容。
机器学习系统经常对过去表现出内在偏差,因为他们是根据历史序列来预测未来。视频流行度的分布是非稳定的,但是推荐者产生的语料库的多项式分布会反映几周内训练窗口内的平均观看可能性。为了纠正这一点,我们在训练期间将训练例子的年龄作为特征输入。在服务时间,这个特性设置为零(或者稍微负),以反映模型正在训练窗口的尽头进行预测。
图4展示了这种方法在一个随意选择的视频上的有效性。
这里并没有说明“样本年龄”这个特征怎么计算的。
在这里插入图片描述

3.4 label和上下文选择

要强调的是,推荐往往涉及解决一个代理问题并将结果转移到特定上下文中。一个经典的例子假设:预测分数越准确,电影推荐更有效。我们发现,这个代理学习问题的选择对A / B测试中的性能有很大影响,但在离线实验中很难衡量。
训练样例是根据所有的YouTube观看生成的(嵌入其他网站的观看)而不是我们生成的推荐结果。否则,新内容很难出现,并且有些推荐人(更活跃)的数据倾向于过度利用。如果用户通过我们推荐以外的方式发现视频,我们希望通过协同过滤将这一发现快速传播给其他人。
另外一个提高线上指标的关键trick是为每个用户生成固定数量的训练样本,有效地在损失函数中平等对待我们的用户。这防止了一小批高度活跃的用户主导损失。
有点违反直觉的是,必须小心地保留信息,以防止模型利用网站的结构过度拟合代理问题。例如,考虑用户刚刚搜索了"tay-lor-swift",预测用户下一个观看的视频,给定该信息的分类器将预测最有可能观看的视频是,出现在相应的搜索结果页面上的“泰勒·斯威夫特”。无限制地再现用户的上次搜索页面作为主页推荐的表现非常糟糕。
通过丢弃序列信息,并使用无序的搜索query来表示搜索,分类器不再直接知道之前的label。

视频的自然消费模式通常会导致非常不对称的共同观看概率。观看序列包括
通常按顺序观看,用户发现艺术家,开始于最受欢迎的流派,然后专注于较为小众的。两种采样的性能对比:预测用户的下一次观看 VS 预测一个随机抽取的观看。如下图:
在这里插入图片描述
许多协同过滤系统隐式地随机选择item,然后通过用户历史的其他item预测它。这会泄露未来的信息,并且忽略了非对称的消费模式。作为对比,我们回滚用户的消费历史,随机选择item,但只输入用户之前的序列。

3.5 特征和模型深度实验

增加特征和深度显著提高了预测的精度,如图6所示。在这些实验中,使用了100万个视频和100万个搜索令牌的词汇表,每个dnn超参为256,在最大袋大小为50个最近观看和50个最近搜索的情况下。softmax层输出的是一个100万个视频类别的多元分布,其维度为256(可以认为是一个单独的输出视频嵌入)。这些模型一直训练到YouTube的所有用户收敛,对应于对数据进行的几个时期。网络结构遵循一个常见的“塔”模式,其中网络的底部最宽,每一层隐藏层都将单元数量减半(类似于图3)。深度为零的网络实际上是一种线性分解方案,其表现类似于之前的系统。添加宽度(features)和深度(dnn层数)直到边际收益递减以及难以收敛。
在这里插入图片描述

4.排序

排序的主要作用是利用印象数据来专门化并校准针对特定用户界面的候选预测。例如,用户可能通常以高概率观看某个视频,但由于缩略图图片的选择,不太可能点击特定的主页印象。在排序过程中,我们可以访问更多描述视频和用户与视频关系的特性,因为只有几百个视频正在评分,而不是在候选生成中得分的数百万个视频。排序对于将分数不能直接比较的不同候选源进行集成也至关重要。我们使用与候选生成类似的架构的深度神经网络,使用逻辑回归(图7)为每个视频印象分配一个独立的分数。然后按此分数对视频列表进行排序,并将其返回给用户。我们的最终排序目标是根据实时A/B测试结果不断调整的,但通常是每个印象预期观看时间的一个简单函数。通过点击率进行排序往往会推广欺骗性的视频,用户没有完成(“点击诱饵”),而观看时间更好地捕捉到了参与度。

4.1 特征表示

我们的特征按照传统的分类学和连续/顺序特征的分类方式进行了分离。我们使用的类别特征在基数上差异很大——有些是二进制的(例如用户是否登录),而另一些则有数百万种可能的值(例如用户的最后一条搜索查询)。特征进一步根据它们仅贡献单个值还是多个值进行分割。单类别特征的一个例子是被评分的印象的视频ID,而相应的多类别特征可能是用户最近观看的N个视频ID的集合。我们还根据特征是描述item的属性还是描述用户/上下文的属性来分类特征。Query特征每请求计算一次,而印象特征为每个被打分的项目计算。

特征工程

我们通常在我们的排序模型中使用数百个特征,均匀地分为类别和连续特征。尽管深度学习承诺通过手工减轻工程特征的负担,但是我们原始数据的本质并不容易直接输入前馈神经网络。我们仍然投入了大量的工程资源,将用户和视频数据转换为有用的特征。主要挑战在于表示用户操作的时间序列以及这些操作如何与正在排序的视频印象相关。
我们发现最重要的信号是那些描述用户之前与项目本身的交互以及其他相似项目的信号,这与其他人在广告排序方面的经验相吻合。例如,考虑用户过去与上传被打分视频的频道的历史-用户观看了这个频道多少视频?用户上次观看该主题的视频是什么时候?这些描述过去用户在相关项目上的连续动作的特征特别强大,因为它们很好地适用于不同的项目。我们还发现,以特征形式表示召回来源向排序传递信息至关重要,例如哪些来源召回了这个视频?分数是多少?
描述过去视频曝光频率的特征对于引入推荐中的“滚动”(连续请求不会返回相同的列表)也至关重要。如果用户最近被推荐了一个视频,但他们没有观看,那么模型自然会在下一页加载时降低这个印象的得分。提供最新的曝光和观看历史是一项工程壮举,超出了本文的范围,但对于产生响应式推荐至关重要。

类别特征embedding

与候选生成类似,我们使用嵌入将稀疏分类特征映射到适合神经网络的密集表示。每个唯一的ID空间(“词汇表”)都有一个单独的学习嵌入,其维数大致随唯一值的数量的对数增加。这些词汇表是在训练前遍历数据一次构建而成的简单的查找表。非常大的基数ID空间(例如视频ID或搜索查询词)只包括根据点击印象中频率最高的前N个。不在词汇表中的值只是映射到零嵌入
重要的是,同一个ID空间中的分类特征共享底层嵌入。例如,存在一个全局的视频ID嵌入,许多不同的特征都在使用(视频印象的视频ID,用户最后观看的视频ID,建议的种子视频ID等)。虽然共享嵌入,每个特征都单独输入网络,以便上层可以为每个特征学习专门化的表示。共享嵌入对于提高泛化能力、加速训练和减少内存需求非常重要。绝大多数模型参数都是在这些高基数的嵌入空间中——例如,一个百万ID嵌入32维空间中的参数比全连接层2048单位宽的参数多7倍(321000000 / (20482048)=7.63)。

标准化连续特征

神经网络对输入的比例和分布极为敏感,而决策树等替代方法则不受单个特征比例的影响。在收敛过程中适当归一化连续特征是至关重要的。具有分布f的连续特征 x x x被转化为 x ~ \tilde{x} x~,通过缩放值,使得该特征在[0,1)范围内均匀分布, x ~ = ∫ − ∞ x d f \tilde{x} =\int_{-\infty}^x df x~=xdf。这个积分在训练开始前通过一次遍历数据计算特征值的四分位数来进行线性插值。
除了原始归一化的特征 x ~ \tilde{x} x~外,我们还输入 x ~ 2 \tilde{x}^2 x~2 x ~ \sqrt{\tilde{x}} x~ ,使网络能够轻松形成超线性和次线性函数,从而增强表达能力。输入连续特征的幂被发现可以提高离线精度。

4.2 建模预测观看时长

我们的目标是根据训练示例预测期望观看时间,这些示例点击与未点击。正样本用用户观看视频的时间进行标注。为了预测期望观看时间,采用了加权逻辑回归技术。
模型使用逻辑回归进行训练,并且损失函数为交叉熵(图7)。然而,正(点击)样本由观察到的观看时间进行加权。负(未点击)样本采用单位权重。这样,逻辑回归学习到的概率是 T i N − k \frac{T_i}{N-k} NkTi
其中 N N N是训练样本的数量, k k k是正样本的数量, T i T_i Ti是第 i i i个印象的观看时间。假设正样本的比例很小(在我们的情况下这是真的),那么学到的概率近似为 E [ T ] ( 1 + P ) E[T](1+P) E[T](1+P),其中 P P P是点击概率, E [ T ] E[T] E[T]是印象的期望观看时间。由于 P P P很小,这个乘积接近 E [ T ] E[T] E[T]。在推理时,我们使用指数函数 e x e^x ex作为最终激活函数来生成紧密估计期望观看时间。

4.3 隐藏层实验

表1显示了隐藏层实验中在第二天数据上使用不同隐藏层配置获得的结果。对于每个配置(“加权,单用户损失”)得到的值是由考虑单个页面上展示给用户的正(点击)和负(未点击)印象。
首先用我们的模型对这两个印象预测分值。如果负曝光获得的分数高于正曝光,则我们认为正曝光的观看时间被错误预测。单用户的损失就是这样一个比例:抽出对中的总的错误预测观看时间/总观看时间。
结论
结果显示,增加隐藏层的宽度可以改善结果,增加其深度也是如此。然而,权衡是推理所需的服务器CPU时间。1024宽ReLU后跟512宽ReLU后跟256宽ReLU的配置为我们提供了最好的结果,同时使我们能够保持在服务CPU预算内。
对于1024→512→256模型,我们尝试只输入不带幂的规范化连续特征,这会增加0.2%的损失。
在相同隐藏层配置下,我们也训练了一个正负样本权重相同的模型。观看时间加权损失增加了4.1%。
在这里插入图片描述

5. 总结

我们已经描述了用于推荐YouTube视频的深度神经网络架构,分为两个不同的问题:召回和排序。我们的深度协同过滤模型能够有效地吸收多种信号,并通过捕获非对称的协同观看行为和防止未来信息泄漏,在现场指标上表现良好,超越了YouTube以前使用的矩阵分解方法。从分类器中保留区分性信号也是取得良好结果的关键,否则模型会过度拟合代理问题,并且无法很好地转移到首页。
我们证明了将训练样本的年龄作为输入特征可以消除对过去的内在偏见,并允许模型代表流行视频的时间依赖性。这提高了离线保留精度结果,并在A/B测试中大大增加了最近上传视频的观看时间。
排序是一个更经典的机器学习问题,但我们的深度学习方法在观看时间预测方面超过了之前的线性和基于树的方法。特别是推荐系统受益于描述过去用户与项目行为的专业功能。我们分别用嵌入和四分位数标准化来转化分类和连续特征。深度层有效地模拟了数百个特征之间的非线性交互。
通过用观看时间为正样本加权,用负样本单位加权修改逻辑回归,从而使我们能够学习紧密模拟期望观看时间的可能性。这种方法在预测点击率直接相比,更能适应加权观看时间的排名评估指标。

相关文章:

Youtube DNN:Deep Neural Networks for YouTube Recommendations

1.介绍 本文主要解决的三个挑战: 大规模的推荐场景,能够支持分布式训练和提供有效率的服务。不断更新的新物料。稀疏的用户行为,包含大量的噪声。 2.推荐系统 文章包含推荐系统的两阶段模型:召回和排序。 召回网络根据用户的历…...

Python 入门基础知识点有哪些?

Python是一种高级的、解释性的、面向对象的、动态类型语言,它在机器学习、数据分析、Web开发、科学计算等领域都有广泛的应用。下面是Python入门基础知识点的详细介绍。 1、变量和数据类型 在Python中,可以使用变量来存储数据。Python的数据类型包括整…...

【每日一题】补档 CF487B. Strip | 数据结构杂烩 -> 单调队列 | 困难

题目内容 原题链接 给定一个长度为 n n n 的数组,将这个数组进行拆分成若干个连续子数组, 使得每个子数组的最大值减去最小值小于等于 s s s , 且每个子数组的长度大于等于 l e n len len 。 问最少可以拆分成多少个连续子数组&#xff0…...

向量数据库和普通关系型数据库的区别,LAXCUS支持哪种数据库?

这是一位Laxcus用户在后台的提问,贴出来供大家参考: 1. 向量数据库与传统的关系型数据库主要有以下几个区别: 数据类型:向量数据库专门用于存储和查询向量数据,而传统数据库可以存储各种类型的数据,如文本…...

操作系统 --- 存储器管理

一、简答题 1.存储器管理的基本任务,是为多道程序的并发执行提供良好的存储器环境。请问好的存储器环境”应包含哪几个方面? 答: 2.内存保护是否可以完全由软件实现?为什么? 答:内存保护的主要任务是确保每…...

Python selenium无界面headless

视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium Chrome-headless 模式, Google 针对 Chrome 浏览器 59版 新增加的一种模式,可以让你不打开UI界面的情况下使用 Chrome 浏览器,所以运行效果与 …...

JavaScript 中的负无穷大是什么?

在 JavaScript 中,负无穷大表示为 -Infinity。它是一个特殊的数值,用于表示比任何实数都要小的值。 负无穷大用于表示超出数值范围的情况,例如在进行数学计算时发生了溢出或出现了无法表示的结果。它可以通过将负无穷大赋值给变量或通过某些…...

2023年十大地推和网推拉新app推广接单平台,一手单渠道

做地推最重要的一定是找好项目,找好项目最关键的一定是地推app接任务平台,所以这十大靠谱的地推拉新接单平台,都是我们精心筛选的,2023年从事地推和网推拉新作业。 1:聚量推客 “聚量推客”汇聚了众多市场上有的和没有…...

mybatis-plus的进阶使用

文章目录 自定义xml的sql脚本配置mybaits的全局配置文件mybatis-plus优化&#xff0c;指定select数据库乐观锁mybatis-plus实现数据库乐观锁mybatis-plus实现逻辑删除 自定义xml的sql脚本 这里的使用和mybatis一样 编写mapper.xml文件 <?xml version"1.0" enc…...

centos安装vim编辑器

第一步检查centos的vim编辑器包是否完整 rpm -qa|grep vim //查看Vim编辑器需要安装的四个包是否完整 第二步&#xff1a;一般安装vim编辑器需要一下四个安装包&#xff0c;缺失了之后可对应下载 vim-minimal-7.4.160-2.el7.x86_64vim-common-7.4.160-4.el7.x86_64 v…...

PostgreSQL InvalidMessage Cache 同步机制

文章目录 背景InvalidMessages 基本类型InvalidMessages 数据结构概览共享内存 的 "ring-buffer" 结构Backend 本地的 InvalidMessages管理SharedInvalCatalogMsgSharedInvalCatcacheMsgSharedInvalRelcacheMsgSharedInvalSnapshotMsgSharedInvalSmgrMsgSharedInvalR…...

C#,数值计算——Globals的计算方法与源程序

1 文本格式 using System; using System.Text; namespace Legalsoft.Truffer { public static partial class Globals { //const int FLT_RADIX 2; //const int DBL_MANT_DIG 53; //const int INT_DIGITS 32; //const float FLT_…...

腾讯云香港服务器轻量24元一个月性能测试

腾讯云香港轻量应用服务器优惠价格24元一个月&#xff0c;一年288元&#xff0c;以前是30M峰值带宽&#xff0c;现在是20M峰值带宽&#xff0c;阿腾云atengyun.com分享腾讯云香港轻量应用服务器性能测评&#xff0c;包括香港轻量服务器配置价格表、CPU性能和CN2网络延迟测试&am…...

深度学习之基于YoloV8的行人跌倒目标检测系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、行人跌倒目标检测系统四. 总结 一项目简介 世界老龄化趋势日益严重&#xff0c;现代化的生活习惯又使得大多数老人独居&#xff0c;统计数据表…...

Seata入门系列【16】XA模式入门案例

1 前言 在之前&#xff0c;我们试过了AT、TCC 模式&#xff0c;Seata 还支持XA 模式。 2 XA 协议 XA协议由Tuxedo首先提出的&#xff0c;并交给X/Open组织&#xff0c;作为资源管理器&#xff08;数据库&#xff09;与事务管理器的接口标准。Oracle、Informix、DB2和Sybase等…...

高级深入--day44

Scrapy 和 scrapy-redis的区别 Scrapy 是一个通用的爬虫框架&#xff0c;但是不支持分布式&#xff0c;Scrapy-redis是为了更方便地实现Scrapy分布式爬取&#xff0c;而提供了一些以redis为基础的组件(仅有组件)。 pip install scrapy-redis Scrapy-redis提供了下面四种组件&a…...

Apache Doris (四十八): Doris表结构变更-替换表

🏡 个人主页:IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 🚩 私聊博主:加入大数据技术讨论群聊,获取更多大数据资料。 🔔 博主个人B栈地址:豹哥教你大数据的个人空间-豹哥教你大数据个人主页-哔哩哔哩视频 目录...

消息认证码--数字签名--证书

6. 消息认证码—>保证数据的完整性 "消息认证码 --- 消息被正确传送了吗?"6.1 什么是消息认证码 Alice 和 Bob 的故事 像以前一样&#xff0c;我们还是从一个Alice和Bob的故事开始讲起。不过&#xff0c;这一次Alice和Bob分别是两家银行&#xff0c;Alice银行通…...

四个制作PPT的小技巧

制作PPT已经很麻烦了&#xff0c;学习一些小技巧可以帮助我们省时省力吧&#xff01; 技巧一&#xff1a;自动更新日期和时间 当我们给幻灯片添加了页脚并且是时间日期&#xff0c;可以通过设置达到自动更新&#xff0c;这样我们就不需要每次修改的时候都要手动更新日期和时间…...

Echarts饼状图grid设置

饼状图不能设置grid&#xff0c;而是center {type: "pie",radius: ["30%", "70%"],center: ["50%", "25%"], }center 圆心&#xff1a;控制圆的位置 radius 饼图的半径 控制显示尺寸 参考文章 Echarts饼状图设置...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...