推荐算法的学习

文章目录

  • 前言
  • 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预估模型的发展历程,分析了不同模型之间的共性和发展趋势,并探讨了如何从其他领域借鉴创新技术。特征部分强调了特征工程的重要性,并详细介绍了用户特征和物料特征的构造方法,以及特征组合和交叉的技巧。样本部分则讨论了如何正确定义正负样本,以及如何通过样本工程来提高模型的泛化能力。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Element中el-table组件设置max-height右侧出现空白列的解决方法

之前就出现过这个情况&#xff0c;没理过&#xff0c;因为不影响啥除了不美观...但今天看着实在是难受&#xff0c;怎么都不顺眼(可能是我自己烦躁--) 试了很多网上的方法&#xff0c;都不得行&#xff0c;后面发现了这篇文章&#xff0c;解决了! 感谢&#xff01; Element中t…

PageHelper循环依赖问题

1. 问题 2. 原因 项目中SpringBoot的版本为2.7.18。 SpringBoot2.6.x后不推荐使用循环依赖&#xff0c;也就是说从2.6.x版本开始&#xff0c;如果项目里还存在循环依赖&#xff0c;SpringBoot将拒绝启动&#xff01; 3. 解决 去pageHelper github看&#xff0c;才看到新版本…

Pandas缺失值处理

目录 NaN 加载包含缺失的数据 查看缺失值 通过info函数查看缺失值 通过isnull函数查看缺失值 通过notnull函数查看缺失值 通过isnull().sum()统计空值 缺失值处理 准备数据 dropna删除缺失值 fillna平均值填充缺失值 fillna前后值填充缺失值 interpolate线性插值 …

C++中的vector二维数组(全面详解)

目录 二维数组概念&#xff1a; 二维数组格式&#xff1a; 二维数组的初始化&#xff1a; 在创建的时候就进行初始化&#xff1a; resize初始化&#xff1a; 构造v的时候只给行数&#xff0c;列数用resize开辟 构造v的时候不给行数不给列数&#xff0c;都用resize来开辟…

Java中使用protobuf

一、简介 Protocal Buffers(简称protobuf)是谷歌的一项技术&#xff0c;用于结构化的数据序列化、反序列化。 Protocol Buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法&#xff0c;它可用于&#xff08;数据&#xff09;通信协议、数据存储等。 Protocol B…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念&#xff0c;用函数表达式来描述是这样的&#xff1a;f(x) f(f(x)) 。在程序开发中&#xff0c;则是指同一个业务&#xff0c;执行一次或多次对业务状态的影响是一致的。有些业务…

【C语言】循环中断break

在循环使用过程中&#xff0c;可能遇到某些情况需要终止循环。比如按座位查找一位学生&#xff0c;循环查找&#xff0c;找到时可以直接停止。后续的循环将不再执行。 break;只跳出一层循环 例子中的素数判断&#xff0c;查找到根号n停止&#xff1a;一个合数等于两个数的乘积…

Windows 下 cocos2d-x-3.17.2 VS2017开发环境搭建

1.下载cocos2d-x-3.17.2 源码: Cocos2d-x - 成熟、轻量、开放的跨平台解决方案 2.下载Python2 Python 2.7.0 Release | Python.org 加入环境变量: 测试版本

机器学习—特性缩放

特性缩放的技术能使梯度下降运行得更快&#xff0c;让我们先来看看功能大小之间的关系&#xff0c;这就是该特性的数字和相关参数的大小&#xff0c;作为一个具体的例子&#xff0c;让我们用两个特征来预测房子的价格&#xff0c;X1代表一个房子的大小&#xff0c;X2代表两个卧…

做安全后,再也不想打麻将了...

有时候&#xff0c;打麻将不是消遣&#xff0c;而是工作日常 摸起的每一张牌&#xff0c;可能都透露着安全从业者背后的“心酸”...... 看看下面经历&#xff0c;是否似曾相识&#xff01;

2010年国赛高教杯数学建模A题储油罐的变位识别与罐容表标定解题全过程文档及程序

2010年国赛高教杯数学建模 A题 储油罐的变位识别与罐容表标定 通常加油站都有若干个储存燃油的地下储油罐&#xff0c;并且一般都有与之配套的“油位计量管理系统”&#xff0c;采用流量计和油位计来测量进/出油量与罐内油位高度等数据&#xff0c;通过预先标定的罐容表&#…

计算机网络基础(1)

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络基础 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 1. 计算机网…

解锁中东北非市场:Flat Ads通过效果营销赋能企业高效增长

10 月 15 日至 16 日,Flat Ads 参加了在土耳其伊斯坦布尔举行的 Mobidictum Conference 2024,这场土耳其乃至中东与北非地区规模最大的游戏产业盛会,吸引了来自全球的顶尖游戏企业、开发者和营销服务商。作为全球领先的营销平台,Flat Ads 在此次大会上重点展示了基于效果营销的…

STM32 USB CUBEMX

开发背景 使用的平台&#xff1a;STM32H750 注意事项 时钟必须是48MHZ&#xff0c;其它都不行 2. 将默认任务的堆栈设大一点 如果使用操作系统&#xff0c;USB任务跑在默认任务里&#xff0c;因此需要设置默认任务的堆栈缓存是直接定义的全局变量&#xff0c;需要设置编译器…

黑马程序员C++提高编程学习笔记

黑马程序员C提高编程 提高阶段主要针对泛型编程和STL技术 文章目录 黑马程序员C提高编程一、模板1.1 函数模板1.1.1 函数模板基础知识 案例一&#xff1a; 数组排序1.2.1 普通函数与函数模板1.2.2 函数模板的局限性 1.2 类模板1.2.1 类模板的基础知识1.2.2 类模板与函数模板1.…

机器学习在聚合物及其复合材料中的应用与实践

在当前的工业和科研领域&#xff0c;聚合物及其复合材料因其卓越的物理和化学性能而受到广泛关注。这些材料在航空航天、汽车制造、能源开发和生物医学等多个行业中发挥着至关重要的作用。随着材料科学的发展&#xff0c;传统的实验和理论分析方法已逐渐无法满足新材料研发的需…

使用Python进行GRPC和Dubbo协议的高级测试

01 GRPC测试 GRPC&#xff08;Google Remote Procedure Call&#xff09;是一种高性能、开源的远程过程调用&#xff08;RPC&#xff09;框架&#xff0c;由 Google开发并基于Protocol Buffers&#xff08;protobuf&#xff09;进行通信。它使用了HTTP/2协议作为传输层&#x…

纯css实现瀑布流! 附源码!!!

瀑布流用于展示图片信息,我这里用的背景颜色来代替图片 PC端效果 源码(直接复制粘贴就可以运行了!!!) <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>PC端瀑布流</title><style>.box {w…

Github 优质项目推荐(第七期)

文章目录 Github优质项目推荐 - 第七期一、【LangGPT】&#xff0c;5.7k stars - 让每个人都成为提示专家二、【awesome-selfhosted】&#xff0c;198k stars - 免费软件网络服务和 Web 应用程序列表三、【public-apis】&#xff0c;315k stars - 免费 API四、【JeecgBoot】&am…

【深入学习Redis丨第八篇】详解Redis数据持久化机制

前言 Redis支持两种数据持久化方式&#xff1a;RDB方式和AOF方式。前者会根据配置的规则定时将内存中的数据持久化到硬盘上&#xff0c;后者则是在每次执行写命令之后将命令记录下来。两种持久化方式可以单独使用&#xff0c;但是通常会将两者结合使用。 一、持久化 1.1、什么…