Deep Upsupervised Cardinality Estimation 解读(2019 VLDB)

article/2025/10/29 11:04:31

Deep Upsupervised Cardinality Estimation 解读(2019 VLDB)

  • Deep Upsupervised Cardinality Estimation
    • 选择度(基数)估计问题定义
    • 选择度和数据联合分布的关系
    • 深度自回归模型如何计算joint distribution
    • 编码解码策略
    • 具体执行
    • 属性的顺序
    • 均匀采样和渐进采样

Deep Upsupervised Cardinality Estimation

  • 本篇博客是对Deep Upsupervised Cardinality Estimation的解读,原文连接为:https://dl.acm.org/doi/pdf/10.14778/3368289.3368294
  • 本文介绍了如何使用深度自回归模型(如:MADE、transformer)来进行基数估计的任务(利用模型训练拟合数据分布)
  • 特点:
    • 使用autoregressive model,无监督学习
    • 没有做任何独立性假设
    • 支持范围查询

选择度(基数)估计问题定义

  • selectivity——选择度。本文针对的是给定谓词,估计其可以估计数据表中满足该谓词的元组的比例,有如下定义: s e l ( θ ) : = ∣ { x ∈ T : θ ( x ) = 1 } ∣ / ∣ T ∣ sel(\theta):=|\{\ x \in T :\theta (x)=1\}|/|T| sel(θ):={ xT:θ(x)=1}/T
    其中分母T就是表的总行数,分子是满足选择谓词的行数。

选择度和数据联合分布的关系

  • 文中给出联合分布(joint distribution)的定义:
    P ( a 1 , a 2 , . . . , a n ) : = f ( a 1 , a 2 , . . . , a n ) / T P(a_1,a_2,...,a_n):=f(a_1,a_2,...,a_n)/T P(a1,a2,...,an):=f(a1,a2,...,an)/T
    其中分母T仍表示表行数,f为满足a1,a2…an条件的行数。因此实际上联合分布和选择度有着十分紧密的联系(基本一致)。同时联合分布还可以通过因式分解(factorization)写成:
    P ( A 1 , A 2 , . . . A n ) : = P ^ ( A 1 ) P ^ ( A 2 ∣ A 1 ) . . . P ^ ( A n ∣ A 1 , A 2 , . . . A n − 1 ) P(A_1,A_2,...A_n):=\hat{P}(A_1) \hat{P}(A_2|A_1)...\hat{P}(A_n|A_1,A_2,...A_{n-1}) P(A1,A2,...An):=P^(A1)P^(A2A1)...P^(AnA1,A2,...An1)
    该式没有进行任何独立性假设,而且保留了属性之间的相互联系,因此想获得相对准确的选择度,实际上就是要构建能计算上式的模型。

深度自回归模型如何计算joint distribution

  • 作者选用Autoregressive Model进行对数据联合分布的拟合。以某一列为例。对于一列数据的分布,模型的input为前几列值的组合(因为是条件概率),输出的是在前几列的条件下,改列的分布概率。例如一张表travel_checkins含有三个属性:city、year、stars。给定一行作为输入:<Portland;2017;10>:
  • 0 → M ( c i t y ) 0\rightarrow M(city) 0M(city)
    E c i t y ( P o r t l a n d ) → M ( y e a r ) E_{city}(Portland)\rightarrow M(year) Ecity(Portland)M(year)
    ( E c i t y ( P o r t l a n d ) ⊕ E y e a r ( 2017 ) ) → M s t a r (E_{city}(Portland)\oplus E_{year}(2017)) \rightarrow M_{star} (Ecity(Portland)Eyear(2017))Mstar

上式三个输出依次是条件概率: P ^ ( c i t y ) , P ^ ( y e a r ∣ c i t y ) , P ^ ( s t a r ∣ c i t y , y e a r ) \hat{P}(city),\hat{P}(year|city),\hat{P}(star|city,year) P^(city),P^(yearcity),P^(starcity,year)

  • 下图简略展示了模型的工作流
    image

编码解码策略

在训练模型时,我们必须将数据表中的各个元素编码成机器能够看懂的语言,模型输出时我们要将编码进行解码得到各种概率,下面介绍作者提出的编码解码策略。

  • small-domain:

    • encodding:one-hot
    • decoding:一个全连接层FC(F,|Ai|),其中F为隐藏层大小,|Ai|第i列的值域大小。输出一个长度|Ai|的向量,每个元素表示位于该值的概率。
  • large-domain:

    • encodding:Embedding,通过词嵌入将各值映射为一个固定长度h的向量
    • decoding:Embedding reuse。当属性值域太大时,向上面一样使用一个全连接层产生一个非常长的向量,这在空间上和计算复杂度上都十分低效。在这里作者提出Embedding reuse,同样使用一个全连接层FC(F,h),其中F还是隐藏层的大小,h为Embedding规定的向量长度,这样神经网络就会生成一个长度为h的向量H,接着通过计算 H E i T HE_i^T HEiT并对其进行标准化处理,我们就能得到一个代表选择度的度量值。

具体执行

本文提供的方法支持点查询和范围查询,一般来说 s e l = P ( X 1 ∈ R 1 , X 2 ∈ R 2 , . . . X n ∈ R 3 ) sel=P(X_1\in R_1,X_2\in R_2,...X_n\in R_3) sel=P(X1R1,X2R2,...XnR3)

  • 点查询,即等值查询,将上式转换为: s e l = P ( X 1 = x 1 , X 2 = x 2 , . . . X n = x 3 ) sel=P(X_1=x_1,X_2=x_2,...X_n=x_3) sel=P(X1=x1,X2=x2,...Xn=x3)
  • 范围查询:对于范围查询,本文采用渐进采样的方法对数据表进行采样进行概率的估计
  • wildcard-skipping:这里提到的通配符不是指like查询,而是指age = any,也就是age可以为任何值,即范围查询age = [0, Di]。所以这里提到的通配符是为了满足有些条件没有filter的处理。
    为了达到这个目的,作者设计了特殊的token,Xi = MASKi,如age这一列的token为MASK_age。训练的时候,会把每一列用这个token替换掉,进行训练(这样就需要训练n次?n为列的个数,相当于数据被复制了n份,每一份把一列的值替换为token)。
    实际操作的时候,会随机sample一个tuple,age对应的值换成MASK_age,表明age取所有值,其他值的条件概率就是当age取所有值的情况下,其条件概率为多少,作为label。至于sample多少条数据,这个要看具体效果了。
    另外要根据实际的query确定哪些列需要有这个通配符。再举个具体的例子,一个表有三列a b c,查询为a=1,那么模型训练的时候必须要有b=MASK_b,c=MASK_c,查询的输入为a=1, b=MASK_b,c=MASK_c。再如a<10,一种方法是sampling,还有一种方法是模型训练的时候要有a=MASK_a, 这样查询的时候输入是a=MASK_a, b=MASK_b,c=MASK_c,a的输出会得到所有的值,再把<10对应的值的概率加起来。
    所以,这个通配符是非常有用的,因为在真实查询中,不可能保证所有列上都有条件,那么没有条件的列就用通配符替代。当然也可以用sampling的方式,但是通配符的查询效率更高。

属性的顺序

从上面的分析中可以看到每列实际上是有顺序的,比如模型的输入是列a b c,输出是条件概率,既然是条件概率,那么b的概率是给定a得到,c的概率是给定a和b得到。所以这个顺序要提前定好,如果查询是b=1 a=2,需要把顺序调整成a=2 b=1输入到模型。

均匀采样和渐进采样

两种sampling策略是为了解决范围查询的选择度估计问题。
假定一个范围查询域 R = R 1 × R 2 × . . . × R n R=R_1\times R_2 \times ... \times R_n R=R1×R2×...×Rn,如果用等值的方法处理这种问题,在某种比较坏的情况下,查询域可能会非常大(比如可能为 ∣ A 1 ∣ × ∣ A 2 ∣ . . . ∣ A n ∣ |A_1|\times |A_2| ... |A_n| A1×A2...An),此时非常耗费时间和空间。为了解决这种问题,本文尝试了两种解决方案:

  • uniformly sampling

    • 从R(查询域)中均匀随机抽样出 x ( i ) x^{(i)} x(i),接着将该 x ( i ) x^{(i)} x(i)输入模型,计算出该样本在数据表中的概率: p i ^ = P ^ ( x ( i ) ) \hat{p_i}=\hat{P}(x^{(i)}) pi^=P^(x(i)),基于朴素蒙特卡洛,对于S个样本,我们可以将 ∣ R ∣ S ∑ i = 1 S p i ^ \frac{|R|}{S}\sum_{i=1}^{S}\hat{p_i} SRi=1Spi^作为期望密度的无偏估计。简单来说,该方案是将点随机扔到目标区域R中,以探测其平均密度。
    • 均匀采样的缺点:考虑这样一个情况,数据表T有n个属性列,但每一列的数据都非常倾斜,有99%的数据只集中在前1%的值域中,剩下1%的数据分散到后99%的值域内。在这种情况下,如果我们想进行值域前50%的范围查询。通过随机抽样我们大概率只能抽到1%-50%内的数据,计算出的结果会严重失真。如果要保持准确性,我们必须抽 1 / ( 0.01 / 0.5 ) n = 1 / 0.0 2 n 1/(0.01/0.5)^n=1/0.02^n 1/(0.01/0.5)n=1/0.02n个样本才能都取到数据高密度区域。真实的数据集中,这样倾斜的数据常有出现,当均匀抽样遇到这样的数据会很快崩溃,产生非常大的误差如下图左,这里我们使用下文提出的渐进采样来决绝该问题。
      image
  • progressive sampling

    • 渐进采样。在均匀采样中,我们是随机的在查询域中选择了一组样本。但实际上,我们可以更有选择性的挑选样本。具体来说我们可以利用模型一边生成各个属性的概率分布,一边按照生成的概率分布进行采样,因为是逐步进行采样的所以叫渐进采样。通过渐进采样,我们能很容易的采样到高数据密度的区域,如上图右。步骤如下:
      image

(*^▽^*)
(*^▽^*)
(*^▽^*)
(*^▽^*)
(*^▽^*)

笔者解读不易,若是有所帮助,给笔者点个赞吧(*^▽^*)
欢迎来与笔者交流相关问题!


http://chatgpt.dhexx.cn/article/uUnQrSRj.shtml

相关文章

VLDB 2021 COCO 论文阅读

Epoch-based Commit and Replication in Distributed OLTP Databases 记录一篇之前读过的论文。。。 整篇论文的核心在于Epoch&#xff0c;将传统数据库以事务为粒度提交和恢复变成了以Epoch为粒度来提交和恢复&#xff0c;这样做的好处就是可以减少2PC和同步复制的时间开销。…

【区块链论文整理】VLDB篇

VLDB (Very Large Data Base&#xff09;是数据库三大顶会之一&#xff0c;近几年也发表了不少水平很高的文章。本文主要针对VLDB 会议中区块链相关的论文进行简单整理。 2021 SlimChain: Scaling Blockchain Transactions through Off-Chain Storage and Parallel Processing…

入选数据库顶会 VLDB:如何有效降低产品级内存数据库快照尾延迟?

阿里云操作系统团队、阿里云数据库团队以及上海交通大学新兴并行计算研究中心一起合作的论文 “Async-fork: Mitigating Query Latency Spikes Incurred by the Fork-based Snapshot Mechanism from the OS Level” 被数据库系统领域顶会 Very Large Data Bases Conferences (V…

VLDB 2023 | 基于擦除的浮点无损压缩(附论文和源码)

大量浮点时间序列数据正以前所未有的高速率生成。一种高效、紧凑、无损的时间序列数据压缩方法对海量数据的应用场景至关重要。现有的大多数浮点无损压缩方法是基于异或操作&#xff0c;但它们没有充分利用尾随零&#xff0c;这通常会导致压缩率不尽如人意。本次为大家带来重庆…

运算符—逻辑运算符

目录 5.逻辑运算符 5.1逻辑运算符概述 5.2短路逻辑运算符 5.逻辑运算符 &#xff08;学完之后要求能够使用逻辑运算符完成逻辑运算&#xff09; 5.1逻辑运算符概述 在数学中&#xff0c;一个数据x&#xff0c;大于3&#xff0c;小于6&#xff0c;我们可以写为这样来表示&am…

C语言关系运算和逻辑运算

一、关系运算 1.关系运算符 每个关系运算符对它左侧值和右侧值进行比较大小的运算 2.关系表达式 用关系运算符连接起来的式子。 若关系为真&#xff0c;关系表达式的值为1&#xff1b; 若关系为假&#xff0c;关系表达式的值为0&#xff1b; 3.优先级 关系运算符优先级低于算术…

C语言复习--逻辑运算符|| 和,!

&& 只有两个条件都为真时&#xff0c;才为真。||只要一个为真&#xff0c;就为真。 逻辑运算符很重要的法则是短路法则。 逻辑运算符的运算顺序都是从左到右计算。 && 当左侧条件为假时&#xff0c;就不计算右侧。 || 都左侧条件为真时&#xff0c;就不计…

C语言:关系运算符逻辑运算符

本节的所讲解的符号&#xff0c;大家在生活中应该都有用过&#xff0c;像我们去商场买东西&#xff0c;都会比较一下价格&#xff0c;是不是相等啊&#xff0c;哪家的贵&#xff0c;哪家的便宜啊。 在C语言中程序中也存在这样的比较&#xff0c;这个时候就需要用到关系运算符了…

C语言逻辑运算符详解

情景模式&#xff1a;现在研发出了一款新的软件&#xff0c;要求使用者必须成年&#xff0c;并且成绩大于等于60&#xff0c;该怎么办呢&#xff1f; 或许你会想到使用嵌套的 if 语句&#xff0c;类似下面这样的代码&#xff1a; #include <stdio.h> int main() {int a…

C 语言 逻辑运算符

文章目录 介绍逻辑运算符一览案例演示 介绍 用于连接多个条件&#xff08;一般来讲就是关系表达式&#xff09;&#xff0c;最终的结果要么是真(非 0 表示)&#xff0c;要么是 假(0 表示) 。 逻辑运算符一览 下表显示了 C 语言支持的所有逻辑运算符。假设变量 A 的值为 1&am…

☀️光天化日学C语言☀️(11)- 逻辑运算符 | 我是一个有逻辑的人

&#x1f649;饭不食&#xff0c;水不饮&#xff0c;题必须刷&#x1f649; C语言免费动漫教程&#xff0c;和我一起打卡&#xff01; &#x1f31e;《光天化日学C语言》&#x1f31e; LeetCode 太难&#xff1f;先看简单题&#xff01; &#x1f9e1;《C语言入门100例》&#…

C语言逻辑运算符介绍和示例

文章目录 1、逻辑运算符介绍2、逻辑表达式的书写3、不得不说的逻辑非4、获取视频教程5、版权声明 1、逻辑运算符介绍 在日常生活中&#xff0c;要做出某个决定&#xff0c;需要判断的条件往往不止一个&#xff0c;需要判断多个条件&#xff0c;例如超女选秀&#xff0c;参与选…

C语言按位逻辑运算符总结-与、或、非、异或

点击上方蓝字关注我&#xff0c;了解更多咨询 C中有按位逻辑运算符&#xff1a;按位取反、按位与、按位或、按位异或。这4个运算符可以用于整型&#xff0c;包括char类型。按位操作针对每一个位进行操作&#xff0c;不影响左右两边的位。4个运算符的作用总结如下&#xff1a; 一…

C语言逻辑运算符和||,一篇文章带你读懂逻辑表达式!

目录 逻辑运算符有哪些&#xff1f; 逻辑运算符的短路特性 逻辑运算符在表达式求值中的问题 逻辑运算符&&、||混合的不同情况 逻辑运算符有哪些&#xff1f; C 语言提供了以下三种逻辑运算符。 一元&#xff1a;&#xff01;&#xff08;逻辑非&#xff09;。 二…

勒让德符号判断二次剩余-C语言

近日备考学习二次剩余理论&#xff0c;其中了解到勒让德符号这个相比欧拉定理更加方便判断一个正整数在一个模数下是否为二次剩余&#xff1b; 基于勒让德符号理论的学习&#xff0c;本文旨在通过程序来实现基于勒让德符号的二次剩余判断方法&#xff1b; 本文着重点在于运算…

二次剩余入门

昨天训练的时候遇到一道题怎么也不会做&#xff0c;在网上搜了题解之后第一次听说了二次剩余&#xff0c;看了一天各种dalao的博客&#xff0c;在这里总结一下自己所理解的二次剩余及其用法。 1&#xff0c;什么是二次剩余&#xff1f; 2&#xff0c;二次剩余有什么用&#xff…

平方剩余(二次剩余)

平方剩余&#xff1a; 设p是奇素数(即大于2的素数)&#xff0c;如果二次同余式 有解&#xff0c;则a称为模p的平方剩余&#xff0c;否则a称为模p的平方非剩余(二次非剩余)(之所以规定p是大于2的素数&#xff0c;是因为p 2时解上面的二次同余式非常容易。 求出p 5&#xff…

二次剩余--欧拉准则

在 数论中&#xff0c; 二次剩余的 欧拉判别法&#xff08;又称 欧拉准则&#xff09;是用来判定给定的 整数是否是一个 质数的 二次剩余。 目录 1 叙述2 举例 2.1 例子一&#xff1a;对于给定数&#xff0c;寻找其为二次剩余的模数2.2 例子二&#xff1a;对指定的质数p…

二次剩余问题x的求解及代码实现(python)

一、问题引入 二次剩余是数论基本概念之一。它是初等数论中非常重要的结果&#xff0c;不仅可用来判断二次同余式是否有解&#xff0c;还有很多用途。C.F.高斯称它为算术中的宝石&#xff0c;他一人先后给出多个证明。 [1] 研究二次剩余的理论称为二次剩余理论。二次剩余理论…

二次剩余(学习笔记)

就是用来求解 x 2 ≡ n &VeryThinSpace; m o d &VeryThinSpace; p x^2\equiv n \bmod p x2≡nmodp的一个方法 对 p p p进行分类讨论&#xff1a; p 2 p2 p2 &#xff0c;则 x n xn xn p p p为奇素数 勒让德符号&#xff1a; ( a p ) { 1 a 在 模 p 意 义 下 是 二…