【推荐系统简介以及其链路流程】

文章目录

  • 1、数据收集和预处理
    • 1.1、推荐系统的数据架构
  • 2、用户(user)画像和物品(item)画像的构建
  • 3、特征工程
    • 3.1、特征提取的框架
      • 3.1.1、物料画像
      • 3.1.2、用户画像
      • 3.1.3、交叉特征
      • 3.1.4、偏差特征
    • 3.2、数值特征的处理
      • 3.2.1、缺失值的处理(使用均值或中位数替代)
      • 3.2.2、标准化
      • 3.2.3、数据平滑与消偏
      • 3.2.4、分桶离散化
    • 3.3、类别特征的处理
      • 3.3.1、映射表模式
      • 3.3.2、特征哈希(Feature Hashing)
  • 4、推荐算法
    • 4.1、推荐算法概览
    • 4.2、推荐算法中的Embedding
  • 5、推荐列表生成
  • 6、常见的推荐产品形态
  • 7、搜索、推荐、广告的区别

  • 推荐系统是一项(软件)服务,可以生成个性化的推荐列表。作为面向用户的服务,怎么展示、怎么跟用户交互、交互过程中的遇到的各种场景问题都是需要解决的。
  • 同时,需要注意的是,推荐模型算法并非推荐系统的全部,推荐系统需要各个模块有效地协作在一起:
  • 日志系统收集用户日志,从而为推荐系统提供原始数据;
  • 大数据框架、流式计算系统从原始数据中提取信息,可供推荐模型作为输入;
  • 在线学习系统要实时更新推荐模型,即进行动态训练更新:因为推荐算法面对的是数以亿计的用户,每个用户的行为记录时动态变化的;待推荐的物料(Item)也是十分庞大且是动态更新的。因此对推理的实时性要求很高,而且需要动态更新模型。
  • A/B实验系统评估模型效果等;
  • 因此,作为推荐算法工程师,要从推荐系统的全局角度思考问题,不要只局限于算法模型上。

1、数据收集和预处理

  • 用户行为数据:记录用户与系统交互的行为,如浏览、点击、购买、播放、搜索、收藏、点赞、评论、转发等。
  • 用户特征数据:包括用户的基本信息、偏好设置、社交网络信息等。
  • 物品(Item)特征数据:物品的属性信息,如类别、标签、价格等。
  • 有结构化的的数据,也有非结构化的文本、图片、音频、视频数据等:
  • 例如在给Item打标签的过程中,可以直接人工打上一些类别标签;也可以由内容理解算法根据封面、标题等自动完成(例如:”豆瓣评分9.3,最恐怖的喜剧电影—楚门的世界“;可以打的标签:”电影,喜剧,真人秀,金凯瑞“等)
  • 将所有Item组织到一起,在简单的推荐系统中,可以建立倒排索引(类似哈希表,键为标签,值为打上这个标签的所有Item);建立的倒排索引后续可用于召回排序等
  • 数据预处理包括清洗(去除噪声和异常值)、归一化、缺失值处理等步骤。

1.1、推荐系统的数据架构

  • 推荐系统中所涉及到的数据包含User和Item的大量数据,而互联网的大数据系统中极其复杂,为了应对这种复杂性,大多使用了Lambda架构。推荐系统中存在的难点如下:

1)要统计过去一段时间内内的历史数据,但互联网系统每天的日志量以TB计,要回溯的历史越长,计算量也就越大
2)时间要求非常高,线上预测时,从接收用户请求到返回推荐结果的总耗时要控制在几十毫秒,而还需要留大部分时间在模型推理上,因此可供数据处理和特征计算的时间会很短
3)冷数据和热数据的问题。冷数据(Cold Data)是指回溯在Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)上存储的那部分日志;但由于HDFS只支持批量读写的性质,还会存在一部分历史数据未来得及组成日志,未落盘到HDFS上,这部分数据为热数据(Hot Data)。例如:下午3点想获取历史数据,但HDFS的日志只保留到下午1点,1点至3点的数据为热数据。

  • Lambda架构可以应对这些问题,主要包括以下几点:
    在这里插入图片描述

1)将数据请求拆分为冷数据、热数据两个子请求;
2)针对冷数据的子请求,由离线层批量完成计算,近线层缓存并提供快速查询;
3)针对热数据的子请求,由在线层基于流式算法进行处理;
4)汇总从冷、热数据分别获得的子结果,得到最终的计算结果

  • 例如,以计算每个视频的CTR为例,拆分为两个子请求:

1)在冷数据上计算长期、稳定的CTR_cold
2)在热数据上计算短期、当前的CTR_hot

  • 离线层:可以启动一个定时任务,统计每个视频每个小时内的曝光数、点击数,要统计一周的CTR,汇总168(24*7)个中间结果即可。以上定时批量计算的任务构成了离线层,可以采用Hadoop、Spark、Flink等大数据框架完成,多个任务之间的协同通过Airflow完成
  • 近线层:HDFS是一种擅长批量读写,但随机读写效率极低的存储介质,因此不利于线上快速读取。为了提高在冷数据的查询效率,可利用近线层,将离线层批量计算的结果存入Cassandra、Redis等键—值型数据库(可利用每个视频的ID作为键,进行快速检索)
  • 在线层:通过Storm、Flink等流式计算框架,对接用户的行为数据流,不等数据落地,可以直接进行分析计算,结果可缓存在Redis的数据库中,在线层可以处理热数据,并不会占用太多资源

2、用户(user)画像和物品(item)画像的构建

  • 用户(user)画像:对用户相关信息的客观描述。包含用户自身所带的属性,比如年龄、身高、体重、性别、学历、家庭组成、职业等等。再加上用户本身的行为数据
  • 物品(item)画像:根据物品的属性和历史表现构建物品画像。例如物品的品类、价格、产地、颜色。另外,图片、音频、视频中,我们通过深度学习等技术也是可以提取关键词来作为画像特征的。
  • 场景化数据:是用户在对物品进行操作时所处的环境及状态的特征。例如用户所在地理位置、当时的时间等等

所需要准备的数据:数值数据、类别数据、文本数据、图片数据、音视频数据等5类结构化或非结构化的数据。

3、特征工程

  • 特征工程:就是将原始的各种来源、各种类型的数据加工成合适的形式,以输入到推荐模型中,使其发挥更大的威力。
  • 有一种流行观点认为,深度学习能够使特征工程自动化,这种想法在推荐系统中是不合适的:
    1)DNN虽然可以拟合复杂的函数关系,但如果不进行合适的特征工程,很容易会出现各种训练的难点,例如梯度消失、梯度爆炸、过拟合、常见和罕见特征训练不均衡不充分等问题;
    2)就算使用DNN的隐式的、自动化的特征工程,其也会存在一定代价,例如耗时。DIN的Attention和SIM的搜索,都是比较复杂的计算,耗时与候选集规模成正比。而特征工程可以将计算压力从线上转移到线下,离线提取特征,供召回、粗排等环节的在线训练与预测。
  • 特征提取:从原始数据中提取对推荐有帮助的特征。
  • 特征选择:从众多特征中选出对模型最有用的特征,以提高模型效率和性能。
    在这里插入图片描述

3.1、特征提取的框架

  • 以下介绍几种类型的特征的提取框架,可以保证每种特征提取不重不漏,包括:物料画像、用户画像、交叉特征、偏差特征

Filed:为同一类Featue的集合,例如手机品牌
Feature: 具体的特征向量或特征值,例如苹果、华为、小米等

3.1.1、物料画像

  • 待推荐的Item为物料,可以提取的物料特征包括:

1、物料属性信息

  • 是最直接的信息,物料入库时即可获取
  • 视频推荐场景:视频作者、作者等级、作者关注量、投稿分区、视频标题与简介、封面、时长等
  • 电商场景:商品标题与简介、封面图片、所属商铺、品牌、价格、折扣等信息
  • 值得注意的是,互联网大型推荐系统中往往会把物料的Item ID作为重要的特征,可以在物料侧提供给个性化的信息

如何理解?
1)Item ID作为类别特征,其特征空间的维度可能由几十、上百万,即高维稀疏的。但是之所以要将其作为一种特征,可以很简单直接的理解为,那些销量好的、播放好的、或者与用户非常相关的Item(例如数码爱好者,只要一推“iPhone 15 …”的ID就很可能点击),其ID本身就可以作为非常有用的信息,模型只需要记住,就可以取得不错的效果;
2)互联网大厂中,训练数据很多,因此Item ID作为特征还是有必要的

2、物料的类别与标签等静态画像(更加具体化的信息)

  • 通过分析物料内容得到的间接信息
  • 例如可以通过NLP算法(例如BERT)分析物料的标题、简介、评论等;通过CV算法(CNN)分析物料的封面或者视频的关键帧
  • 分析的结果可以构成物料的静态画像(三个等级的类别特征):

1)一级类别:是一个Field,例如:体育、电影、音乐等
2)二级类别:体育可以细分为足球、篮球等,…
3)标签:更细粒度的刻画物料,例如,篮球类别下又可以包含NBA、乔丹等

  • 以上的内容理解算法一般会输出物料属于某个类别或标签的概率,例如{电影:0.9,音乐:0.3}

3、Embedding方法

  • 上述利用CNN或BERT等算法得到的类别或标签的特征,会存在一个问题,即特征空间很稀疏,可能由上万个标签,而每个物料只包含某几个。
  • 因此Embedding的思路是将这些模型的某一层的输出作为隐式的Embedding向量,其为物料特征输入到推荐模型中。

4、物料的动态画像(历史信息)

  • 指的是物料的历史统计信息,是物料侧最重要的特征
  • 一般可以从两个维度进行特征的提取:
    1)时间粒度:全生命周期、过去一周、过去1天、过去1小时,视频的短播记录、长播记录
    2)统计对象:CTR、平均播放时长、平均消费时长等
  • 值得注意的是以下两点:

1)这些后验统计数据肯定存在一定偏差,一个物料的后验指标好不代表推荐给任何人都好(尤其是在召回粗排环节),在精排环节,动态画像还是有参考意义的,因为这些物料经过召回粗排,大部分还是跟当前用户相关的
2)可能不太利于新物料的冷启动。对于新物料,其后验指标是不存在或者不好的,可能导致获得较少的曝光机会。

5、用户与物料的交互历史信息(即用户给物料反向打标签)

  • 可以将消费过/观看过某个物料的用户身上的标签传递并累积到这个物料上,以丰富物料画像

3.1.2、用户画像

  • 可以分为用户的静态画像和动态画像两大类,如下:

1、静态画像

  • 就是用户的年龄、性别、职业、籍贯、等等比较稳定的数据信息
  • 但其实,实践中这些信息的作用十分有限:对于老用户,其历史行为记录足以反映其兴趣爱好,不需要这些静态画像;对于新用户,其作用也不明显:1)如果新老用户共用一个精排模型,由于老用户的样本多,会主导训练过程,也就很难重视这些对新用户友好的静态画像特征;2)如果新用户使用特定模型,又可能没有足够的数据进行训练。
  • 但是,值得注意的是,用户ID(User ID)是一个非常重要的特征,与Item ID一样,可以提供用户侧细粒度的个性化信息,但会有一定缺点:

1)User ID会覆盖上亿用户,特征空间维度很大,但现代大型推荐系统采用了Parameter Server分布式存储模型参数,可以缓解上述问题;
2)活跃用户的User ID更加有用,大型推荐系统中还是以存量老用户为主,因此User ID还是一个很重要的特征

2、动态画像(用户的历史行为信息)

  • 最简单的动态画像:将用户一段时间内交互过的每个物料映射为Embedding特征,再通过最大池化或平均池化聚合为一个向量

  • 再复杂一点,可以像DIN或SIM一样,通过注意力机制,以不同的权重获取用户兴趣向量

  • 这种方式的缺点是必须在线进行,会导致耗时很长,与序列长度*候选集规模成正比
    在这里插入图片描述

  • 因此,可以采用Hadoop、Spark等大数据平台,实现“离线提取,在线查询”的方法,耗时短,适合于召回、粗排等环节,但由于是离线提取,可能不能够及时捕捉用户的兴趣迁移

  • 具体来讲,可以从6个维度来获取用户行为向量:

1)用户粒度:单个用户或一群用户
2)时间粒度:比如过去1周、1小时,过去一百次曝光等
3)物料属性:比如视频的类别和标签、作者等
4)动作反馈类型:比如正向的:点赞、收藏、转发;负向的:不感兴趣、点踩
5)统计对象:比如次数、时长、金额、点击率
6)统计方法:加权、平均等

3.1.3、交叉特征

  • 深度学习模型中可以自动完成特征交叉,但进行人工的特征交叉也会有一定作用,也需要进行了解
  • 可以分为笛卡尔积和内积两种
    1)笛卡尔积:将两个Field的Feature进行简单的两两组合
    2)内积:将映射后的向量进行内积计算,得到的可以是物料的相关程度、用户对物料的匹配程度等

3.1.4、偏差特征

  • 推荐系统中固有存在偏差:即用户点击的未必是他喜欢的,未点击的也不代表用户一定不喜欢
  • 最常见的是位置偏差:
    在这里插入图片描述
  • 解决位置偏差的方法,一种方法是更严格地定义正负样本,例如:Above Click规则,只有位于被点击物料上方的未点击物料,才能纳入训练样本
    在这里插入图片描述
  • 另一种方法是将位置信息作为特征输入模型中,通过一个线性层接入模型,不要与正常特征一起输入模型,类似残差结构。
  • 由于输入的伪特征值(由于预测推理时无法知道具体位置,可以统一填充为0,认为都是最醒目的位置)经过线性层的输出相等,因此这种模式并不会影响真实排序。
  • 具体来讲,训练时,将真实位置信息输入模型;推理时,输入统一的伪特征值。之所以使用这种模式,是因为训练时增加旁路分支,可以根据位置信息更新原本模型的参数,从而引入偏差特征。
  • 上述详见《互联网大厂推荐算法实战》P24。
    在这里插入图片描述

3.2、数值特征的处理

  • 直接将数值特征输入模型,很可能导致训练不收敛,因此需要经过一定的预处理:缺失值的处理、标准化、数据平滑与消偏、分桶离散化等

3.2.1、缺失值的处理(使用均值或中位数替代)

  • 可以使用所有样本、或者某个类别的样本中的均值或中位数替代缺失值
  • 可以训练一个模型来预测缺失值

3.2.2、标准化

  • 标准化的目的是将不同量纲、不同取值范围的数值特征都压缩到同一个数值范围内,从而使训练更稳定。
  • 最常用的标准化为z-score标准化,即减均值、除标准差
  • 推荐系统中常见的是一些长尾分布的特征,可以先进行开方、取对数等再进行z-score标准化
    在这里插入图片描述

3.2.3、数据平滑与消偏

  • 例如,使用小样本计算CTR等,计算结果常常不可信,一件商品曝光了一次并被购买,购买了为100%,但肯定不可靠
  • 因此这种可以采用威尔逊区间平滑
  • 之前提到的位置偏差,也可以采用CoEC(Click over Expected Click)替代CTR来衡量物料的受欢迎程度。
  • 详见《互联网大厂推荐算法实战》P27。

3.2.4、分桶离散化

  • 类别特征可以更好地反映非线性关系,因此在实践中,可以将实数特征离散化为类别特征
  • 离散方法就是分桶,即将实数特征划分为不同区间,即划分bin,看实数特征落入哪个bin,就将bin号作为类别特征
  • 有三种实现方法:

1)等宽分桶:将特征值域均分为N等份
2)等频分桶:分完之后的各个bin内样本数大致相等(可以使用N个分位数)
3)模型分桶:例如使用决策树,其叶子节点的编号为离散化结果

3.3、类别特征的处理

  • 推荐算法的特点之一就是特征空间主要由高维、稀疏的类别特征构成,即输入的特征向量维度高,且大部分为0,即稀疏。

1)推荐系统的基础是物料画像、用户画像。高维:有上万个标签;稀疏:每个Item可能只包含十几个标签。User ID、Item ID也都是类别特征
2)线上工程实现时更偏爱类别特征,因为稀疏的特性可以实现非零存储、排零计算、减少线上开销,提升预测实时性。以LR模型为例:

  • 使用实数特征: l o g i t = w T x + b logit = w^Tx+b logit=wTx+b
  • 使用类别特征: l o g i t = b + ∑ j ∈ i ∣ x i ≠ 0 w j logit = b + \sum_{j\in {i|x_i\ne 0}}{w_j} logit=b+jixi=0wj
    使用类别特征时,只需要将非零特征对应的权重相加即可,不需要乘法运算,同时非零值很少(由于稀疏),运算速度更快。
  • 在实践中,需要将类别特征映射为固定维度的Embedding特征向量,可通过映射表模式或者特征哈希模式(分别用于小型推荐系统和大型推荐系统中)

3.3.1、映射表模式

  • 建立一个字符串(类别特征)到数字的映射表,映射后的整数是Embedding矩阵中的行号,接口获取对应的Embedding向量
  • 这种方式需要额外维护一个映射表,维护成本较高,因为需要进行更新,因此大型推荐系统中更多使用特征哈希模式
    在这里插入图片描述

3.3.2、特征哈希(Feature Hashing)

  • 特征哈希(Feature Hashing)将输入的字符串映射为一个0-N的整数x,N是Embedding矩阵的总行数,具体来讲,x是先映射为哈希值后再对N取余数得到的
  • 这种方式可以使若干Field共享一个特征哈希模块与对应的Embedding矩阵,而不需要让各个Field拥有独立的Embeddi矩阵,利用率更高,使大型推荐模型的主流方法,是互联网大厂映射类别特征的标准手段。
    在这里插入图片描述

4、推荐算法

4.1、推荐算法概览

  • 召回:当面对大量的用户和内容时,通常会首先通过召回策略,将数百万量级的内容缩小到万量级。这一步是为了筛选出可能与用户兴趣相匹配的初步候选内容。
  • 在推荐系统链路中越靠前的环节,其面对的候选集规模越大。因此召回算法需要采用技术较简单、精度稍差而速度较快的算法
  • 在推荐系统中,召回模块主要采用的是”离线计算+在线缓存“的模式实现对上百万规模的候选集的快速筛选:1)离线处理:百万级的候选Item在离线状态处理好,并存入数据库中建立索引,例如之前的倒排索引;2)在线召回:只需花费索引中的检索时间,以满足实时性的要求
  • 召回模块一般采用多路召回的方式。
  • 需要注意的是:召回与排序(特别是精排)在设计目的、输入数据规模、应用场景上有着天壤之别,二者区别很大
  • 过滤:对于某些内容不可重复消费的领域进行过滤,例如:实时性较强的新闻,当用户已经对某内容进行了曝光或点击后,这些内容将不再被推送到用户面前;需要考虑用户的地理位置和时间,推荐的外卖商家不可能太远,也要考虑到当前的时间;生鲜海鲜类商品在时效性、季节性等方面都需要考虑。这一步骤确保了用户接收到的推荐内容的新颖性和多样性。
  • 粗排+精排:对经过召回和过滤后的内容进行排序。这一步通常基于各种复杂的规则和算法,将百量级的内容按照某种顺序进行排列,以便按照优先级推送给用户。
  • 粗排在召回之后,主要是将万级规模筛选到千级规模,用于后面的精排;
  • 主流粗排模型仍使用”离线计算+在线缓存“的模式,因此和召回一样,不能使用用户信息与物料信息交叉的特征与结构。
  • 精排是从上游筛选出的千级规模的物料中,精选出几十个最符合用户兴趣的物料进行个性化的推荐:设计重点就是提升预测精度,因此会采用更复杂的模型,且重点在于用户信息和物料信息充分的交叉,因此会采用更复杂的交叉特征和结构。
  • 混排/重排:为了避免推荐内容越来越窄,导致用户兴趣受到限制,混排步骤会对精排后的结果进行一定的修改。例如,通过控制某一类型内容的出现频次,确保推荐结果的多样性和平衡性。
    在这里插入图片描述

4.2、推荐算法中的Embedding

  • 从非常简略和概述的角度来讲,推荐算法的核心问题在于记忆与扩展记忆,简单来说就是希望能记住常见、高频出现的模式,即记住历史上出现的所有模式;扩展,简单来说就是能够挖掘出潜在的、低频小众的模式,即扩展出用户喜欢的新模式
  • 然而,传统的推荐算法强于记忆,弱于扩展。例如:根据评分卡,利用LR进行CTR的预测,这种算法记忆性强,但难以扩展出新模式
  • 因此,可以引入深度学习中的Embedding操作,即将类别变量映射为稠密向量,可以引入更多潜在抽象的信息,例如:先把每个样本的类别特征编码为one-hot向量,可通过简单的线性层映射为固定维度的Embedding向量
  • 实际操作中,常见的两种embedding方式有:共享和独占

1)共享:简单来说,就是共用同一个Embedding层,例如召回的双塔模型;排序中的FM(因子分解机)。

由于共享,会导致一个缺点,多目标训练时,同一套Embedding可能会互相干扰。例如:同时优化点击率、购买率、转发率等,某些重要特征如果只使用同一个Embedding层,各个目标之间可能会相互干扰,因此常采用独占方式,即使用多个Embedding层,例如MMOE多目标优化的算法
在这里插入图片描述

2)独占:简单来说,就是对于不同的目标,使用不同的Embedding层,例如:FFM(域感知因子分解机)、CAN(Co-Action Network)

FFM:是FM的改进版本,原本的FM在特征交叉时,其每个特征的Embedding权重是共享的,因为每个特征与不同特征交叉时使用的是同一个 v i v_i vi。而FFM是:每个特征与不同特征交叉时,根据对方特征所属的Filed使用不同的Embedding权重
CAN:将 E i t e m E_{item} Eitem拆分为K段,每段子向量reshape为小的Embedding层的权重矩阵 W i W_i Wi,用户特征 E u s e r E_{user} Euser输入到多个层中得到特征交叉后的结果。
在这里插入图片描述

5、推荐列表生成

  • 根据模型预测的用户对物品的兴趣程度,生成个性化的推荐列表。
  • 以及后续的在线评估与优化迭代。

6、常见的推荐产品形态

  • 热门/榜单推荐、个性化推荐、信息流推荐、物品关联推荐

1) 热门推荐

  • 有两种实现方式:一种是所有用户推荐的都是完全一样的,计算全局的TopN物品(比如根据播放量排序的TopN列表;或者基于多种策略获得的TopN列表)然后推荐给用户;另一种是先计算全局的TopM物品,然后根据用户的兴趣特征对这M个物品基于用户兴趣排序,将排在前面的N个物品推荐给用户(相当于取了个子集)
  • 可以作为其他推荐(比如个性化推荐)的冷启动策略,即当一个用户是新用户时,我们无法知道他的兴趣点,这时我们可以利用热门推荐作为该用户的初始推荐

2)个性化推荐

  • 最常见的推荐形式,基于内容和协同过滤的推荐算法

3)信息流推荐

  • 信息流推荐其实是个性化推荐的一种特例,只不过是采用实时信息流的方式与用户进行交互的。例如抖音快手这种

4)物品关联推荐

  • 物品关联推荐是用户在浏览物品详情页时,或者浏览后退出详情页时,关联一批相似或者相关的物品列表。

7、搜索、推荐、广告的区别

  • 搜广推是互联网业务的三驾马车,推荐和搜索负责留住用户,生产流量;而广告负责将流量变现。
  • 搜索推荐都是针对用户本身进行的;而广告针对的是用户和广告商。其本质都是针对用户需求找到最匹配的信息
  • 从算法本身来讲,三者很相似,都遵循”召回模块初筛,排序模块精选“
  • 从数据架构上,三者都遵循Lambda架构
  • 推荐和搜索最大的区别在于用户表达需求的方式不同:搜索中,用户主动输入查询语句,这是最重要的信息来源。因此搜索中最重要的特征是查询语句和物料信息的交叉;而推荐中是用户信息和物料信息的交叉
  • 推搜与广告的区别:
  • 广告的目的是为了变现,因此涉及到了用户、广告主、平台三方的利益,其复杂度更高,优化难度更高;
  • 广告涉及到的转化链条很长(例如APP的广告,从点击广告、下载安装注册、成功下单才是一次完整转化),因此其正样本少,特征稀疏;
  • 最重要的是预测出的CTR/CVR要参与广告费用的结算,其预测精度要求更准确。

参考链接:
《互联网大厂推荐算法实战》,赵传霖

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

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

相关文章

数据更新-插入元组(VALUES)、修改属性(SET)、删除元组(DELETE)

一、插入元组 1、插入单个元组&#xff08;使用的是VALUES子句&#xff09; &#xff08;1&#xff09;语句格式 INSERT INTO <表名> 【&#xff08;<属性名1【&#xff0c;<属性名2>&#xff0c;...】&#xff09;】 VALUES &#xff08;<常量1>【&a…

后端项目实战--瑞吉外卖项目软件说明书

瑞吉外卖项目软件说明书 一、项目概述 瑞吉外卖项目是一个外卖服务平台&#xff0c;用户可以通过该平台浏览餐厅菜单、下单、支付以及追踪订单状态。产品原型就是一款产品成型之前的一个简单的框架&#xff0c;就是将页面的排版布局展现出来&#xff0c;使产品得初步构思有一…

有哪些常用ORM框架

ORM&#xff08;Object-Relational Mapping&#xff0c;对象关系映射&#xff09;是一种编程技术&#xff0c;它允许开发者使用面向对象的编程语言来操作关系型数据库。ORM的主要目的是将数据库中的数据表映射到编程语言中的对象&#xff0c;从而使得开发者可以使用对象的方式来…

Android面试题之ActivityManagerService的启动流程

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 SystemServer启动 创建SystemContex 用于加载系统相关的资源&#xff0c;比如theme&#xff0c;android命名空间下的资源等创建引导服务&#…

02 Pytorch_NLP

1. N-gram n决定关联信息 2. TF____IDF TF&#xff1a;词频 IDF&#xff1a;逆向序列 假如&#xff1a;TF * IDF 就是当前的文件&#xff0c;那么乘积反而更大&#xff01; 因为它只出现在 特定的文章中&#xff01; TF-IDF 简介 TF-IDF&#xff08;Term Frequency-Inverse…

css入门基础

目录 1. CSS前景 2.什么是CSS 3.CSS发展史 4.CSS的3种样式格式 5.CSS 的语法 6.CSS的字体样式 7.选择器类型 8.CSS外观属性 1. CSS前景 从HTML被发明开始&#xff0c;样式就以各种形式存在。不同的浏览器结合它们各自的样式语言为用户提供页面效果的控制。最初的HTML只…

专业学习|博弈论-博弈论概述

&#xff08;一&#xff09;认识博弈论&#xff1a;解析复杂决策与策略 &#xff08;1&#xff09;认识博弈 博弈论广泛应用于分析个体间因利益冲突而产生的决策问题。通过构建不同模型来探讨如经贸关系、军事威胁等问题&#xff0c;旨在寻找均衡解并提供新知&#xff0c;相较…

mathematical-expression-cpp | C++ 数学表达式解析库

数学表达式-cpp Switch to English Document 介绍 本框架是一种针对数学公式解析的有效工具&#xff0c;能够通过C的API解析包含嵌套函数&#xff0c;包含函数&#xff0c;数列步长累加等数学公式&#xff0c;返回值是一个数值的结果对象&#xff0c;同时也可以进行比较运算…

idea在空工程中添加新模块并测试的步骤

ServicesTest是空的工程&#xff0c;没有pom文件。现在需要在ServicesTest目录下添加新模块作为新的工程&#xff0c;目的是写一下别的技术功能。 原先目录结构&#xff0c;ServicesTest是空的工程&#xff0c;没有pom文件。下面的几个模块是新的工程&#xff0c;相互独立。 1.…

LLM大模型的挑战与未来,挑战大但是机遇更大!

大模型必然是未来很长一段时间我们工作生活的一部分&#xff0c;而对于这样一个与我们生活高度同频互动的“大家伙”&#xff0c;除了性能、效率、成本等问题外&#xff0c;大规模语言模型的安全问题几乎是大模型所面对的所有挑战之中的重中之重&#xff0c;机器幻觉是大模型目…

C++ (week6、7):Linux系统编程4:网络

文章目录 四、网络和网络编程(一) 网络协议1.基础概念2.网络协议和网络模型&#xff1a;OSI七层模型、TCP/IP四层协议3.TCP协议(1)TCP协议的特点(2)TCP协议的首部格式(3)TCP状态图(4)为什么要三次握手&#xff1f;2次行不行&#xff1f;(5)为什么要四次挥手&#xff1f;(6)快速…

软件测试分类介绍

大家好&#xff0c;软件测试是确保软件质量的关键环节之一&#xff0c;通过对软件系统的各个方面进行测试&#xff0c;可以发现和解决潜在的问题&#xff0c;提高软件的稳定性、可靠性和用户满意度。在软件测试领域&#xff0c;根据测试的目的、方法和对象的不同&#xff0c;可…

Python业务规则引擎库之rules使用详解

概要 在软件开发中,业务规则引擎是一种重要的工具,可以帮助开发者将复杂的业务逻辑从代码中解耦出来,并以更直观的方式进行管理和维护。rules 是一个轻量级的 Python 库,专门用于定义和执行业务规则。它提供了一种简洁且强大的方式来管理应用程序中的规则逻辑,使代码更加…

C++ 引用 - 引用的特点|在优化程序上的作用

引用是C 的一个别名机制&#xff0c;所谓别名&#xff0c;就是同一块内存共用多个名字&#xff0c;每个名字都指的是这片空间&#xff0c;通过这些别名都能访问到同样的一块空间。 就像鲁迅和周树人是同一个人。 ——鲁迅 一、引用的基本用法 int a 10; int& ref a; // …

Django序列化器详解:普通序列化器与模型序列化器的选择与运用

系列文章目录 Django入门全攻略&#xff1a;从零搭建你的第一个Web项目Django ORM入门指南&#xff1a;从概念到实践&#xff0c;掌握模型创建、迁移与视图操作Django ORM实战&#xff1a;模型字段与元选项配置&#xff0c;以及链式过滤与QF查询详解Django ORM深度游&#xff…

充电桩出口:跨国贸易的机遇与挑战之旅

在新能源浪潮席卷全球的今天&#xff0c;充电桩作为电动汽车的“加油站”&#xff0c;正逐渐从幕后走向台前。 而在这场跨国贸易的舞台上&#xff0c;充电桩的出口之路&#xff0c;既充满了诱人的机遇&#xff0c;也伴随着不小的挑战。 机遇&#xff0c;源自日益增长的全球市场…

免费听歌,电脑或手机免费听歌,落雪音乐安装详细步骤

近年来&#xff0c;由于资本的力量导致各种收费&#xff0c;看个电视想听歌都必须要付费了&#xff0c;否则你听不完整&#xff0c;吃相非常难看&#xff0c;特别是电视&#xff0c;吸血鬼式吸收各种会员费&#xff0c;各种APP也是铺天盖地的广告&#xff0c;渐渐迷失了自我&am…

两个螺旋面的交线

已知轴截面齿形&#xff0c;先得到螺旋面 然后在计算出对应的端面齿形 在用端面齿形来计算和另一个螺旋面的相交曲线。 三维验证这个方法可行&#xff01;

喜大普奔,AI绘画SD3终于开源了,AI绘画又添新利器!【附模型下载和安装包】

sd3终于开源了&#xff01; 没错就是stablediffusion 3.0版本&#xff01;这是stability迄今为止最先进最复杂图像生成模型。 这次开源的是medium版本&#xff0c;总共有三个型号的模型&#xff0c;下面我们来详细的说下sd3的功能特点以及不同型号区别、安装方法&#xff01;…