Airbnb系列三《Managing Diversity in Airbnb Search》 搜索多样性

news2025/1/14 23:15:39

abstract

搜索系统中一个长期的问题是结果多样性。从产品角度讲,给用户多种多样的选择,有助于提升用户体验及业务指标。
多样性需求和模型的目标是相矛盾的,因为传统ctr模型是 point wise,只看单个相关性不管相邻之间item差异。
论文解决多样性的问题,从启发式的方法开始,最后介绍了结合RNN 的创新性的 DL 方法。

多样性问题背景

多样性问题背景:发现对一些热门location的排序展示结果,top几个都非常相似,在可见的listing属性上,如价格、类型、容量、位置等。

这种现象对那些没有在top中找到满意结果的用户不利,因为他们可能会觉得,怎么推出来的都是相似的,并且还不满意,就会减少搜索欲望。

DNN 会给相似属性的item打相似分,所以排序结果上相似属性的item会集中在一块。

下图是Airbnb房源库中多种风格的item 示例。

在这里插入图片描述

为了对精排结果进行二次排序以保证item多样性,在排序架构上增加了重排模块(Second Stage Ranker)

在这里插入图片描述

重排方法1 贪心Ranker

MMR

https://blog.csdn.net/m0_62577727/article/details/125585630

在这里插入图片描述

MRR更适合推荐业务,在搜索业务的重排序阶段不太适合,很多推荐业务还是会用 MMR来做初始的多样性 baseline

💡 MMR算法思想:每次采取贪心策略,生成 topK结果列表。第一次从 topN中选取第一个加到候选,第二次 从topN中选择和当前候选相似度最低同时和query匹配度最高的物品,这两个条件怎么平衡呢,就是 λ去调节。直到选出K个 重排集合

MLR (Mean Listing Relevance)

在这里插入图片描述

几点不同:

  1. 想要在多样性中考虑 positional bias,item相关性 = book概率 * 位置衰减函数权重

    在这里插入图片描述

  2. 和 MMR 相比,衡量多样性部分,不是用 max而是用 mean。

    1. mean会使得多样性的惩罚更加平滑。
    2. MMR有个假设前提,用户只对一个类别中的一个item感兴趣,适合推荐,因为推荐可以推不同类别,但是search结果的范围更小,所以这个限制在搜索上过于严格

实践中,N 至少是一个页面大小,即最终呈现给用户的一页listing是多样性重排之后的

  1. 注意之前的MRR是 -,这里是 +,因为之前是 相似度函数,越大越相似,所以是-。 这里是距离函数,距离越小越相似。

💡 但是不管是 MLR 还是 MRR,都有一个问题:如何表示一个 listing的向量?

listing向量表示

当然可以用深度学习方法,抽取item embedding向量,但是这种方式过于黑盒,不太适合于业务初期。所以这里 airbnb 用listing可解释属性表示成一个向量,如 [价格、经纬度位置、容量、浴室数量、房间数量、房间类型], 确定了用哪些属性之后,这个向量的长度就是固定的。其中属性特征可以分为两类:

  • 连续性特征:计算均值和方差,进行标准归一化,上一篇论文讲过的手段
  • 类别特征:one-hot

表示后的向量 通过tsne 二维平面聚类可视化,kmeans分成6个类,然后分析每一类的 Listing属性,每一堆确实有共性属性。之所以用可解释属性,没有用word2vec等embedding向量表示,是因为这些属性有业务含义,比较好解释。

在这里插入图片描述

选出来的多样性好坏如何衡量

MLR算法,是来选出多样性重排的 topK,那这 topK的列表该怎么衡量好不好呢?思路就是把这 topK 列表和理想(上帝视角)的多样性列表分布进行对比,那么
如何找到理想(上帝视角)的多样性分布?airbnb选取了两个方面的多样性来衡量:

  1. Location diversity 地理位置多样性
  2. Price diversityzh 价格多样性

假设找到了这个上帝视角的多样性分布,那么如何对比当前列表和理想列表的差距呢?对比差距当然是用距离函数了,这里用的是 Hellinger 距离,专门用于衡量两个离散概率分布相似性,并且值域是 [0,1]

在这里插入图片描述

总体验证思路:

  1. 找到这次query请求对应的理想localtion分布/price分布
  2. 计算当前重排列表 topk的 localtion分布/price分布
  3. 用Hellinger距离计算1和2两个分布的距离,距离越小越接近理想分布,多样性越好

接下来用这三步来看下是如何验证多样性列表好坏的,个人觉得这里的做法还是挺有意思的?

location diversity

上帝视角的理想分布必然是不存在,回到现实还是要通过历史搜索日志去构建,比较历史搜索中含有用户的真实反馈,这些反馈信息是实打实的。

  1. 找到这次query请求对应的理想price分布
    1. KD-Tree 把地球划分为listing密度大概相同 的叶节点,每个叶节点就是一个桶
    2. 对过去的一个具体搜索Q,book了 listingA,则在 listingA的叶节点中放入Q,计数加1
    3. 不断重复2,则每个历史query都会落在一个桶中
    4. 递归合并数量不满足某个阈值的叶节点,直到超过这个阈值
    5. 最终每个query都落入一个桶中,并且这个桶中的 Listing数和命中的query数是固定的
    6. 假设总共ABCDE 5个桶,每个桶的理想概率=命中query数/ listing 数,则可以得到5个理想概率 [20/100, 10/30, 5/40, 6/50, 10/20],这表示什么意思呢?就是对于任意一个列表,落入每个桶的比例已经知道了并且这个比例就是理想比例,这个比例构成的向量就是在地里位置维度的多样性分布
  2. 计算当前重排列表的localtion分布
    1. 线上query请求 -> 精排 [L1, L2, … L1000] -> 重排 [L2, L9, L1, … L100] 得到一个长为100的重排列表
    2. 计算当前列表落入每个桶的概率,得到5个概率值,假设是
      [20/100, 0/100, 40/100, 10/100, 30/100],表示这个列表落入A桶20个,B桶0个,以此类推
  3. 计算 1和2两个概率分布的 Hellinger 距离,距离越小说明重排的地理位置多样性越好

price diversity

理想的价格多样性应该符号正态分布,以某个期望价格为中心,同时具有多个其它区间价格。并且期望价格肯定是不同的query条件不一样的,这里用一个回归神经网络对不同query条件进行预测得到期望价格

  1. 找到这次query请求对应的理想price分布:通过回归神经网络预测出来
    1. 训练:训练数据是 query侧特征,比如人数、价格、地理位置、住几晚等,label是这次搜索产生book的listing的价格。
    2. 预测:输入是线上的query侧特征,输出是这此query的理想期望价格 Ep
      有了期望价格怎么找理想区间?因为Ep上下误差范围内都可以认为是理想的。其实就是人工指定超参数来控制,定义最小值最大值,pmin= α * EP, pmax = β * Ep
      这个[pmin, pmax],就表示对于当前query,理想的listing的价格应该处于这个区间。
    3. 怎么找其它的多样性区间以及理想概率?根据paper描述,个人猜测应该是这样的:
      1. 比如 Ep=100,pmin=80, pmax=120, 则区间大小=40
      2. 找左右其它区间,如 …, [40, 80], [80, 120], [120, 160], … ,假设有10个价格区间
      3. 每个区间做归一化 (x-Ep)/Ep, 如 [80, 120] -> [-0.2, 0.2]
      4. 正态分布计算落入每个区间的概率,如落入理想区间 [-0.2, 0.2]的概率是可以算出来的,这样就得到10个概率分布向量,这个向量就是 理想价格多样性分布
  2. 计算当前重排列表的price分布
    1. 线上query请求 -> 精排 [L1, L2, … L1000] -> 重排 [L2, L9, L1, … L100] 得到一个长为100的重排列表
    2. 计算当前列表落入每个价格区间的概率,得到10个概率值,假设是 [2/100, 6/100, 10/100, 10/100, 30/100,...],表示这个列表落入第一个区间桶2个,第二个区间6个,以此类推
  3. 计算 1和2两个概率分布的 Hellinger 距离,距离越小说明重排的价格多样性越好

下图是10个区间的理想价格多样性分布

在这里插入图片描述

重排方法2 Location diversity ranker

同时优化多个多样性比较难,所以集中在比较重要的地理位置的多样性上,构造新的 Loss,同时考虑 了地理位置多样性和相关性:

在这里插入图片描述

  • S: 精排的打分列表

  • Lq:是对于query Q在KD-Tree节点的理想位置分布

  • Ls:S中的每个候选,在 KD-Tree上的先验分布

  • H : 用重排序结果和理想地理分布的距离,表示重排结果的多样性得分。两个离散距离后验概率列表的 Hellinger distance,范围是[0,1]

  • NDCGf:把精排阶段分数作为 ground truth label, 用来衡量当前重排 列表 S 和 精排打分排序后的列表 S‘的 NDCG差值,衡量和精排相关性的偏离程度。如 精排序是 [1,2,3,4,5], 重排后是 [3,2,1,4,5],范围是[0,1]

    以精排阶段分数作为ground truth label, 来衡量重排序结果和精排结果的偏差,表示重排结果的相关性得分

  • λ l o c \lambda_{loc} λloc 是超参数来平衡相关性和多样性,值越大,多样性惩罚越大,越在意相关性

  • loss值越小越好,说明越接近理想分布同时相关性最好

如何求解 loss?

标准的 SGD方法不能优化,因为地理位置表示的映射是固定的,导致 Lq 和 Ls都是固定的,没办法通过梯度下降优化。

用模拟退火算法,多次迭代进化。每次迭代通过交换重排序结果列表中两个item的位置生成新的结果,如果交换后, loss下降则接受这次交互,否则以一定概率接受。

重排方法3 Combined Loss Function

前面几种方法,计算 relevance 和 diversity 相分离,限制了重排序的效果。为了更好的建模 listing 、query 和 diversity 目标间的复杂交互关系,作者提出了将多个目标融合到一个可以用SGD优化的损失函数的方法

基于以下假设,将重排序优化问题,转化为优化生成结果和目标结果多样性分布的Hellinger距离:

在这里插入图片描述

几个需要明确的前提:

  • 每个训练样本包含 N 个 listing
  • 地理位置的目标分布是离散化的,对应 K 个可能的 bucket
  • 每个listing到bucket的映射是固定的
  • 最小化 TopT listing 的目标分布与经验分布之间的Hellinger distance,这里T <= N。

但是,直接使用Hellinger距离作为loss function是不可行的:因为每个listing对应的bucket是常数,和DNN的权重没有直接依赖,所以无法用SGD优化。然后设计了一个巧妙的替代loss,总体思想是,对于每个桶而言,我们可以有个二元判别器,来判别候选房宿分布中的这个桶里面的值是不是超过了理想分布中这个桶的固定值。

设计替代loss

如果item集合中,落入某个bucket的 item数量超过理想分布阈值,就缩小该bucket的item的打分,这个item的打分时 DNN可以控制

基于此思想,定义总体损失函数为相关性的 Pairwise loss 、位置多样性loss、价格多样性loss 的和 L h = L r + L d l + L d p L_h = L_r + L_dl + L_dp Lh=Lr+Ldl+Ldp,其中相关性 loss L r L_r Lr
保证了重排序结果的相关性,位置分布多样性loss L d l L_{dl} Ldl 、价格分布loss L d p L_{dp} Ldp, 保证了重排序结果的多样性。

在这里插入图片描述

某个item所属的bucket中listing数超过一定阈值,则说明该桶的相关性比较大了,因此优化方向将使得bucket中的listing数量减少并向目标阈值移动

假设 batch=1, num_listing=3, num_bucket = 5,总共有 ABCDE个切好的bucket

  1. 输入变量:

    1. top_rank_logits: 重排网络预测分数 shape=[1, 3]
    2. bucket_vals: shape=[1,3,5] 当前列表每个item落入的bucket的 one-hot表示
    3. target_dist: query理想分布, shape[1, 5],value都是0-1的小数, 如

    [ 0.2, 0.3, 0.4, 0.1, 0.5] 表示大数据统计的 每个桶应该落入的理想比例

  2. distribution: [1, 5] ,重排列表落入每个桶的listing的比例

    1. ABCDE五个桶,3个listing分布属于 [A, A, C], 则桶分布=[2/3, 0, 1/3, 0, 0]
  3. direction_mask: [1, 5],当前distribution 是否小于 target_distribution,对应每个listing所属的桶是否超标了,0是超标,1是没有。

    [2/3, 0, 1/3, 0, 0] < [0.2, 0.3, 0.4, 0.1, 0.5]

  4. mask_tiled:mask=[B, N] → [B, N, L] → [B, L, N]。比如 [0,1,0,1,0] 是BD 两个桶超标了,则这个向量复制3份,也就是每个 listing 都知道这个信息

    [0,1,0,1,0, 0,1,0,1,0, 0,1,0,1,0]# [B, L, N], 每个listing都知道当前列表,哪个桶超标了
    [ [0,1,0,1,0,],
      [0,1,0,1,0,],
    	[0,1,0,1,0,]
    ]
    
  5. sg_label:

    1. filtered_bucket:没说是啥,但应该是把一个列表里的多个1过滤掉只留一个1,因为后面要进行 sum变成2分类的问题。从物理意义上来说,只要有一个桶超标,就说明这个列表是需要多样性的

    2. filtered_buckets * mask_tile → [1, 3, 5],每个值是0或者1

    3. axis=2 进行 reduce_sum → [1, 3] ,每个值是0或者1,表示这个列表是否有在地里位置上超标

      [ [0,1,0,1,0,],
        [0,1,0,1,0,],
      	[0,1,0,1,0,]
      ] 
      - > [1, 1,1] 表示当前列表不满足位置多样性了,有的桶落入过多item了
      
  6. sqdiff: [1, 5] ,当前 distribution和理想 distribution之间的 Hellinger 距离,

    1. [B, N, L] → [B, L, N] ,每个listing知道每个桶的 H 距离
  7. target_weight:

    1. sq_diff* bucket_vals,每个listing 知道自己落入的那个桶的 H 距离, buckt_val是 one_hot,所以没有落入的桶都成0 了
    2. reduce_sum, shape=[B, L]。结果就是每个 item所落入的 bucket的 H 距离。shape=[1, 3]
  8. sg_loss:label=sg_label, logit = top_rank_logit 算交叉熵loss,然后再乘 target_weight

使用这种方法,我们现在可以定义一个整体损失,它是标准pairwise损失,位置分布损失和价格分布损失的线性组合。然后,我们使用此组合损失函数训练了第二阶段模型。

重排方法4 利用上下文特征

我们的目标是使模型学习与给定查询相关的结果,但是缺少的一个关键数据是检索集本身的上下文。例如,很可能预订了一个listing,因为它是热门区域中仍然可用的少数几个listing之一

把搜索本身的上下文信息编码到模型中,作者加入了一些上下文特征,例如目标位置空闲房子数量,query对应的top K结果的价格、位置、房间类型、可容纳客人数的平均值和方差等信息。

在模型中加入人工的聚合特征,mean and variance of the price, location, room type, and person capacity,期望模型能利用这些特征学到列表维度的上下文信息。

重排方法5 query context embedding

非常吃基建设施,两个模型,利用上下文信息来做re-rank,这对架构通路其实要求较高

4的方法使用的人为定义的上下文特征,使用手工聚合可能不是代表查询上下文的最佳方法,因为缺乏一定准确度和泛化性,为了更好的建模 query context特征,使用深度学习 RNN来建模 query对应的精排结果(Learning a deep listwise context model for ranking refinement, SIGIR 2018),表示为 listwise context

最后一个时刻的 cell的输出状态 hn,作为 整个列表的 sequence emebedding,用来概括该列表的全部信息。

重排序模型H的结构,实际是有两个模型,一个模型用来生成 query context embedding,一个模型

1 生成 query context embedding的网络

在这里插入图片描述

  1. 左下方 LSTM 计算 context embedding。输入是精排 TopN结果 (L),输出是 hN
  2. 右下方DNN,输入是 query和user feature (Q & U)
  3. 将 LSTM 的 sequence embedding和 右侧网络的输出进行拼接
  4. 拼接后加一层全连接,输出为 query context embedding,用来表示理想的 listing embedding

这个网络只是为了得到最终的 query context embedding

2 重排序打分的网络 H

用下面的网络对 listing 列表进行重排序打分

在这里插入图片描述

此时的模型可以学习到匹配模式,如果一个listing是 query附近流行区域里的唯一一个,模型会对这个listing进行强化升级。

我们使用了pairwise损失函数,该函数具有将预订listing embedding移动到更接近查询上下文嵌入的效果,同时将未预订的listing推开

下面代码是 pairwise loss的实现,和 aribnb 2020年paper Improving Deep Learning For Airbnb Search 一样。
在这里插入图片描述

  • query_context_embedding: L Q U
  • 这里用两个子网络表示双塔结构,其实只有一个 网络。只不过输入特征不同,训练数据是很多个pair样本 <booked listing, non-booked listing>,每个pair的label 都是1,两个房源的特征分别输入到同一个网络,得到两个分数。
  • 重排打分时,将精排列表的每个 listing输入到网络中,得到一个基于 欧式距离的 Logit分数,这个分数代表了当前房源与理想房源之间的差距,差距越小越好,所以 loss越小越好。所以线上排序时应该是按 Logit分数从小到大排序。

distance_diff 是未预定listing到理想分布的距离-预定listing到理想分布的距离,越大说明前者是大的后者是小的,因此是越大越好,大是希望看到的。因此logit_diff是 越接近1越好

实验结果

offline

在这里插入图片描述

baseline 是 只用精排模型,exp是加了各个重排方法

线上实验效果

在这里插入图片描述

  • Greedy Ranker:持平/略负,分析是过于多样性
  • Second Stage Location Diversity Ranker: 正向,尤其是对于新用户,booking +1%,中国的用户+3.6%(之前的策略更倾向于城中心的,现在这个也有其他位置的item
  • Combined Loss Function: 持平,出现了一些极端价格,新用户 booking 降低比较多,推测是对于价格敏感的用户体验有伤害
  • Contextual Features: 持平,推测人工高级特征没有用
  • Query Context Embedding: 正向,online NDCG +1.2%, booking +0.44%, 新用户booking +0.61%,说明多样性对新用户很重要。分析了不同价格档位的位置变动情况

模型行为可解释性

DNN模型比较黑盒,如何去解释模型的行为,验证

在这里插入图片描述

搜索结果的位置分布,更加多样了

在这里插入图片描述

搜索结果的价格分布,更加接近期望价格,减少极端的价格。可以看到绿色的期望价格附近的房源,被重排改动的位置变化更小,而两端的价格对应的房源,被重排带来的位置变化比较大。
如果同一个list中已经出现了极端价格,则对剩余的候选极端价格惩罚加大。物理含义就是避免极端价格的房源重复出现

参考文档

  • https://zhuanlan.zhihu.com/p/359330317
  • https://zhuanlan.zhihu.com/p/239824669
  • https://zhuanlan.zhihu.com/p/369498198
  • https://www.modb.pro/db/580111

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

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

相关文章

Jvisualvm监控Tomcat以及相关参数优化

Tomcat阻塞模式 阻塞模式&#xff08;BIO&#xff09; 客户端和服务器创建一个连接&#xff0c;它就会创建一个线程来处理这个连接&#xff0c;以为这客户端创建了几个连接&#xff0c;服务端就需要创建几个线程来处理你&#xff0c;导致线程会产生很多&#xff0c;有很多线程…

数学小课堂:无穷小(平均速度和瞬间速度的关系)

文章目录 引言I 速度1.1 平均速度1.2 瞬间速度(某一时刻特定的速度)1.3 解释飞箭是静止的悖论II 导数2.1 概念2.2 导数的现实影响2.3 微积分的意义III 无穷小3.1 贝克莱挑战牛顿(无穷小悖论)3.2 无穷小的定义引言 柯西和魏尔斯特拉斯给出的无穷小的定义: 它不是零;它的绝对…

vue2+element封装rules, 支持json多层级

一、封装介绍 封装前景&#xff1a;表单内容多、表单类型重复且校验项较多 下面就参考element的例子写个实例 element地址&#xff1a;https://element.eleme.cn/2.15/#/zh-CN/component/form 实现效果如下: 今天给大家写三种表单校验实现方式 普通表单实现、正常定义rules…

【svg】引入svg(非图标)

这里写目录标题直接插入页面—— 有各层svg内容并可赋值属性css 背景图 ——不可更改各层svg属性创建标签&#xff08;动态添加&#xff09;——可改属性但是还不如直接插入不常用&#xff08;没弄明白&#xff09;目的&#xff1a;如果直接以图片的方式引用svg 不能改变内层sv…

【C++基础入门】初识C++、数据类型

一&#xff1a;C简介 1.1 介绍 C&#xff08;c plus plus&#xff09;是一种计算机高级程序设计语言&#xff0c;由C语言扩展升级而产生 [17] &#xff0c;最早于1979年由本贾尼斯特劳斯特卢普在AT&T贝尔工作室研发。C既可以进行C语言的过程化程序设计&#xff0c;又可以…

深度学习 <实战Kaggle比赛:预测房价> 代码分析 跟李沐学AI

4.10. 实战Kaggle比赛&#xff1a;预测房价 — 动手学深度学习 2.0.0 documentation 若有错误请指出 一.数据处理部分 1.下载部分 没啥好说的 import hashlib import os import tarfile import zipfile import requests#save DATA_HUB dict() DATA_URL http://d2l-data.…

2-8 SpringCloud快速开发入门: Eureka 注册中心高可用集群搭建

Eureka 注册中心高可用集群搭建 Eureka 注册中心高可用集群就是各个注册中心相互注册 Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己&#xff0c;这样就会形成一组互相注册的服务注册中心&#xff0c;进而实现服务清单的互相同步&#xff0c;往注…

【博学谷学习记录】超强总结,用心分享丨人工智能 机器学习 逻辑回归模型遗漏知识点总结

目录激活函数逻辑回归的优缺点总结LR可以进行多分类吗&#xff1f;激活函数 h(w)表示输入的线性方程 逻辑回归的优缺点总结 优点&#xff1a; 形式简单&#xff0c;模型的可解释性非常好。从特征的权重可以看到不同的特征对最后结果的影响&#xff0c;某个特征的权重值比较高…

Docker搭建redis-cluster集群

以下是搭建redis-cluster集群&#xff0c;该集群是redis3.0引进了的&#xff0c;该集群比redis-sentinel哨兵架构有以下优点 可以配置多主多从&#xff0c;在redis设置内存可以更大&#xff0c;而哨兵只能配置一主多从&#xff0c;且单个主节点内存不宜设置过大&#xff0c;否…

操作系统内核与安全分析课程笔记【0】环境搭建

本学期选择了游伟和黄建军老师的操作系统内核分析与安全&#xff0c;目前已经试听了第一节课。这门的授课老师建了一个网页用于收录本次课程的幻灯片材料&#xff0c;录屏材料&#xff0c;以及软件安装包等一系列课程用得到的材料。对于学生而言&#xff0c;这是一门既硬核能够…

【机器学习】机器学习实验三:集成算法1(详细代码展示)

文章目录一、实验介绍1.1 简单介绍1.2 Breast Cancer 数据实验1.3 Boston 数据实验二、项目地址三、算法结果展示一、实验介绍 1.1 简单介绍 AdaBoost 和 Random Forest 算法的原理 1.2 Breast Cancer 数据实验 对 Breast Cancer 数据进行探索性数据分析&#xff1b; 数据预…

VMware虚拟机安装ubuntu系统在虚拟机中全屏以及主机和虚拟机之间文件的复制

一、从Wndows复制文字到VMware&#xff08;Linux&#xff09; List item 今天需要用到了Linux操作系统。在VMware装上linux之后经常面临这样一个问题&#xff0c;那就是很多指令很长&#xff0c;逐字去敲显然费时费力。 按照惯例我也查了几种方法&#xff0c;然而要么就是需要…

API 接口测试经验分享

接口开发完成后&#xff0c;我们需要调用接口来测试接口的表现&#xff0c;当表现符合预期时&#xff0c;则代表接口可用。 在测试中我们可能会关注状态码、响应体以及响应时间&#xff0c;这些数据 Postcat 通通都会展示给你&#xff0c;判断 API 是否正常。 开始测试之前&…

pytorch-把线性回归实现一下。原理到实现,python到pytorch

线性回归 线性回归输出是一个连续值&#xff0c;因此适用于回归问题。回归问题在实际中很常见&#xff0c;如预测房屋价格、气温、销售额等连续值的问题。 与回归问题不同&#xff0c;分类问题中模型的最终输出是一个离散值。所说的图像分类、垃圾邮件识别、疾病检测等输出为离…

ModStartBlog v6.8.0 博客置顶功能,界面样式优化

ModStart 是一个基于 Laravel 模块化极速开发框架。模块市场拥有丰富的功能应用&#xff0c;支持后台一键快速安装&#xff0c;让开发者能快的实现业务功能开发。 系统完全开源&#xff0c;基于 Apache 2.0 开源协议。 功能特性 丰富的模块市场&#xff0c;后台一键快速安装 …

2-7 SpringCloud快速开发入门: Eureka 服务注册中心发现与消费服务

Eureka 服务注册中心发现与消费服务 我们已经搭建一个服务注册中心&#xff0c;同时也向这个服务注册中心注册了服务&#xff0c;接下来我们就可以发现和消费服务了&#xff0c;这其中服务的发现由 eureka 客户端实现&#xff0c;而服务的消费由 Ribbon 实现&#xff0c;也就是…

10组小程序界面设计案例分享

10组小程序界面设计分享而对于设计师来说&#xff0c;小程序的设计也相对 APP 简单和直接&#xff0c;在这里分享给大家一些小程序界面设计案例&#xff0c;包含多种类别&#xff1a;出游旅行类、电商购物类、电商家居类、生活社区类、快递物流类、智能家居类、在线文档类、书籍…

基于四信网络摄像机的工业自动化应用

方案背景 随着数控机床被广泛的应用在工业生产中&#xff0c;数控技术发展成为制造业的核心。 鉴于数控机床的复杂性&#xff0c;以及企业人力储备有限&#xff0c;设备的监控和维护必须借助外部力量&#xff0c;而如何实现车间实时监测成了目前迫切解决的问题。 方案需求 ①兼…

PHP使用chilkat入门教程

前言&#xff1a; 我们需要先确认自己的版本&#xff0c;在PHP中&#xff0c;可以利用phpinfo()函数来查看php是ts版本还是nts版本&#xff0c;该方法可以展示出当前phpinfo信息&#xff0c;若“Thread Safety”项的信息是“enabled”&#xff0c;一般来说就表示ts版本&#xf…

什么是接口测试,我们如何实现接口测试?

1. 什么是接口测试 顾名思义&#xff0c;接口测试是对系统或组件之间的接口进行测试&#xff0c;主要是校验数据的交换&#xff0c;传递和控制管理过程&#xff0c;以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型&#xff0c;测试类型又主…