《深度学习推荐系统》笔记

目录

  • 一、推荐系统是什么
    • 1.作用和意义
    • 2.推荐系统的架构
      • 2.1 逻辑架构
      • 2.2 技术架构
  • 二、传统的推荐系统方法
    • 1. 协同过滤算法
      • 1.1 userCF&&ItemCF
      • 1.3 矩阵分解算法
    • 2. 逻辑回归算法
    • 3. 因子分解机
      • 3.1 POLY2模型
      • 3.2 FM模型
      • 3.3 FFM模型
      • 3.4 小结
    • 4. 组合模型
      • 4.1 GBDT+LR组合模型
      • 4.2 LS-PLM
  • 三、深度学习推荐系统
    • 1. 改变神经网络的复杂度
      • 1.1 AutoRec
      • 1.2 Deep Crossing
    • 2. 改变特征交叉方式
      • 2.1 NeuralCF模型
      • 2.2 PNN模型
    • 3. 组合模型
      • 3.1 Wide&Deep模型
      • 3.2 Deep&Cross模型
    • 4. FM模型的深度学习演化版本
      • 4.1 FNN模型
      • 4.2 DeepFM模型
      • 4.3 NFM模型
    • 5. 注意力机制与推荐模型的融合
      • 5.1 AFM模型
      • 5.2 DIN模型
    • 6. DIEN——序列模型与推荐模型的融合
  • 四、Embedding技术在推荐系统中的应用
    • 1. Word2vec
    • 2. Item2vec
      • 2.1 基于Word2Vec思想的Item2vec
      • 2.2 广义的Item2vec
    • 3. Graph Embedding
      • 3.1 DeepWalk
      • 3.2 Node2vec
      • 3.3 EGES
    • 4. Embedding与深度学习推荐系统的结合
      • 4.1 深度学习网络中的Embedding层
      • 4.2 Embedding的预训练方法
      • 4.3 Embedding作为推荐系统召回层
    • 4. 局部敏感哈希
  • 五、多角度审视推荐系统
    • 1. 推荐系统的特征工程
      • 1.1 推荐系统常用特征
      • 1.2 常用特征处理方法
    • 2. 推荐系统召回层的策略
      • 2.1 多路召回策略
      • 2.2 基于Embedding的召回
    • 3. 推荐系统的实时性
      • 3.1 推荐系统“特征”的实时性
      • 3.2 推荐系统模型的实时性
    • 4. 冷启动的解决方法
      • 4.1 基于规则的冷启动
      • 4.2 丰富冷启动过程中可获得的用户和物品特征
      • 4.3 利用主动学习、迁移学习和“探索与利用”机制

在这里插入图片描述

一、推荐系统是什么

1.作用和意义

用户角度:解决”信息过载“的情况下,用户如何高效获得感兴趣信息;

公司角度:解决产品能最大限度地吸引用户、留存用户、增加用户粘性、提高用户转化率,使公司商业目标连续增长。

2.推荐系统的架构

2.1 逻辑架构

已知用户信息、物品信息和场景信息的基础上,对于用户U,在特定的场景C下,从海量物品中,构建函数f(U,I,C),预测用户对特定候选物品I的喜好程度,根据喜好程度对候选物品进行排序,生成推荐列表。

在这里插入图片描述

2.2 技术架构

(1)数据部分

对物品、用户、场景的信息进行处理。加工后数据出口主要有:

1)生成推荐模型所需的样本数据,用于算法模型的训练和评估。

2)生成推荐模型服务(model serving)所需的“特征”,用于推荐系统的线上推断。

3)生成系统监控、商业智能(Business Intelligence,BI)系统所需的统计型数据。

(2)模型部分

召回层:简单的模型,快速从海量候选集中召回用户可能感兴趣的商品。

排序层:利用排序模型对初筛选的候选集进行精排。

补充策略与算法层:也被称为“再排序层”,可以在将推荐列表返回用户之前,为兼顾结果的“多样性”“流行度”“新鲜度”等指标,结合一些补充的策略和算法对推荐列表进行一定的调整,最终形成用户可见的推荐列表。

在这里插入图片描述

二、传统的推荐系统方法

1. 协同过滤算法

1.1 userCF&&ItemCF

(1)userCF

首先根据user-item交互矩阵,计算user之间的相似性,得到Top n相似性用户;用户对某商品的评价预测=n个相似用户对此商品的评分的加权(权重为用户的相似性)和。
userCF存在的问题:用户数往往大于物品数,导致用户相似度矩阵的存储开销很大;用户历史数据向量很稀疏,对一些只有几次购买行为用户,找到相似用户准确度很低。因此一般使用itemCF。
(2)ItemCF
基于历史数据,构建m×n维共现矩阵;计算共现矩阵两两列相连间相似性,构建n×n维物品相似度矩阵;获得用户历史行为数据中的正反馈列表;利用物品相似度矩阵,针对目标用户历史行为中的正反馈物品,找出相似的Top k个物品,组成相似物品集合;对相似物品集合中的物品,利用相似度分值进行排序,生成最终的推荐列表;在第5步中,如果一个物品与多个用户行为历史中的正反馈物品相似,那么该物品最终的相似度应该是多个相似度的累加。

问题:协同过滤推荐结果的头部效应比较明显,处理稀疏向量的能力弱。因为热门物品具有很强的头部效应,容易跟大量物品产生相似性;而尾部的物品由于特征向量稀疏,很少与其他物品产生相似性,导致很少被推荐。

1.3 矩阵分解算法

针对上述问题:因此矩阵分解算法在协同过滤共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征,在一定程度上弥补了协同过滤模型处理稀疏矩阵能力不足的问题。
矩阵分解算法期望为每一个user和item生成一个隐向量,在隐向量空间中,应该把距离近的item推荐给user。user和item的隐向量是通过分解协同过滤生成的共现矩阵得到。
矩阵分解算法将m×n维的共现矩阵R分解为m×k维的用户矩阵U和k×n维的物品矩阵V相乘的形式。其中m是用户数量,n是物品数量,k是隐向量的维度。k 的大小决定了隐向量表达能力的强弱。k 的取值越小,隐向量包含的信息越少,模型的泛化程度越高;反之,k 的取值越大,隐向量的表达能力越强,但泛化程度相应降低。
矩阵分解的求解使用的梯度下降。因为特征值分解只用于方阵,奇异值分解要求原始共现矩阵是稠密的,而且计算复杂度大,而user item很多。

目标函数:使原始评分和user item向量之积的差尽量小,使用梯度下降不断更新q和p。
在这里插入图片描述

进一步,在矩阵分解时加入用户和物品的偏差向量,来消除用户和物品打分的偏差。
在这里插入图片描述
矩阵分解优点:1)泛化能力强,在一定程度上解决数据稀疏;2)空间复杂度低,无需维护庞大的用户或商品相似性矩阵,只需存储隐向量,复杂度由n×n降到(n+m)×k。3)更好扩展性和灵活性,隐向量和embedding思想相同,可以与其他特征拼接。

缺点:与此同时,也要意识到矩阵分解的局限性。与协同过滤一样,矩阵分解同样不方便加入用户、物品和上下文相关的特征,这使得矩阵分解丧失了利用很多有效信息的机会,同时在缺乏用户历史行为时,无法进行有效的推荐。

2. 逻辑回归算法

逻辑回归模型能够综合利用用户、物品、上下文等多种不同的特征,生成较为“全面”的推荐结果

步骤:1)将用户年龄、性别、物品属性、物品描述、当前时间、当前地点等特征转换成数值型特征向量。2)确定逻辑回归模型的优化目标(以优化“点击率”为例),利用已有样本数据对逻辑回归模型进行训练,确定逻辑回归模型的内部参数。3)在模型服务阶段,将特征向量输入逻辑回归模型,经过逻辑回归模型的推断,得到用户“点击”(这里用点击作为推荐系统正反馈行为的例子)物品的概率。4)利用“点击”概率对所有候选物品进行排序,得到推荐列表。

优点:1)可解释性强,通过权重知道哪些特征向量重要;2)易于并行化、模型简单、训练开销小等。
缺点:表达能力不强**,无法进行特征交叉、特征筛选**等一系列较为“高级”的操作,因此不可避免地造成信息的损失。

3. 因子分解机

有时仅利用单一特征而非交叉特征进行判断,会得出错误的结论,即辛普森悖论,因此要进行特征的交叉。

3.1 POLY2模型

POLY2模型暴力组合特征,对所有特征进行两两交叉,并对所有特征组合赋予权重。
在这里插入图片描述
缺陷:1)很特征向量是one-hot编码,POLY2进行无选择的特征交叉,使原本就稀疏的特征向量更加稀疏,使大部分特征交叉的权重缺乏有效数据进行训练,无法收敛。2)权重参数数量由n增加到n×n,增加训练复杂度。

3.2 FM模型

FM为每个特征学习了一个隐权重向量(latent vector)。在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重。FM 通过引入特征隐向量的方式,直接把 POLY2 模型 n×n级别的权重参数数量减少到了 nk(k为隐向量维度,n>>k)。
在这里插入图片描述
FM模型虽然丢失了某些具体特征组合的的精确记忆能力,但确提高了泛化能力,例如对于一个从未出现过的特征组合(NBC,Gucci),由于FM模型之前已经分别学习过NBC和Gucci的隐向量,具备了计算该特征组合权重的能力,而POLY2不行。

3.3 FFM模型

相比于FM模型,FFM引入特征域感知,使模型表达能力增强

每个特征的隐向量不再是只有一个,而是针对每个field学习一个独立的隐向量,防止互相影响。

在FFM模型的训练过程中,需要学习n个特征在f个域上的k维隐向量,参数数量共n · k · f个。,复杂度为kn*n,但提高了模型的表达能力

3.4 小结

Publisher、Advertiser、Gender 是三个特征域,ESPN、NIKE、Male分别是这三个特征域的特征值:依次为POLY2、FM、FFM

POLY2
在这里插入图片描述
在这里插入图片描述

4. 组合模型

FFM模型引入特征域的方式增强模型的特征交叉能力,但只能做二阶特征的交叉,提高特征交叉维度会产生组合爆炸和计算复杂度过高的问题。

4.1 GBDT+LR组合模型

用GBDT构建特征工程:利用训练集训练好GBDT模型后,就可以利用该模型完成从原始特征向量到离散特征向量的转化;利用R估计CTR。这两步是独立训练的。
在这里插入图片描述

在GBDT+LR组合模型出现之前,特征工程主要解决方法:1)是进行人工的或半人工的特征组合和特征筛选(投入精力大);2)是通过改造目标函数,改进模型结构,增加特征交叉项的方式增强特征组合能力(对模型设计的要求高)。

GBDT+LR组合模型的提出,意味着特征工程可以完全交由一个独立的模型来完成,模型的输入可以是原始的特征向量,不必在特征工程上投入过多的人工筛选和模型设计的精力。

4.2 LS-PLM

例如:如果 CTR 模型要预估的是女性受众点击女装广告的 CTR,那么显然,我们不希望把男性用户点击数码类产品的样本数据也考虑进来,因为这样的样本不仅与女性购买女装的广告场景毫无相关性,甚至会在模型训练过程中扰乱相关特征的权重。

为了让 CTR 模型对不同用户群体、不同使用场景更有针对性,其采用的方法是先对全量样本进行聚类,再对每个分类施以逻辑回归模型进行CTR预估。

首先用聚类函数π对样本进行分类(这里的 π采用了 softmax 函数对样本进行多分类),再用 LR模型计算样本在分片中具体的CTR,然后将二者相乘后求和。

在这里插入图片描述

三、深度学习推荐系统

1. 改变神经网络的复杂度

1.1 AutoRec

是一个单隐藏层神经网络模型。
在这里插入图片描述

基本原理是利用协同过滤中的共现矩阵,完成物品向量或者用户向量的自编码。再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序。

AutoRec解决的问题是构建一个重建函数h(r;θ),使由该重建函数生成的评分向量与原评分向量的平方残差和最小。

如何进行推荐,以已于商品的AutoRec为例

当输入物品i的评分向量为r(i)时,模型的输出向量h(r(i);θ)就是所有用户对物品 i 的评分预测。那么,其中的第u维就是用户u对物品i的预测
在这里插入图片描述

通过遍历输入物品向量就可以得到用户u对所有物品的评分预测,进而根据评分预测排序得到推荐列表。
AutoRec表达能力不足。

1.2 Deep Crossing

特征分为三类:可被处理为one-hot或multi-hot向量的类别型特征,如用户搜索关键词;数值型特征,如点击率;需要进一步处理的特征,可被处理为数值型或者类别型特征。

模型包括:

(1)Embedding层。将稀疏的类别型特征转化为稠密,低维的Embedding向量。这里使用的是全连接,但已经有很多embedding方法。

(2)Stacking层。将经过稀疏类别向量经过embedding层产生的低维稠密向量,以及数值型特征拼接起来,形成新的包含全部特征的特征向量。

(3)Multiple Residual Units。通过多层残差网络对特征向量各个维度进行充分的交叉组合,使模型抓到更多非线性特征和组合特征的信息。

(4)Scoring层。是输出层,为了拟合优化目标,

在这里插入图片描述

2. 改变特征交叉方式

丰富深度学习中的特征交叉方式。

2.1 NeuralCF模型

原来的矩阵分解,产生用户和商品的隐向量可以看作一种embedding的方法,最终的scoring层就是将用户和物品隐向量进行内积操作得到相似度,即对评分的预测。

NeuralCF使用多层神经网络+输出层替代矩阵分解模型中简单的内积操作,使用户商品隐向量之间充分交叉,并引入更多非线性特征。
在这里插入图片描述

因此其实可以任意扩充用户和商品隐向量的互操作层,也可以将不同操作网络得到的特征向量拼接起来,交由输出层进行目标拟合。

优点:NeuralCF模型实际上提出了一个模型框架,它基于用户向量和物品向量这两个Embedding层,利用不同的互操作层进行特征的交叉组合,并且可以灵活地进行不同互操作层的拼接。

局限:基于协同过滤的思想,没有引入其他更多类型的特征。

2.2 PNN模型

相比于Deep Crossing模型,PNN使用乘积层代替了Deep Crossing模型中的Stacking层,即不同特征的Embedding向量不再是简单的拼接,而是用Product操作进行两两交互,更有针对性地回去特征之间的交叉信息。

相比于NeuralCF,PNN 模型的输入不仅包括用户和物品信息,还可以有更多不同形式、不同来源的特征,通过Embedding层的编码生成同样长度的稠密特征Embedding 向量。

PNN的乘积层由线性操作部分(对各特征向量进行线性拼接)和乘积操作部分(乘积交叉部分又分为内积操作和外积操作两种)组成。
在这里插入图片描述

PNN 的结构特点在于强调了特征 Embedding 向量之间的交叉方式是多样化的,相比于简单的交由全连接层进行无差别化的处理,PNN模型定义的内积和外积操作显然更有针对性地强调了不同特征之间的交互,从而让模型更容易捕获特征的交叉信息。但 PNN 模型同样存在着一些局限性,例如在外积操作的实际应用中,为了优化训练效率进行了大量的简化操作。此外,对所有特征进行无差别的交叉,在一定程度上忽略了原始特征向量中包含的有价值信息。

3. 组合模型

通过组合两种不同特点、优势互补的深度学习网络,提升模型的综合能力。

3.1 Wide&Deep模型

是由单层的wide部分和多层的Deep部分组成的混合面平行,Wide部分使模型具有较强的记忆能力,Deep部分使模型具有泛化能力。

记忆能力:可以被理解为模型直接学习并利用历史数据中物品或者特征的“共现频率”的能力

泛化能力:可以被理解为模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。

Wide&Deep模型把单输入层的Wide部分与由Embedding层和多隐层组成的Deep部分连接起来,一起输入最终的输出层。单层的Wide部分善于处理大量稀疏的 id类特征;Deep部分利用神经网络表达能力强的特点,进行深层的特征交叉,挖掘藏在特征背后的数据模式。最终,利用逻辑回归模型,输出层将 Wide部分和Deep部分组合起来,形成统一的模型

在这里插入图片描述

3.2 Deep&Cross模型

Deep&Cross使用Cross网络替换原来的Wide部分,Deep部分设计思路没有本质改变。

在这里插入图片描述

设计Cross网络的目的是增加特征之间的交互力度,使用多层交叉层对输入向量进行交叉。
在这里插入图片描述
在这里插入图片描述
Wide&Deep模型影响力很大:其抓住业务问题的本质,可以融合传统模型的记忆能力和深度学习模型的泛化能力;结构简单,容易在工程上实现。

4. FM模型的深度学习演化版本

4.1 FNN模型

embedding层的参数初始化过程中,往往采用随机初始化这种不包含任何先验信息的初始化方法,embedding层输入极端稀疏化,导致embedding层的收敛速度非常慢;而且embedding层的参数数量往往占整个神经网络参数数量大半以上。因此模型的收敛速度往往受限于embedding层。

FNN模型的解决思路:利用FM模型训练好的各特征隐向量初始化embedding层参数,相当于在初始化神经网络参数时,已经引入了有价值的先验信息。

在这里插入图片描述

H i d e n l a y e r   l 1 的输入 = t a n h ( w 1 z + b 1 ) Hiden layer\ l1的输入 = tanh(w_{1}z+b_{1}) Hidenlayer l1的输入=tanh(w1z+b1)

输入全连接层的输入Z=(W0,Z1,Z2,…Zn),其中wi是一阶参数,v_{ik}是第i个特征域中的第k维特征隐向量。

z i = ( w i , v i 1 , v i 2 , . . . , v i k ) z_{i} = (w_{i},v_{i1},v_{i2},...,v_{ik}) zi=(wi,vi1,vi2,...,vik)

每个隐向量是m维的。
在这里插入图片描述

初始化的embedding神经元域输入神经元之间的连接权重。

4.2 DeepFM模型

FNN模型把FM的训练结果作为初始化权重,并没有对神经网络的结构进行调整。DeepFM用FM替换原来的Wide部分,加强了浅层网络部分特征组合的能力。

左边的FM部分与右边的深度神经网络部分共享相同的Embedding层。**左侧的FM部分对不同的特征域的Embedding进行了两两交叉,也就是将Embedding向量当作原 FM 中的特征隐向量。最后将 FM的输出与 Deep 部分的输出一同输入最后的输出层,参与最后的目标拟合。**与Wide&Deep模型相比,DeepFM模型的改进主要是针对Wide&Deep模型的 Wide 部分不具备自动的特征组合能力的缺陷进行的。

在这里插入图片描述

4.3 NFM模型

原来的FM和FFM仅是一个二阶特征交叉的模型,因为组合爆炸问题,几乎不可能扩展到三阶以上,这限制了其表达能力。

NFM使用一个表达能力更强的函数替代原FM中二阶隐向量内积的部分。
在这里插入图片描述
以下是NFM的深度网络部分模型结构图,可以看到:就是在 Embedding 层和多层神经网络之间加入特征交叉池化层,在进行两两Embedding向量的元素积*向量对应维度元素相乘)操作后,对交叉特征向量取和,得到池化层的输出向量。再把该向量输入上层的多层全连接神经网络,进行进一步的交叉。
在这里插入图片描述

5. 注意力机制与推荐模型的融合

5.1 AFM模型

NFM模型将不同域的特征embedding向量经过特征交叉池化层后,将各交叉特征向量进行加和,没有区别的对待交叉特征,但是不同交叉特征对于结果的影响是不同的AFM模型引入注意力机制在特征交叉层和最终的输出层之间加入注意力网络,为每一个交叉特征提供不同的权重。

使用MLP来学习注意力权重。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.2 DIN模型

在计算一个用户u是否点击一个广告a时,模型的输入特征分为两部分,用户u的特征组和候选广告a的特征组,两者都有商品id和商铺id。用户特征组的商品id和商铺id是用户曾经点击过的商品id和商铺id集合,广告特征组中就是广告对应是商品和商铺id.

原来的Base模型中,用户特征组中的商品序列和商铺序列经过平均池化后就进入下一层神经网络,序列中的商品即没有区分重要程度,也和广告特征中的商品id没有关系。

但是在建模过程中投给不同特征的注意力应有不同,而且注意力得分计算应该和广告特征有关

在这里插入图片描述
利用候选商品和用户历史行为商品之间的相关性计算一个权重,注意力由同类信息相关性决定,商品id和商品id作用,商铺id和商铺id作用。
在这里插入图片描述
Vu是用户的Embedding向量,Va是候选广告商品的Embedding向量, Vi是用户u的第i次行为的Embedding向量。这里用户的行为就是浏览商品或店铺,因此行为的Embedding向量就是那次浏览的商品或店铺的Embedding向量。因为加入了注意力机制,所以Vu从过去Vi的加和变成了Vi的加权和, Vi的权重wi就由Vi与Va的关系决定,也就是g(Vi,Va),使用一个激活单元,即一个小的神经网络产生注意力得分。

6. DIEN——序列模型与推荐模型的融合

用序列模型模拟用户兴趣的进化过程。
用户的历史行为是一个随时间排序的序列,存在一定的前后依赖关系,而AFM或DIN的注意力得分是序列无关的。

上周一个用户在买篮球鞋,这周购物兴趣可能变成买一个机械键盘。序列信息的重要性:1)加强最近行为对下一次行为的预测影响,即用户近期购买机械键盘概率大于篮球鞋;2)序列模型能够学习到购买趋势的信息,一定程度上建模从篮球鞋到机械键盘的转移概率。
在这里插入图片描述

模型的结构为输入层+Embedding层+连接层+多层全连接神经网络+输出层的整体结构。模型的创新点在彩色的兴趣进化网络。

兴趣进化网络包括:
(1)行为序列层(浅绿色部分):把原始的id类行为序列转化为embedding行为序列。

(2)兴趣抽取层(米黄色部分):模拟用户兴趣迁移过程,抽取用户兴趣。由GRU组成,用户行为向量b(t)被进一步抽象化,形成了兴趣状态向量h(t)。

(3)兴趣进化层(浅红色部分):更有针对性地模拟与目标广告相关的兴趣进化过程。兴趣进化层的注意力得分的生成过程与DIN完全一致,都是当前状态向量和目标广告向量进行互作用的结果。引入AUGRU在原GRU的更新们结构上加入了注意力得分。

但是序列模型有较高的训练复杂度,在线上推断过程中串行推断,使其在模型服务过程中延迟交大。

四、Embedding技术在推荐系统中的应用

Embedding就是用一个低维稠密的向量表示一个对象,embedding向量能够表达相应对象的某些特征,同时向量之间的距离反映了对象之间的相似性。

Embedding技术对深度学习推荐系统很重要:

(1)推荐场景中大量用one-hot编码对类别、id型特征进行编码,导致样本特征向量极度稀疏,但深度学习结构特点使其不利于稀疏特征向量的处理,因此很多深度学习推荐模型基于embedding层将高维稀疏特征向量转换为低维稠密特征向量。

(2)Embedding本身是及其重要的特征向量。相比于传统的MF等产生的特征向量。embedding表达能力强,因此embedding特征向量往往和其他推荐系统特征连接后一同输入后续深度学习网络进行训练。

(3)**Embedding对物品、用户相似度计算是常用的推荐系统召回层技术。**在基于局部敏感哈希等快速最近邻搜索技术应用后,embedding可用于对海量备选物品进行快速初筛。

1. Word2vec

Wode2Vec是一个生成对词的向量表达的模型。

以Skip-gram模型为例,每个词都决定了相邻的词。
在这里插入图片描述

选取一个长度为2c+1(目标词前后各选c个词)的滑动窗口,从语料库中抽取一个句子,将滑动窗口由左至右滑动,每移动一次,窗口中的词组就形成了一个训练样本。有了训练样本,就可以着手定义优化目标了。既然每个词 wt都决定了相邻词wt+j,基于极大似然估计的方法,希望所有样本的条件概率p(wt+j|wt)之积最大,这里使用对数概率。因此,Word2vec的目标函数为:

在这里插入图片描述
作为一个多分类问题,条件概率p(wt+j|wt)可以利用softmax定义,使用两个词向量之间的内积表示语义的接近程度:
在这里插入图片描述

可以将上述过程转化为Word2Vec的神经网络结构,输入向量表达是输入层到隐层的权重矩阵 W V × N W_{V×N} WV×N,每一行对应的权重向量是一个词向量,向量 X = [ x 1 , x 2 , . . . , x V ] X=[x_{1},x_{2},...,x_{V}] X=[x1,x2,...,xV]是长度为V的one-hot特征向量,输入×隐层权重,相当于在输入向量矩阵总进行lookup。最后要得到的就是这个查找表 W V × N W_{V×N} WV×N
在这里插入图片描述

输出向量表达是隐层到输出层的权重矩阵 W N × V ′ W^{'}_{N×V} WN×V,

Y = [ y 1 , y 2 , . . . , y V ] Y=[y_{1},y_{2},...,y_{V}] Y=[y1,y2,...,yV]是经softmax输出的对每个词的条件概率。例如如果X中,xi=1,其余均为0,则 X T × W V × N × W N × V ′ = [ v I i T v O 1 , v I i T v O 2 , . . . , v I i T v O V ] X^{T}×W_{V×N}×W^{'}_{N×V}=[v^{T}_{Ii}v_{O1},v^{T}_{Ii}v_{O2},...,v^{T}_{Ii}v_{OV}] XT×WV×N×WN×V=[vIiTvO1,vIiTvO2,...,vIiTvOV],再经过softmax即为条件概率Y。
在这里插入图片描述
但是由于词的数量很大,则输出层神经单元的个数很多,计算量大,因此采用负采样。
在这里插入图片描述
从V个负样本中,选取K个负样本,K<<V。

2. Item2vec

2.1 基于Word2Vec思想的Item2vec

越来越多的Embedding方法可以被直接用于物品Embedding向量的生成,而用户Embedding 向量则更多通过行为历史中的物品 Embedding 平均或者聚类得到。利用用户向量和物品向量的相似性,可以直接在推荐系统的召回层快速得到候选集合,或在排序层直接用于最终推荐列表的排序

Word2Vec利用词序列生成词embedding,Item2Vec利用物品序列,由特定用户的浏览、购买等行为产生的历史行为的记录序列。

假设Item2vec中一个长度为K的用户历史记录为ω1,ω2,…,ωK,Item2vec的优化目标为:
在这里插入图片描述
Item2vec摒弃了时间窗口的概念,认为序列中任意两个物品都相关,因此在Item2vec的目标函数中可以看到,其是两两物品的对数概率的和,而不仅是时间窗口内物品的对数概率之和。

在优化目标定义好之后,Item2vec剩余的训练过程和最终物品Embedding的产生过程都与Word2vec完全一致,最终物品向量的查找表就是Word2vec中词向量的查找表。

2.2 广义的Item2vec

广义上,任何可以生成物品向量的方法都可以称为Item2vec。

例如下图的双塔模型:物品塔”起到的作用本质上是接收物品相关的特征向量。经过物品塔内的多层神经网络结构,最终生成一个多维的稠密向量。从Embedding的角度看,这个稠密向量其实就是物品的 Embedding 向量,只不过Embedding模型从 Word2vec 变成了更为复杂灵活的“物品塔”模型,输入特征由用户行为序列生成的one-hot特征向量,变成了可包含更多信息的、全面的物品特征向量。
在这里插入图片描述

Item2vec方法只能利用序列型数据,所以Item2vec在处理互联网场景下大量的网络化数据时往往显得捉襟见肘,这就是 Graph Embedding技术出现的动因。

3. Graph Embedding

Word2vec及其衍出的Item2vec是embedding技术的基础性方法,但二者都是建立在序列样本(用户行为序列)上。但是在互联网场景下,数据对象之间更多呈现图结构,例如由用户行为数据生成的物品关系图,以及由属性和实体组成的知识图谱。
在这里插入图片描述
Graph Embedding是一种对图结构中的节点进行Embedding编码的方法,最终生成的节点Embedding向量一般包含图的结构信息及附近节点的局部相似性信息。

3.1 DeepWalk

DeepWalk的主要思想是在由物品组成的图结构上进行随机游走,产生大量物品序列,然后将这些物品序列作为训练样本输入Word2vec进行训练,得到物品的Embedding。
在这里插入图片描述
(1)基于用户行为序列构建了物品关系图。可以看出,物品 A和B之间的边产生的原因是用户U1先后购买了物品A和物品B。如果后续产生了多条相同的有向边,则有向边的权重被加强。

(2)采用随机游走的方式随机选择起始点,重新产生物品序列。

(3)将这些物品序列输入 Word2vec 模型中,生成最终的物品Embedding向量。

Deepwalk中随机游走的跳转概率是跳转边的权重占所有相关出边权重之和的比例。
在这里插入图片描述

3.2 Node2vec

通过调整随机游走权重的方法使Graph Embedding的结果更倾向于体现网络的同质性或结构性

同质性:指的是距离相近的节点的Embedding应尽量相似。

结构性:指结构上相似的节点的Embedding应尽量相似。
在这里插入图片描述
为了使 Graph Embedding 的结果能够表达网络的“结构性”,在随机游走的过程中,需要让游走的过程更倾向于 BFS,因为 BFS 会更多地在当前节点的邻域中游走遍历,相当于对当前节点周边的网络结构进行一次“微观扫描”。当前节点是“局部中心节点”,还是“边缘节点”,或是“连接性节点”,其生成的序列包含的节点数量和顺序必然是不同的,从而让最终的Embedding抓取到更多结构性信息。为了表达“同质性”,需要让随机游走的过程更倾向于DFS,因为DFS更有可能通过多次跳转,游走到远方的节点上,但无论怎样,DFS的游走更大概率会在一个大的集团内部进行,这就使得一个集团或者社区内部的节点的Embedding更为相似,从而更多地表达网络的“同质性”。

Node2vec通过节点间的跳转概率控制BFS和DFS的倾向性。

下图展示的是从节点t跳到节点v,再从节点v跳转到周围各点的跳转概率。
在这里插入图片描述
从节点v跳转到下一个节点x的概率 π v x = α p q ( t , x ) ⋅ w v x \pi_{vx} = \alpha_{pq}(t,x)\cdot w_{vx} πvx=αpq(t,x)wvx,其中 w v x w_{vx} wvx是边vx的权重, d t x d_{tx} dtx是节点t到节点x的距离。参数p和q控制随机游走的倾向性,参数p被称为返回参数,p越小,随机游走回节点t的可能性越大,Node2vec就更注重表达网络的结构性。参数q被称为进出参数,q 越小,随机游走到远方节点的可能性越大,Node2vec 就更注重表达网络的同质性。
在这里插入图片描述
Node2vec 所体现的网络的同质性和结构性在推荐系统中可以被很直观的解释。同质性相同的物品很可能是同品类、同属性,或者经常被一同购买的商品,而结构性相同的物品则是各品类的爆款、各品类的最佳凑单商品等拥有类似趋势或者结构性属性的商品。

3.3 EGES

在DeepWalk生成的Graph Embedding基础上引入补充信息。单纯使用用户行为生成的物品相关图,固然可以生成物品的Embedding,但是如果遇到新加入的物品,或者没有过多互动信息的“长尾”物品,则推荐系统将出现严重的冷启动问题。为了使“冷启动”的商品获得“合理”的初始Embedding,阿里巴巴团队通过引入更多补充信息(side information)来丰富Embedding信息的来源,从而使没有历史行为记录的商品获得较合理的初始Embedding。

EGES对每个Embedding进行加权融合,从而融合一个物品的多个Embedding向量,生成物品最后的Embedding。图中的隐层表达(Hidden Representation层)就是对不同Embedding进行加权平均操作的层,将加权平均后的Embedding向量输入softmax层,通过梯度反向传播,求得每个Embedding的权重。
在这里插入图片描述

4. Embedding与深度学习推荐系统的结合

Embedding技术在推荐系统中的作用:
(1)在深度学习网络中作为Embedding层,完成从高维稀疏特征向量到低维稠密特征向量的转换。(2)作为预训练的Embedding特征向量,与其他特征向量连接后,一同输入深度学习网络进行训练。
(3)通过计算用户和物品的Embedding相似度,Embedding可以直接作为推荐系统的召回层或者召回策略之一

4.1 深度学习网络中的Embedding层

深度神经网络中的Embedding层是一个高维向量向低维向量的直接映射将 Embedding 层与整个深度学习网络整合后一同进行训练是理论上最优的选择,因为上层梯度可以直接反向传播到输入层,模型整体是自洽的。但这样做的缺点是显而易见的,Embedding 层输入向量的维度往往很大,导致整个Embedding层的参数数量巨大,而且输入向量稀疏,只有跟非零连接embedding参数更新,因此Embedding会拖慢整个神经网络的训练。

因此,很多深度学习推荐系统放弃Embedding层端到端的训练,用预训练Embedding层的方式代替。

4.2 Embedding的预训练方法

Embedding的训练往往独立于深度学习网络进行。在得到稀疏特征的稠密表达之后,再与其他特征一起输入神经网络进行训练。例如 FNN 模型。它将FM模型训练得到的各特征隐向量作为Embedding层的初始化权重,从而加快了整个网络的收敛速度。在 FNN 模型的原始实现中,整个梯度下降过程还是会更新 Embedding 的权重,如果希望进一步加快网络的收敛速度,还可以采用“固定Embedding层权重,仅更新上层神经网络权重”的方法,这是更彻底的Embedding预训练方法。

Graph Embedding技术使Embedding本身的表达能力进一步增强,而且能够将各类补充信息全部融入Embedding中,使Embedding成为非常有价值的推荐系统特征。通常,Graph Embedding的训练过程只能独立于推荐模型进行,这使得Embedding预训练成为在深度学习推荐系统领域更受青睐的Embedding训练方法。诚然,将Embedding过程与深度神经网络的训练过程割裂会损失一定的信息,但训练过程的独立也带来了训练灵活性的提升。举例来说,**物品或用户的Embedding是比较稳定的(因为用户的兴趣、物品的属性不可能在几天内发生巨大的变化),Embedding的训练频率其实不需要很高,甚至可以降低到周的级别,但上层神经网络为了尽快抓住最新的数据整体趋势信息,往往需要高频训练甚至实时训练。使用不同的训练频率更新Embedding模型和神经网络模型,**是训练开销和模型效果二者之间权衡后的最优方案。

4.3 Embedding作为推荐系统召回层

Embedding自身表达能力的增强使得直接利用Embedding生成推荐列表成了可行的选择。因此,利用Embedding向量的相似性,将Embedding作为推荐系统召回层。
在这里插入图片描述

模型的输出层是softmax层,该模型本质上是一个多分类模型,预测目标是用户观看了哪个视频,因此 softmax层的输入是经过三层 ReLU全连接层生成的用户Embedding输出向量是用户观看每一个视频的概率分布。由于输出向量的每一维对应了一个视频,该维对应的 softmax 层列向量就是物品 Embedding。通过模型的离线训练,可以最终得到每个用户的Embedding和物品Embedding

在模型部署过程中,没有必要部署整个深度神经网络来完成从原始特征向量到最终输出的预测过程,只需要将用户Embedding和物品Embedding存储到线上内存数据库,通过内积运算再排序的方法就可以得到物品的排序,再通过取序列中Top N的物品即可得到召回的候选集合,这就是利用Embedding作为召回层的过程。
但是整体候选集很大,遍历内积操作也会消耗大量实践,因此可以使用Embedding的快速索引方法,更快的召回候选集合。

4. 局部敏感哈希

推荐系统召回层的主要功能是快速地将待推荐物品的候选集从十万、百万量级的规模减小到几千甚至几百量级的规模,避免将全部候选物品直接输入深度学习模型造成的计算资源浪费和预测延迟问题。
召回与用户向量最相似的物品Embedding向量的过程其实是在一个向量空间内搜索最近邻的过程。
局部敏感哈希的基本思想是让相邻的点落入一个桶中,这样在最近邻搜索时,仅需要在一个桶内,或者相邻的几个桶内的元素中进行搜索即可。

在欧式空间中,将高维空间的点映射到低维空间,原本相近的点在低维空间中肯定依然相近,但原本远离的点则有一定概率变成相近的点。利用低维空间可以保留高维空间相近距离关系的性质,就可以构造局部敏感哈希“桶”。

例如对于Embedding向量使用内积操作构建局部敏感哈希桶,假设 v是高维空间中的k维Embedding向量,x是随机生成的k维映射向量。如所示,内积操作可将v映射到一维空间,成为一个数值,衡量向量之间相似性的各种操作,例如余弦相似度,欧式距离等都可作为哈希函数。
在这里插入图片描述
即使一维空间也会保留一定的相似性,因此对哈希函数h(v)分组:
在这里插入图片描述

如果只采用一个哈希函数分桶,可能会出现相近点误判,因此可以采用m个哈希函数同时进行分桶,同时掉进m个哈希函数同一桶两点,相似概率提高。

因此计算Top k召回,局部敏感哈希步骤:

(1)离线状态,所有向量经哈希函数映射到对应索引值;

(2)输入一个向量,用同样哈希函数计算哈希值,找到哈希位置所有向量

(3)与(2)找到所有向量计算距离,筛选最近的k个。

五、多角度审视推荐系统

1. 推荐系统的特征工程

原则:保留有用信息,摒弃冗余信息。(因为保留所有信息的存储空间太大,必然涉及信息的损失;一些冗余无用的信息还会损害模型的泛化能力)

1.1 推荐系统常用特征

(1)用户行为数据

包含显性反馈行为(点赞、评分等)和隐性反馈行为(点击,加入购物车等)。

在具体的用户行为类特征的处理上,往往有两种方式:一种是将代表用户行为的物品 id 序列转换成 multi-hot 向量,将其作为特征向量;另一种是预先训练好物品的 Embedding,再通过平均或者类似于DIN模型注意力机制的方法生成历史行为Embedding向量,将其作为特征向量。

(2)用户关系数据

是人与人之间连接的记录。

可以用用户关系作为物品召回;用户关系建立关系图,使用Graph Embedding生成用户物品Embedding;

(3)物品用户属性、标签类数据

在推荐系统中使用属性、标签类数据,一般是通过multi-hot编码的方式将其转换成特征向量,一些重要的属性标签类特征也可以先转换成 Embedding,再输入推荐模型。

(4)内容类数据

内容类数据是大段的描述型文字、图片、视频。内容类数据无法直接转换成推荐系统可以“消化”的特征,需要通过自然语言处理、计算机视觉等技术手段提取关键内容特征,再输入推荐系统。

(5)上下文信息

描述推荐行为产生的场景的信息,例如时间、地点、月份等。

(6)统计类特征

统计类特征是指通过统计方法计算出的特征,例如历史 CTR、历史 CVR、物品热门程度、物品流行程度等。统计类特征一般是连续型特征,仅需经过标准化归一化等处理就可以直接输入推荐系统进行训练。

(7)组合类特征

组合类特征是指将不同特征进行组合后生成的新特征。随着深度学习推荐系统的提出,组合类特征可以交给模型自动处理。

1.2 常用特征处理方法

(1)连续型特征

归一化:统一各特征的量纲

离散化:确定分位数形式将原来连续值分桶,防止连续值带来过拟合及特征分布不均匀

加非线性函数处理:直接把原来的特征通过非线性函数做变换,然后把原来的特征及变换后的特征一起加入模型进行训练的过程,捕获特征和优化目标之间非线性关系。
(2)类别型特征

one-hot或multi-hot;

将类别型特征编码呈Embedding向量,再和其他特征组合,形成最终输入特征向量。

2. 推荐系统召回层的策略

2.1 多路召回策略

采用不同的策略、特征或简单模型,分别召回一部分候选集,然后把候选集混合在一起供后续排序模型使用。

多路召回策略”是在“计算速度”和“召回率”之间进行权衡的结果。其中,各简单策略保证候选集的快速召回,从不同角度设计的策略保证召回率接近理想的状态,不至于损害排序效果。

虽然多路召回是实用的工程方法,但从策略选择到候选集大小参数的调整都需要人工参与,策略之间的信息也是割裂的,无法综合考虑不同策略对一个物品的影响。

2.2 基于Embedding的召回

多路召回中使用“兴趣标签”“热门度”“流行趋势”“物品属性”等信息都可以作为Embedding召回方法中的附加信息(side information)融合进最终的Embedding向量中(例如EGES)。就相当于在利用Embedding召回的过程中,考虑到了多路召回的多种策略。Embedding召回的另一个优势在于评分的连续性。多路召回中不同召回策略产生的相似度、热度等分值不具备可比性,无法据此决定每个召回策略放回候选集的大小。Embedding召回可以把Embedding间的相似度作为唯一的判断标准,因此可以随意限定召回的候选集大小。

3. 推荐系统的实时性

3.1 推荐系统“特征”的实时性

(1)客户端实时特征

客户端缓存 session 内部的行为,将其作为与上下文特征同样的实时特征传给推荐服务器,那么推荐模型就能够实时地得到 session 内部的行为特征,进行实时的推荐。

(2)流计算平台的准实时特征处理。由于每次需要等待并处理一小批日志,流计算平台并非完全实时的平台,但它的优势是能够进行一些简单的统计类特征的计算。流计算平台计算出的特征可以立刻存入特征数据库供推荐模型使用。虽然无法实时地根据用户行为改变用户结果,但分钟级别的延迟基本可以保证推荐系统能够准实时地引入用户的近期行为。

(3)分布式批处理平台的全量特征处理

总延迟往往达到小时级别,已经无法进行所谓的“实时”推荐,因此更多的是保证推荐系统特征的全面性,以便在用户下次登录时进行更准确的推荐。

3.2 推荐系统模型的实时性

而模型的实时性则是希望更快地抓住全局层面的新数据模式,发现新的趋势和相关性。以某电商网站“双11”的大量促销活动为例,特征的实时性会根据用户最近的行为更快地发现用户可能感兴趣的商品,但绝对不会发现一个刚刚流行起来的爆款商品、一个刚刚开始的促销活动,以及与该用户相似的人群最新的偏好。要发现这类全局性的数据变化,需要实时地更新推荐模型。

(1)全量更新

模型利用某时间段内的所有训练样本进行训练,实时性很差。

(2)增量更新

仅将新加入的样本“喂”给模型进行增量训练。增量更新的缺点是:增量更新的模型往往无法找到全局最优点,因此在实际的推荐系统中,经常采用增量更新与全局更新相结合的方式,在进行了几轮增量更新后,在业务量较小的时间窗口进行全局更新,纠正模型在增量更新过程中积累的误差

(3)在线学习

在获得一个新的样本的同时更新模型。

(4)局部更新

降低训练效率低的部分的更新频率,提高训练效率高的部分的更新频率。常见于Embedding层—+神经网络,采用 Embedding 层单独预训练,Embedding层以上的模型部分高频更新的混合策略。

4. 冷启动的解决方法

4.1 基于规则的冷启动

在用户冷启动场景下,可以使用“热门排行榜”“最近流行趋势”“最高评分”等榜单作为默认的推荐列表;利用点击率等目标构建一个用户属性的决策树,在每个决策树的叶节点建立冷启动榜单,在新用户完成注册后,根据用户有限的注册信息,寻找决策树上对应的叶节点榜单,完成用户冷启动过程。

在物品冷启动场景下,可以根据一些规则找到该物品的相似物品,利用相似物品的推荐逻辑完成物品的冷启动过程,例如对物品进行聚类,位于同一类中的商品有类似的推荐规则。

4.2 丰富冷启动过程中可获得的用户和物品特征

基于规则的推荐和推荐系统“主模型”是割裂的,改进的主要方法就是在模型中加入更多用户或物品的属性特征,而非历史数据特征。

4.3 利用主动学习、迁移学习和“探索与利用”机制

(1)主动学习

主动学习不仅利用已有的数据集进行建模,而且可以“主动”发现哪些数据是最急需的,主动向外界发出询问,获得反馈,从而加速整个学习的过程,生成更全面的模型。

(2)迁移学习

(3)“探索与利用”机制

探索新数据和利用旧数据之间进行平衡,使系统既能利用旧数据进行推荐,达到推荐系统的商业目标,又能高效地探索冷启动的物品是否是“优质”物品,使冷启动物品获得曝光的倾向,快速收集冷启动数据。推荐用户喜欢的内容和探索用户新的兴趣。

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

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

相关文章

数学建模-多元线性回归分析

回归分析介绍和分类 数据分类及数据的来源 线性回归 四种模型的解释、虚拟变量的设置以及交互项的解释 3个定量&#xff0c;7个定类插入&#xff0c;表格&#xff0c;包含标题&#xff0c;标题换黑色 可以右键&#xff0c;复制表格&#xff0c;excel中设置三线表 ,gen(A)是参数…

Linux 部署Vue+Spring Boot项目

部署Vue Spring Boot项目 安装redis wget http://download.redis.io/releases/redis-4.0.8.tar.gz tar -zxvf redis-4.0.8.tar.gz yum install gcc-c make make install如果出现下面的问题&#xff1a; yum install tcl make testredis-server myconifg/redis.conf输入客户端…

WordPress作为可扩展的企业级解决方案

网络商业世界就像一片汪洋大海&#xff0c;大型企业是大海中最大的鱼。然而&#xff0c;只因为你比其他人都大&#xff0c;并不意味着你不能逆流而上。相反&#xff0c;企业业务面临的挑战更大&#xff0c;对网站的技术要求更高。 多年来&#xff0c;大型公司通常依赖最昂贵的…

不用显示器,不用鼠标和键盘,让我们用主机远程访问OK3588的桌面

不用显示器&#xff0c;不用鼠标和键盘&#xff0c;让我们用主机远程访问OK3588的桌面 MobaXterm软件介绍串口终端运行命令MobaXterm访问开发板 MobaXterm软件介绍 MobaXterm是一款增强型终端软件&#xff0c;对于Windows平台上的程序员、网络管理员和开发者是一款极其优秀的工…

用 pesq 给 torchaudio 读取的音频数据打分

用torchaudio读取的音频文件&#xff0c;在输入pesq之前需要进行格式处理与转换。 import torchaudio from pesq import pesq# 读取音频文件 audio_clean, src torchaudio.load(./audio/NOIZEUS/clean/sp01.wav) audio_0dB, sr0 torchaudio.load(./audio/NOIZEUS/bable/0dB/…

基于FPGA的按键消抖

文章目录 基于FPGA的按键消抖一、按键消抖原理二、按键消抖代码三、仿真代码编写四&#xff1a;总结 基于FPGA的按键消抖 一、按键消抖原理 按键抖动&#xff1a;按键抖动通常的按键所用开关为机械弹性开关&#xff0c;当机械触点断开、闭合时&#xff0c;由于机械触点的弹性…

wampserver的mysql8.0版本在my.ini文件中加入skip_grant_tables无效等一系列问题。

背景&#xff1a;安装了新的wampserver之后&#xff0c;php版本mysql8.0.31&#xff0c;想打开phpadmin可视化管理页面&#xff0c;后来忘记密码了&#xff0c;报错&#xff1a;ERROR 1045 (28000): Access denied for user rootlocalhost (using password: No)&#xff0c;只能…

Ubuntu 更改内核启动顺序

ubuntu服务器系统中用run包安装了某卡的驱动&#xff0c;后来又安装了docker&#xff0c;重启后&#xff0c;驱动失效。 经分析 安装docker时&#xff0c;又把新的linux内核安装上了。驱动是安装在旧内核上。 然会重新安装驱动&#xff0c;失败&#xff0c;确认是因为驱动只支…

MDK版本坑error: A1167E: Invalid line start

移植threadx时对于.s的汇编文件报了大量错误&#xff0c;到文件里查看是汇编文件中的注释使用的C的注释方法&#xff0c;导致大量报错 MDK官网查到原因&#xff0c;一个是版本问题&#xff0c;一个是设置问题&#xff0c; https://developer.arm.com/documentation/ka002247…

isaac sim添加孔网格

isaac sim仿真和其它仿真实际上一样&#xff0c;对于孔的仿真&#xff0c;是没那么简单的 在此记录一下踩过的坑 1&#xff0c;首先&#xff0c;你需要在soildworks中将你的孔画出来&#xff0c;并导出stl 2&#xff0c;你可以在win10中使用3D画图查看孔的网格&#xff0c;看…

ylb-接口4投资排行榜

总览&#xff1a; 1、使用Redis存储投资信息 2、Redis常量类 在common模块constants包&#xff0c;创建一个Redis常量类&#xff08;RedisKey&#xff09;&#xff1a; package com.bjpowernode.common.constants;public class RedisKey {/*投资排行榜*/public static fin…

实现本地缓存-caffeine

目录 实现caffeine cache CacheManager Caffeine配置说明 创建自定义配置类 配置缓存管理器 编写自动提示配置文件 测试使用 创建测试配置实体类 创建测试配置类 创建注解扫描的测试实体 创建单元测试类进行测试 实现caffeine cache CacheManager SimpleCacheManag…

3.8 Bootstrap 面包屑导航(Breadcrumbs)

文章目录 Bootstrap 面包屑导航&#xff08;Breadcrumbs&#xff09; Bootstrap 面包屑导航&#xff08;Breadcrumbs&#xff09; 面包屑导航&#xff08;Breadcrumbs&#xff09;是一种基于网站层次信息的显示方式。以博客为例&#xff0c;面包屑导航可以显示发布日期、类别或…

Unity打包窗口化放大、缩小、拖拽功能、无边框设置 C#

Unity打包Windows窗口实现放大、缩小、拖拽、无边框 文章目录 Unity打包Windows窗口实现放大、缩小、拖拽、无边框前言一、引入 user32.dll二、使用步骤1.引入库2.功能封装3.效果图如下&#xff0c;绑定自定义按钮 总结 前言 Unity无边框设置、窗口化放大、缩小、拖拽 提示&am…

Ceph

Ceph简介 Ceph使用C语言开发&#xff0c;是一个开放、自我修复和自我管理的开源分布式存储系统。具有高扩展性、高性能、高可靠性的优点。Ceph目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack&#xff0c;Kubernetes都可与Ceph整合以支持虚拟机镜像的后端存储…

TCP缓冲区和4次挥手调优

目录 如何修改TCP缓冲区才能兼顾并发数量与传输速度&#xff1f; 四次挥手性能调优 1,为什么建立连接是三次握手&#xff0c;而关闭连接需要四次挥手呢? 2.四次挥手的流程,注意5个状态 3.主动方优化 4,被动方调优 最后 如何修改TCP缓冲区才能兼顾并发数量与传输速度&…

APP外包开发中的H5框架

在开发APP的技术中&#xff0c;除了原生开发外也可以使用H5框架来开发。原生开发的特点是质量高&#xff0c;用户体验更好&#xff0c;但成本高&#xff0c;适用于对质量要求高的APP项目。H5框架的特点是通用性较强&#xff0c;对开发人员的要求相对较低&#xff0c;成本也低&a…

【运维】 第02讲(上):企业 Nginx 高性能优化配置实战总结

本课时讲解关于 Nginx 配置优化的内容&#xff0c;相信对于 Nginx 你一定并不陌生&#xff0c;它是一款轻量级的开源 Web 服务及代理程序。在 Nginx 出现之前市场上主流两款 Web 服务&#xff0c;一款是 Windows 系统上的 IIS&#xff0c;另外一款是 Linux 系统上的 Apache。而…

新手如何自学PostgreSQL(PG)

如果你是一个新手&#xff0c;想要自学PostgreSQL&#xff0c;下面是一些步骤和资源&#xff0c;可以帮助你入门&#xff1a; ①了解数据库基础知识&#xff1a;在开始学习PostgreSQL之前&#xff0c;建议你先了解一些数据库的基础概念和术语&#xff0c;例如表、列、行、SQL查…

【统计函数3】——excel常见函数

相关数据资料来源于网易 函数一览&#xff1a; rank、rand、randbetween、floor、int rank函数: 求某单元格在某区域内的排名 RANK(数值,引用区域,降序0/升序1)范围多指定&#xff1a; 分开的范围之间可用逗号隔开&#xff0c;最后再用一个小括号括起来。F4可以快速锁定行和列。…