推荐算法的学习

文章目录

  • 前言
  • 1、模型
    • 1.1 从本领域模型的发展历史中学习
      • 1.1.1 在历史中总结发展规律和趋势
      • 1.1.2 发现模型之间的共性,方便记忆
    • 1.2 从其他领域的发展中学习
      • 1.2.1 注意力机制
      • 1.2.2 残差网络
    • 1.3 实践该怎么办?
  • 2、 特征
    • 2.1 数据源的选择与建立
    • 2.2 特征构造
      • 2.2.1 用户特征
      • 2.2.2 物料特征:
    • 2.3 特征组合和交叉
      • 2.3.1 经典特征交叉的方式:
        • 2.3.1.1 物料共现记录法:
        • 2.3.1.2 统计维度交叉法:
    • 2.4 特征选择
  • 3、样本
    • 3.1 正负样本
    • 3.2 跟着精排做召回
    • 3.3 再举一些样本技巧的例子:
  • 总结


前言

推荐算法的学习,自用自学,🈲转载


1、模型

请添加图片描述

1.1 从本领域模型的发展历史中学习

经过长时间的发展,现在基本上已经从早期的LR,到树模型到现在的深度模型,新的模型结构层出不穷。为了更好的学习,我们梳理其发展历史,总结发展趋势和模型之间的关系,将知识编织成网状结构,从而方便我们记忆和领会其精髓。
下面以ctr预估模型为例:CTR预估模型发展的历史

1.1.1 在历史中总结发展规律和趋势

从上往下,代表了整个CTR预估的发展趋势:

  1. LR的主要限制在于需要大量手动特征工程来间接提高模型表达,此时出现了两个发展方向:
  • 以FM为代表的端到端的隐向量学习方式,通过embedding来学习二阶交叉特征
  • 以GBDT+LR为代表的两阶段模型,第一阶段利用树模型优势自动化提取高阶特征交叉,第二阶段交由LR进行最终的学习
  • 阿里提出的MLR,以多个LR模型来提高整体模型性能。后续未见有继续发展。
  1. 以FM为结点,出现了两个方向:
  • 以FFM与AFM为代表的浅层模型改进。这两个模型本质上还是学习低阶交叉特征,只是在FM基础上为不同的交叉特征赋予的不同重要度
  • 深度学习时代到来,依附于DNN高阶交叉特征能力的Embedding+MLP结构开始流行
  1. 以Embedding+MLP为结点:
  • Embedding层的改造+DNN进行高阶隐式学习,出现了以PNN、NFM为代表的product layer、bi-interaction layer等浅层改进,这一类模型都是对embedding层进行改造来提高模型在浅层表达,减轻后续DNN的学习负担
  • 以W&D和DeepFM为代表的双路模型结构,将各个子模块算法的优势进行互补,例如DeepFM结合了FM的低阶交叉信息和DNN的高阶交叉信息学习能力
  • 显式高阶特征交叉网络的提出,这一阶段以更复杂的网络方式来进行显式交叉特征的学习,例如DCN的CrossNet、xDeepFM的CIN、AutoInt的Multi-head Self-attention结构
  • 由于现在业务场景的负责,特别是广告领域OCPX和信息流领域互动,时长等多目标同时预测需求的提出,MMOE和ESMM这两种多目标模型也随之出现。
    从整个宏观趋势来看,每一阶段新算法的提出都是在不断去提升模型的表达能力,从二阶交叉,到高阶隐式交叉,再到如今的高阶显示交叉,模型对于原始信息的学习方式越来越复杂的同时,也越来越准确。

1.1.2 发现模型之间的共性,方便记忆

右侧红色字体提取了部分模型之间的共性:

  • 手动特征:LR与W&D都需要进行手动的特征工程
  • 非端到端:GBDT+LR通过树模型提取特征+LR建模的两阶段,FNN则是FM预训练embedding+DNN建模的两阶段方式,这两者都是非端到端的模型
  • 多次嵌入:这里是指对于同一个特征,使用多个embedding来提升信息表达。包括FFM的Field-aware,ONN的Operation-aware
  • 注意力机制:Attention机制为CTR预估中的交叉特征赋予了不同的重要性,也增加了一定的可解释性。AFM中采用单个隐藏层的神经网络构建attention层,AutoInt在Interacting Layer中采用NLP中QKV形式学习multi-head self-attention
  • 显式交叉:DNN本身学习的是隐式特征交叉,DCN、xDeepFM、AutoInt则都提出了显式特征交叉的网络结构
  • 参差网络:ResNet的引入是为了保留历史的学习到的信息,CrossNet与AutoInt中都采用了ResNet结构
    另外一种分类思路:请添加图片描述

1.2 从其他领域的发展中学习

不同领域的相互借鉴:
再以CTR预估模型为例,看看从其他机器学习领域借鉴(抄袭)来了什么?

1.2.1 注意力机制

Attention机制最早在视觉领域提出,2014年Google Mind发表了《Recurrent Models of Visual Attention》,使Attention机制流行起来,这篇论文采用了RNN模型,并加入了Attention机制来进行图像的分类。
2005年,Bahdanau等人在论文《Neural Machine Translation by Jointly Learning to Align and Translate》中,将attention机制首次应用在nlp领域,其采用Seq2Seq+Attention模型来进行机器翻译,并且得到了效果的提升,Seq2Seq With Attention中进行了介绍。
2017 年,Google 机器翻译团队发表的《Attention is All You Need》中,完全抛弃了RNN和CNN等网络结构,而仅仅采用Attention机制来进行机器翻译任务,并且取得了很好的效果,此文一出,注意力机制立马变成热点,也被广告和推荐领域所注意到,AFM和DIN等网络模型也随之出现。

1.2.2 残差网络

残差网络(Residual Network简称ResNet)是在2015年继Alexnet Googlenet VGG三个经典的CNN网络之后提出的,并在ImageNet比赛classification任务上拔得头筹,ResNet因其简单又实用的优点,现已在检测,分割,识别等领域被广泛的应用。
ResNet可以说是过去几年中计算机视觉和深度学习领域最具开创性的工作,有效的解决了随着网络的加深,出现了训练集准确率下降的问题。
请添加图片描述

残差单元可以以跳层连接的形式实现,即将单元的输入直接与单元输出加在一起,然后再激活。
DCN网络就借鉴了ResNet的思想,可以将原始信息在CrossNet中进行传递
请添加图片描述
每一层都将上一层的结果addtion后生成了本层的输出。

1.3 实践该怎么办?

今天看到transformer在NLP里面序列建模很有效果,而推荐中也有用户的行为序列,就把transformer借助过来;再比如xdeepfm看起来很厉害,赶快也拿过来试一试。所以对于模型结构派来说,只要业界有新的发展(paper),永远不会陷入没事情可做的境地,而且像transformer这样的技术确实也能在推荐中发挥很大的作用,能拿到很不错的收益。
对于高手来说,有的模型变形不大,看起来是蜻蜓点水,然而效果却非常犀利。他们能把深度学习的很多技术和之前的机器学习技术都融会贯通。但是对于初学者来说,经常会陷入不断尝试新模型,不断猴子掰苞谷的境地之中。似乎自己厉害,什么模型都能搞一下。模型看似猛如虎,一看实验报告万分之五。而且新的模型网络结构也越来越复杂,算力要求越来越高。好容易做正一个实验,要么延迟有问题,要么为了降低延迟,部署的打分服务数量乘2。导致算法效费比越来越低。这样的工作其实就是吃了现在算力提升的红利,而非真正创新性的工作。而且导致后面迭代越难,因为没那么多算力提升的红利可吃。
但是算法工程师有时候会陷入一种误区,就是只有模型创新才算创新。万般皆下品,唯有模型高。大家争相内卷:你能看paper,我也能看,你能实现一个新算法,我也能实现。管他合适不合适,先搞上去试一试。把不work的东西包装成有效果,把不必要的环节强行加进去等等,然后大加吹捧。这是一个非常不健康的路径。
工业界做算法本质还是要实事求是+创新。看文章实现仅仅是初出茅庐的水平,如果想做出真正有价值的东西,应该对模型结构有自己的认识,有自己的理解,到底他合适不合适当前的场景。我们做的业务场景能不能发挥出这个模型的创新点和优势。
另外对于推荐系统模型学习有下面几个建议:

  1. 注重基础模型的学习和理解,同时关注业界最新的进展
  2. 重点精读和实践工业界的论文,对于学界的论文有甄别的读
  3. 关注其他领域的重点发展,可能有重大的借鉴意义

2、 特征

数据和特征决定了机器学习的上限,而模型算法只是尽可能逼近这个上限。
所谓特征工程,就是对原始数据进行一系列工程处理,作为输入供算法和模型使用,方便模型易于学习,提升模型效果的过程。本质上讲,特征工程的目的是去除原始数据中的杂质和冗余,设计更高效的特征以刻画求解问题与预测模型之间的关系。请添加图片描述

2.1 数据源的选择与建立

在数据化时代,用户每天都要产生大量数据。把所有的数据都做成特征 ,以供算法使用是不现实且浪费的。哪些数据对你所负责的业务有用,哪些没有用,在数据源的选择上必须有所取舍。
取舍的关键首先要理解业务,寻找业务中关键点,可能会影响业务指标的关键因素。比如信息流业务中,从推荐算法的协同原理和用户的兴趣来看,用户点击文章的历史非常重要。那么就要将这个数据选择为将要使用的数据源。如果没有就需要想办法让能够产生数据的业务方去产生这样的数据。这就是数据源的建立。

2.2 特征构造

这里的特征构造着重于如何构造复杂的特征而非简单的特征抽取方法。
原始的数据一般是没有办法喂给模型直接使用的,这就需要将原始数据抽取成模型可以使用的特征的格式。比如用户历史,一般在原始数据中是一条条用户的点击记录日志。这样的日志是没办法让模型直接使用的。下面以推荐常用的特征构造方法为例:

2.2.1 用户特征

没有类似于din的模型之时,就可以通过统计之前用户在category或者sub category上的曝光,点击和点击率信息来抓住用户历史的信息。
cate点击率统计:{“社会—点击率”:0.02,“军事-点击率:0.06”}
cate曝光统计:{“社会—曝光”:200,“军事-点击率:100”}
cate曝光点击:{“社会—点击”:4,“军事-点击:6”}
cate的点击占比统计:{“社会—点击”:0.4,“军事-点击:0.6”}
对cate=“社会”的点击占比(i.e., 用户一共点击了10文章,其中6篇带cate=“社会”,点击占比=0.6)
subCate点击率统计:{“反腐打虎-点击率”:0.25,“国内时政-点击率”:0.05,“国际足球-点击率”:0.03,“西甲-点击率”:0.01}
后续可能我们还会需要加上时间维度(时间太长可以考虑时间衰减),比如多少天内的。
再加上统计值过小不置信的时候可以加上平滑(威尔逊平滑,贝叶斯平滑)
实践下来 我们总结出来以下的方法
在这里插入图片描述
而有了DIN这样的模型之后,可以将用户点击的n个文章历史抽取成:
list historyIds : {“id1”,“id2”…“idn”}
list historyCats: {“cate1”, “cate2”, “caten”}
list historySubcats: {“subcate1”, “subcate2”, “subcaten”}

2.2.2 物料特征:

物料特征最重要的就是后验特征,与用户特征类似,我们可以总结以下方法:
在这里插入图片描述
例子:
24小时内文章a被点击的次数
30天内文章b被阅读的平均时长

2.3 特征组合和交叉

  • 举个简单的例子:
    • 到了春节,来了中国人,电商网站给他推饺子,大概率能够成交
    • 到了感恩节,来了美国人,电商网站给他推火鸡,大概率也能成交
      请添加图片描述

为什么?因为<春节,中国人,饺子>的模式、<感恩节、美国人、火鸡>的模式在训练样本中出现得太多太多了,模型只需要记得住,下次遇到同样的场景,“照方扒抓药”,就能“药到病除”。如果我们构造出 <节日—国家-物品>这个交叉特征后,模型就很容易记住“春节-中国人-饺子”、“感恩节-美国人-火鸡”这样的特征对于成交率非常重要。从而提高模型的预测准确率。

这个简单的例子说明了特征组合和交叉是非常重要的。

DNN才出来的时候号称MLP可以模拟任何函数,达到特征自动交叉的能力。但是现在越来越多实践发现多层mlp的拟合能力只是理论上的,再多层的mlp都比不上网络结构上直接的交叉。因此我们可以看到各种非常复杂的模型,其改进部分相对于dnn就是提供了特征组合和交叉的能力。例如:DCN

其核心是一个叫做Cross Network的旁路,这一路是专门对特征进行交叉的。按照设计,这路网络会对特征进行任意有限阶交叉。其核心设计可以用下面的公式来表示:

请添加图片描述
其中, x(l)和x(l+1) 分别是DNN中,输入层和输出层的中间结果(向量)。 x0为一开始的输入特征的embedding的拼接,它会在每一个层都参与运算。 w就是这层要学习的权重了,这也是一个向量。结构上也可以用下面的图来辅助理解:
请添加图片描述

还有xdeepFM和DCN v2等更加多自动交叉的网络。其目的都是为了改进特征的自动交叉能力。

但是我们自己的实践中一般情况下手动的交叉效果还是大幅的强过通过模型带来的自动交叉组合。与此同时没有文献会说明某个具体的高阶,或者某种具体的形式是能够确定涨点的。又比如我们希望有人能够分享经验,说把用户,物料,环境信息三者交叉能涨点,或者这些大方面中的哪些具体特征交叉起来是最有利的。没有这些经验,高阶的探索变的很不确定,如果只是说就把所有的东西大杂烩放进去,那么里面可能有很多浪费的计算,而且操作很不经济。理解业务,设计特征交叉和交叉的方式是现在业界在实际操作中比较需要的地方,也是成长为高手需要积累的经验。、

2.3.1 经典特征交叉的方式:

2.3.1.1 物料共现记录法:

2016年google发表了著名的wide&Deep模型被广大算法工程师奉为圭臬,大家记忆更深的应该下面的模型结构Wide部分神经网络和深层的Deep部分多层神经网络。
请添加图片描述
但是其实论文中隐含了一种特征构造的方法,即物料共现记录请添加图片描述
大家可以看到红圈内的Wide部分采用了什么特征,它采用了两个id类特征的交叉,这两个id类特征是:已安装应用当前曝光应用

这篇文章是Google的应用商店团队Google Play发表的,我们不难猜测Google的工程师使用这个组合特征的意图,他们是想发现当前曝光app和用户安装app的共现关系,以此来直接影响最终的得分。

这种物料共现记录的方法适用于物料并不是特别多的场景,因为这种物料的交叉特征的one hot编码将会是n*n级别的。在应用商店这种万级别物料的情况下,加上L1 FTRL的优化函数(会让交叉特征的大部分权重都为0)的加持,参数规模就是能够承受的。

2.3.1.2 统计维度交叉法:

由于物料共现方法在信息流内容推荐的场景比较难以运用,因为信息流推荐的场景的物料基本都在百万以上。n*n的参数规模将会在万亿级别。所以可以退一步,将用户在物料的反馈以分类标签维度进行统计,再与当前物料进行交叉。
历史统计为以下形式:
{“社会—点击”:4,“军事-点击“:6,”生活-点击“:3,“宠物-点击”:5},
当前物料分类为“军事”时
可以交叉形成特征:{当前分类-点击:6}
也可以形成多个交叉特征
{“社会—军事-点击”:4,“军事-军事-点击“:6,”生活-军事-点击“:3,“宠物-军事-点击”:5}

2.4 特征选择

这里篇幅问题不予赘述。

3、样本

要想让模型的训练起来,仅仅有特征还不够。样本中一条完整的样本包含{x,y}两部分,其中x既是特征,是刚才在特征派进行大量讨论的。而y既是label/reward,是模型学习的目标。如果目标定义错了,那么相当于在教模型错误的东西。那么模型还怎么可能得到我们期望的结果。相当于一个模型,三观坏了,模型搞得再复杂,学习能力再强,喂进去的特征再厉害,最终训练出来的模型也只会给出错误的预测。
我们的模型说白了就是一组“规则”,一组动态的,具有自我生长和自我调节能力的规则,而赋予模型这个能力的正是样本,通过样本向模型向模型传递“什么是好?什么是坏“的反馈信号,好的我们要鼓励,通过正样本告诉模型,这样做对了。坏的我们要惩罚。通过负样本告诉模型,这是坏的。

3.1 正负样本

可能大家会有疑惑就是,正负样本不是很好定义么?拿推荐CTR模型的正负样本来说:点击就是正样本,曝光没点击就是负样本嘛,不是很好定义么。

想像刷信息流的时候是不是经常有这样的场景:

  • 不小心点了个文章,不是自己喜欢的,马上退了出来。
  • 标题看起来很有意思的一个文章,点进去一看原来是标题党,马上退了出来。
    请添加图片描述
    这时候点击这个行为还是显示了用户对文章的喜爱?这样的样本还适合当作正样本么?模型拿到这样的正样本是变得更“好”,还是更“坏”?
    另外一种情景:在信息流中,用户在不断下滑寻找感兴趣的内容,注意力是从上到下,当用户点击一个文章的时候,一般只有点击文章上面的文章是被用户看到,而点击文章下面的文章一般是用户尚未看到的。这个时候这些虽然有曝光打点,但是其实未被用户看到的内容被当成负样本显然是不合适的。请添加图片描述
    根据模型适用场景目标定制样本的过程称之为“样本工程”,其重要度不亚于特征工程,而且更容易被忽略。

3.2 跟着精排做召回

回到推荐ctr的模型,继续**“点击就是正样本,曝光没点击就是负样本”**。我们去除掉快速回退的点击正样本,训练得到了一个排序模型,上线后当作精排模型,看起来效果不错。后来老板又让去做召回模型。有了之前的成功经验和data pipiline,再做一个召回模型不是手到擒来。于是拿着精排模型的样本(“点击就是正样本,曝光没点击就是负样本”),照葫芦画瓢,搞个双塔模型。
请添加图片描述
线下测试下来发现auc还不错,但这时候上线一跑实验,基于我的经验:大概率是负向的(除非召回的base太差)。离线查看召回结果,发现召回的物料与用户画像、用户点击历史,相关性很差。为什么精排模型的样本生成方法在召回模型这块就不行尼?
因为这种方法违背了机器学习的一条基本准则:离线训练数据的分布,应该与线上实际应用的数据,保持一致。
以前,我们谈到召回与排序的不同,往往只强调速度,即因为召回的候选集更大,所以要求速度更快,所以模型可以简单一些。这是只知其一,另一个方面就是:

  • 排序其目标是“从用户可能喜欢的当中挑选出用户最喜欢的”,是为了优中选优。与召回相比,排序面对的数据环境,是相对优秀的。
  • 召回是“是将用户可能喜欢的,和海量对用户根本不靠谱的,分隔开”,所以召回在线上所面对的数据环境,就是鱼龙混杂、良莠不齐。
    所以,要求喂入召回模型的样本,既要让模型见过<user,doc>最匹配的,也要让模型见过<user,doc>最不靠谱的,才能让模型达到"开眼界、见世面"的目的,从而在“大是大非”上不犯错误。
  • <user,doc>最匹配的,没有异议,就是用户点击的样本
  • <user,doc>最不靠谱的,是“曝光未点击”样本吗?这里牵扯到一个推荐系统里常见的bias,就是我们从线上日志获得的训练样本,已经是上一版本的召回、粗排、精排替用户筛选过的,即已经是对用户“比较靠谱”的样本了。拿这样的样本训练出来的模型做召回,一叶障目,只见树木,不见森林。
    请添加图片描述

3.3 再举一些样本技巧的例子:

  1. 复制正样本:
  • 在不方便做多目标或者更改loss时,又希望能够加权某种正样本。那么可以直接复制这种行为的正样本,让训练时这种正样本多次被模型学习。比如,在信息流场景中,大部分样本点击了后阅读了2分钟,小部分样本B点击了后阅读了4分钟。希望能够提升阅读时长的时候,可以复制样本B一遍加入到训练集合中。这样模型将会倾向于推荐阅读时长更长的文章。
  1. 去除无效样本:
  • 过滤无点击行为用户。在构造样本时候,过滤掉没用任何点击行为的用户数据,这样做合不合适呢?有人说,他们不直接把没有点击行为用户数据全部过滤掉,而是对这些用户进行随机采样作为负样本,效果要好一些。
  • 过滤异常数据。把一些行为异常的用户数据过滤掉,例如有人一天点击了十万条帖子,这种行为在实际生活中几乎不可能。
  1. 降采样:
  • 高频用户进行降采样,缓解高频用户对loss的过度影响,平等对待高活跃用户与其他用户。
  • 对高频item进行降采样,缓解推荐系统的马太效应

总结

本文深入探讨了机器学习中的三个核心要素:模型、特征和样本。在模型方面,文章回顾了CTR预估模型的发展历程,分析了不同模型之间的共性和发展趋势,并探讨了如何从其他领域借鉴创新技术。特征部分强调了特征工程的重要性,并详细介绍了用户特征和物料特征的构造方法,以及特征组合和交叉的技巧。样本部分则讨论了如何正确定义正负样本,以及如何通过样本工程来提高模型的泛化能力。

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

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

相关文章

Python生成随机密码脚本

引言 在数字化时代&#xff0c;密码已成为我们保护个人信息和数据安全的重要手段。然而&#xff0c;手动创建复杂且难以猜测的密码是一项既繁琐又容易出错的任务。幸运的是&#xff0c;Python编程语言为我们提供了一种高效且灵活的方法来自动生成随机密码。本文将详细介绍如何…

android app执行shell命令视频课程补充android 10/11适配-千里马android

(https://blog.csdn.net/learnframework/article/details/120103471) https://blog.csdn.net/learnframework/article/details/120103471 hi&#xff0c;有学员在学习跨进程通信专题课程时候&#xff0c;在实战app执行一个shell命令的项目时候&#xff0c;对课程本身的android …

【高等数学】无穷级数

0. 了解 无穷级数是指将无穷多个数按照一定的规律相加起来的表达式。 打个比方,就像你有一个无穷长的梯子,每一级梯子代表一个数。把这些数一个一个加起来,就形成了无穷级数。 比如常见的等比级数,这里是首项,是公比。如果,这个等比级数是收敛的,也就是它的和是一个有限…

Hackmyvm-Lookup

0x00信息收集 0x01端口扫描 PORT STATE SERVICE 22/tcp open ssh 80/tcp open http MAC Address: 08:00:27:0A:44:CF (Oracle VirtualBox virtual NIC)22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 (Ubuntu Linux; protocol 2.0)80/tcp open http Apache ht…

数据权限的设计与实现系列13——前端筛选器组件Everright-filter集成多控制维度实现

‍ 数据权限多维度实现 上面的所有工作&#xff0c;实际都是基于业务实体属性这一数据权限控制维度展开的。 接下来&#xff0c;我们来设计与实现多维度&#xff0c;主要是用户组&#xff08;即角色&#xff09;、组织机构和用户。 ‍ 业务需求分析 用户控制维度 业务场景…

【MATLAB代码】指纹定位方法(KNN)介绍与例程(二维、轨迹定位),源代码可复制粘贴到MATLAB上运行

文章目录 指纹定位指纹定位技术简介基本原理位置估算公式1. 最近邻居算法(KNN)2. 加权最近邻居算法(W-KNN)3. 最小二乘法(LS)最终位置 P P P通过求解下面的方程获得:应用场景优缺点优点缺点总结源代码代码运行运行方法运行结果指纹定位 指纹定位技术简介 指纹定位是一…

SpringBoot日常:封装redission starter组件

文章目录 逻辑实现POM.xmlRedissionConfigRedissionPropertiesRedissionUtilsspring.factories 功能测试application.yml配置POM.xmlTestController运行测试 本章内容主要介绍如何通过封装相关的redission连接配置和工具类&#xff0c;最终完成一个通用的redission starter。并…

洛谷 P1038 [NOIP2003 提高组] 神经网络(拓扑排序)

题目传送门 感觉这道题需要我们高超的语文阅读水平…… 解题思路 我们发现要计算一个细胞的状态值&#xff08;&#xff09;&#xff0c;就需要先算出有边指向它的其他细胞对答案的贡献&#xff1b; 这是有拓扑序的&#xff0c;所以我们想到拓扑排序。 题目中说了&#xff0…

FastDFS单节点部署

FastDFS单节点部署 1、FastDFS入门1.1 分布式文件系统1.2 FastDFS 简介1.3 FastDFS 发展历史1.4 FastDFS 整体架构1.5 FastDFS 线上使用者 2、FastDFS 环境搭建2.1 FastDFS 安装2.1.1 安装前的准备2.1.2 安装 libfastcommon库2.1.3 安装 FastDFS 2.2FastDFS 配置2.2.1 去掉/etc…

即使是编程新手,也能利用ChatGPT编写高质量的EA

在外汇交易领域&#xff0c;MetaTrader是一款备受欢迎的交易软件&#xff0c;包括MT5和MT4&#xff0c;提供了众多强大的分析工具和自动化交易功能。对于没有编程经验的新手而言&#xff0c;编写专家顾问&#xff08;EA&#xff09;可能显得既复杂又令人望而却步。幸运的是&…

数据结构——链表,哈希表

文章目录 链表python实现双向链表复杂度分析 哈希表&#xff08;散列表&#xff09;python实现哈希表哈希表的应用 链表 python实现 class Node:def __init__(self, item):self.item itemself.next Nonedef head_create_linklist(li):head Node(li[0])for element in li[1…

spring6 IoC容器详解

目录 一、引言 示例开发 示例分析 启用Log4j2日志框架 使用方式 二、IoC容器 IoC容器 1.控制反转&#xff08;IoC&#xff09; 2.依赖注入 3.IoC容器在Spring的实现 基于XML管理Bean 依赖注入之setter注入 依赖注入之构造器注入 Bean生命周期 基于xml自动装配 …

基于SSM+微信小程序的打印室预约管理系统(打印2)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 基于SSM微信小程序的打印室预约管理系统实现了管理员和用户两个角色。 1、管理员功能有个人中心&#xff0c;用户管理&#xff0c;附近打印店管理&#xff0c;文件打印管理&#xff0c;当…

ui自动化知识点-web端

UI : User Interface( ⽤户接⼝ - ⽤户界⾯ ) ,主要包括: app 、 web ui ⾃动化测试:使⽤⼯具或代码执⾏⽤例的过程 什么样的项⽬适合做⾃动化:1、需要回归测试项⽬(甲⽅⾃营项⽬、⾦融、电商)2、需求变动不频繁:稳定的模块3、项⽬周期⻓的项⽬:(甲⽅⾃营项⽬、6个…

YOLO11改进 | 主干网络 | 将backbone替换为Swin-Transformer结构【论文必备】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文给大家带来的教程是将YOLO11的backb…

LaTeX教程(016)-LaTeX文档结构(16)

LaTeX教程(016)- LaTeX \LaTeX LATE​X文档结构(16) 接上一讲 我们前面知道&#xff0c;\vref是对\ref的升级&#xff0c;而varioref包也提供了一个对\pageref升级的命令\vpageref。它和\vref的原理很相似&#xff0c;内置了一些判断。 \vpageref[same-page][other-page]{ke…

【C++】C++当中的复合类型——引用和指针

C当中的复合类型 最近开始系统地学习 C 的语法&#xff0c;参考的主要资料来自于 C Primer 第五版&#xff0c;对于学习过程中所遇到的较难理解的点&#xff0c;我会以blog的形式对问题和内容进行记录&#xff0c;并进行进一步地探讨。 这一部分的内容对应于参考资料 C Prime…

spring-cloud-alibaba-nacos-config2023.0.1.*启动打印配置文件内容

**背景&#xff1a;**在开发测试过程中如果可以打印出配置文件的内容&#xff0c;方便确认配置是否准确&#xff1b;那么如何才可以打印出来呢&#xff1b; spring-cloud-alibaba-nacos-config 调整日志级别 logging:level:com.alibaba.cloud.nacos.configdata.NacosConfigD…

Linux操作系统与windows无法相互复制问题

请先看完此文在进行操作&#xff01;&#xff01;&#xff01; 对于无法复制我们逐层分析&#xff1a; 1.为什么无法复制是不是少了什么工具(open-vm-tools-destop) 上网查阅可以看到如下 2.在此之前我的虚拟机装完Ubuntu 16.04的linux系统无法进行apt update(参考一下) li…

华三服务器R4900 G5在图形界面使用PMC阵列卡(P460-B4)创建RAID,并安装系统(中文教程)

环境以用户需求安装Centos7.9&#xff0c;服务器使用9块900G硬盘&#xff0c;创建RAID1和RAID6&#xff0c;留一块作为热备盘。 使用笔记本通过HDM管理口&#xff08;&#xff09;登录 使用VGA&#xff08;&#xff09;线连接显示器和使用usb线连接键盘鼠标&#xff0c;进行窗…