人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载导读本指南系统讲解 CardBench关系数据库学习型基数估计基准的核心数据资产——训练查询图Training Query Graphs。你将理解三个训练数据集单表、二表连接、多表连接的构成与规模、查询图的节点/边特征模式Schema、以及如何使用 sparse-deferred 库读取.npz格式的训练数据并提取基数、执行时间、SQL 等标注信息为训练或评估基数估计模型包括零样本场景打下数据基础。文中所有示例均可直接运行并有仓库源码佐证其底层实现。什么是 CardBench 训练查询图CardBench 是 Google Research 发布的用于关系数据库学习型基数估计Learned Cardinality Estimation的基准仓库中同时包含两部分内容训练数据集位于training_datasets目录与生成训练数据集的完整代码。其中训练查询图正是 TrainingQueryGraphs.md 所详细描述的核心交付物。每个训练实例都是一条 SQL 查询的带注释图annotated graph原始 SQL 字符串被翻译为关系代数算子、查询计划最终转换为图结构同时通过真实数据库Google BigQuery执行该查询得到的**实际基数cardinality**被作为上下文信息写入图中。因此每条训练样本同时包含查询本身的执行语义以节点和边编码查询涉及的数据库对象统计信息表行数、列分位数、空值比例等查询的真实执行结果cardinality与执行时间exec_time等顶层标签。CardBench 的训练数据集按查询复杂度分为三档三者的差异在于查询包含的操作类型数据集查询形态谓词规模Single Table单表对单张表应用过滤每查询 1–4 个过滤谓词Binary Join二表连接连接两张表每张表 1–3 个过滤谓词Multi Join多表连接1–7 个连接每张表 0–2 个过滤谓词下面分别是官方文档给出的单表与二表连接查询示例-- Single Table 示例 SELECT count(*) FROM tpch_10G.nation as nation WHERE nation.n_nationkey 6 AND nation.n_comment IS NULL AND nation.n_regionkey 1;-- Binary Join 示例 SELECT count(*) FROM tpch_10G.region as region JOIN tpch_10G.nation as nation ON region.r_regionkey nation.n_regionkey WHERE nation.n_comment IS NOT NULL AND nation.n_nationkey ! 5;这些查询的真实基数是在 Google BigQuery 上执行后获得并作为图上下文context写入的SQL 字符串本身也包含在图上下文之中。训练数据的下载与文件命名规范训练数据集以.npz文件形式提供命名规范为database_name_single_table|binary_join|multi_join.npz例如consumer_single_table.npz、tpch_10G_binary_join.npz、accidents_multi_join.npz。下载方法与全部制品链接数据集 CSV、建表 SQL、复制脚本、元数据 JSON、查询图文件请参考 DowloadArtifacts.md。文档特别说明数据库名称中的~标记表示该数据库已被降采样down sampled。训练数据集总览下表列出了 20 个数据库的规模信息每个数据库包含的表数量、以及各数据集单表/二表连接/多表连接的查询图数量。这些查询图由不同复杂度的查询生成是训练与评估含零样本基数估计模型的基础数据集名称表数单表查询数二表连接查询数多表连接查询数accidents39125845429242airline1965681309610467consumer35961557111857employee6126751041711041movielens13144881575717067sample_cms_synthetic_patient_data_omop249574653610038sample_covid19_weathersource_com493661018616075sample_crypto_bitcoin_cash2143151240417114sample_ethereum_blockchain7197561742419962sample_geo_openstreetmap16163461500010979sample_github_repos95268451310564sample_human_variant_annotation26138621408512162sample_idc_v10198609646412081sample_open_targets_genetics139734905810025sample_samples888931136910832sample_stackoverflow14143051277311399sample_usfs_fia11138221178710980sample_uspto_oce_claims125925612311968sample_wikipedia256659737510739tpch_10G8117271318116318观察可见多数数据库的查询图总量在数万级别accidents的多表连接查询数高达 29242是全表中最多的。用户可按需组合这些文件构建自己的训练/验证/测试划分例如在零样本实验中用其中 19 个数据库训练、留出 1 个数据库做测试仓库中 graph_transformer/README.md 提供了这种划分的完整命令。查询图结构节点类型、特征与边的 SchemaCardBench 查询图是一种异构图heterogeneous graph。下图为查询图的结构示意左侧列出了各节点类型及其特征与数据类型右侧则可视化了一个具体示例查询对应的图图中的核心观察节点类型包括tables表、attributes列/属性、predicates谓词、ops算子如 scan/join、correlations列间相关关系外加一个表示全局上下文的特殊节点g在官方示例输出中以g出现。边类型则刻画了这些节点之间的语义关系如table_to_attr表到列、attr_to_pred列到谓词、pred_to_pred谓词组合如 AND/OR、attr_to_op列到算子、op_to_op算子之间、pred_to_op谓词到算子、attr_to_corr/corr_to_pred列到相关关系、相关关系到谓词。从仓库源码 constants.py 可以确认图结构的完整定义NODE_TYPES包含pseudo_node、attributes、ops、predicates、correlations、tables六类EDGE_TYPES则定义了 9 种边含pseudo_edge。各节点的具体特征如下节点类型特征features说明g全局上下文cardinality、exec_time、query_id、querySQL 字符串等一条查询的顶层信息与监督标签tablesrows行数、name表名表级统计attributesname、data_type、null_frac空值比例、num_unique唯一值数、percentiles_100_numeric/percentiles_100_string101 位分位数、min/max_numeric、min/max_string列级统计predicatespredicate_operator算子编码、estimated_selectivity估计选择率、offset长度 6 的偏移向量、constant、encoded_constant谓词信息opsoperator如scan、join执行算子correlationstype、correlationPearson 相关系数、validity列间相关性特征填充规则与占位值文档在 Notes 中明确了两条重要规则按属性类型选择性填充特征percentiles_str字符串分位数只对STRING类型属性填充percentiles_num数值分位数只对数值类型属性填充。这点在源码 convert_query_plan_to_graph.py 中得到了印证只有INT64、NUMERIC、BIGNUMERIC、FLOAT64、DECIMAL、BIGDECIMAL类型才会写入min_numeric/max_numeric否则填-1percentiles_100若缺失则填充 101 个-1.0。空特征统一填充-1任何未填充的特征占位值均为-1。从 constants.py 还可以看到训练图 Transformer 在预处理时会移除部分非数值特征如attributes.name、min/max_string、percentiles_100_string、predicates.constant等并把data_type、operator、predicate_operator、validity等作为分类特征做 one-hot 化CATEGORICAL_FEATURE_UNIQUE_DICT最终拼成维度为NODE_FEATURE_DIM 150的节点特征向量用于 graph_transformer 模型输入。此外各数据库更完整的统计信息可在 DowloadArtifacts.md 中获取查询图中已经内嵌了一部分数据集统计信息。如何读取训练数据sparse-deferred 实战训练数据使用 Sparse Deferred 正是查询图生成管线中负责把图转换为 sparse-deferredGraphStruct对象并最终写入.npz文件的模块。环境要求运行下述读取代码需要Python 3.10sparse-deferrednumpy三者均可通过 pip 安装。加载训练数据集训练数据集以分片sharded方式存储即拆分为多个文件可用 glob 找到某个数据集的所有分片。以下代码加载consumer_single_table数据集并打印训练实例数量from sparse_deferred.structs import graph_struct GraphStruct graph_struct.GraphStruct InMemoryDB graph_struct.InMemoryDB # 训练数据集按分片存储使用 glob 查找某数据集的所有分片 filename single_table/consumer_single_table.npz db InMemoryDB.from_file(filename) # 打印训练实例数量 print(Number of training instances:, db.size)输出Number of training instances: 5571该数字与上表consumer单表查询数 5961 存在差异原因在于查询图生成过程中会过滤掉重复查询与零基数查询见下文源码佐证。查看 Schema 与节点类型# 打印训练实例的 schema print(Schema:, db.schema)输出Schema: {table_to_attr: (tables, attributes), attr_to_pred: (attributes, predicates), pred_to_pred: (predicates, predicates), attr_to_op: (attributes, ops), op_to_op: (ops, ops), pred_to_op: (predicates, ops), attr_to_corr: (attributes, correlations), corr_to_pred: (correlations, predicates)}# 打印节点类型 print(Node types:, first_training_example.nodes.keys()) # 打印表节点的特征 print(Table node features:, db.get_item(0).nodes[tables].keys())输出Node types: dict_keys([g, tables, attributes, predicates, ops, correlations]) Table node features: dict_keys([rows, name])# 打印边类型 print(Edge types:, first_training_example.edges.keys())访问表节点信息# 打印第一个表节点的行数和表名 print( First table number of rows:, db.get_item(0).nodes[tables][rows][0] ) print(First table name:, db.get_item(0).nodes[tables][name][0])输出First table number of rows: 340872 First table name: bbq-cost-models-exp.consumer.HOUSEHOLDS访问图级特征基数、执行时间、SQLcardinality、exec_time、query_id、query等是图级graph level特征即查询本身的监督标签# 打印查询基数、执行时间、query_id 与 SQL 字符串均为图级特征 print( Query cardinality:, first_training_example.nodes[g][cardinality][0], ) print(Execution time:, first_training_example.nodes[g][exec_time][0]) print(Query id:, first_training_example.nodes[g][query_id][0]) print(Query:, first_training_example.nodes[g][query][0])输出Query cardinality: 824130 Execution time: 2390.0 Query id: 14211 Query: bSELECT count(*) as rwcnt FROM bq-cost-models-exp.consumer.HOUSEHOLDS as HOUSEHOLDS JOIN bq-cost-models-exp.consumer.HOUSEHOLD_MEMBERS as HOUSEHOLD_MEMBERS ON HOUSEHOLDS.HOUSEHOLD_ID HOUSEHOLD_MEMBERS.HOUSEHOLD_ID;\n打印完整训练实例# 获取并打印第一个训练实例 first_training_example db.get_item(0) print(First training example:, first_training_example)输出为完整的GraphStruct序列化表示包含全部节点特征如attributes节点的null_frac、num_unique、percentiles_100_numeric、percentiles_100_string等与 8 类边的邻接索引。例如上面这个 consumer 二表连接查询实例中ops节点为[bjoin, bscan, bscan]一个 join 算子加两个 scan 算子predicates节点为空该查询没有过滤谓词仅做连接correlations节点为空数组未计算相关关系。一个值得注意的细节该示例查询实际上是一条二表连接HOUSEHOLDS JOIN HOUSEHOLD_MEMBERS但它出现在单表数据集的加载演示中——官方文档选取此例是为了演示InMemoryDB的读取 API读者在实际使用时应按数据集类型single_table/binary_join/multi_join选择对应文件。源码佐证查询图是如何生成的了解查询图从哪来有助于正确解读图内容。根据 README.md 与generate_training_querygraphs_library目录查询图的生成是 CardBench 代码管线的最后一步生成 SQL 查询generate_queries_and_save_to_file.py基于 DataManagementLab 的 zero-shot-cost-estimation 查询生成器改进执行查询收集真实基数run_queries.py将每条查询的 SQL 与 cardinality 存入QUERY_RUN_INFORMATION_TABLE生成带注释查询图generate_training_querygraphs_and_save_to_file.pySQL 字符串 → 关系代数算子convert_sql_to_relational_operators.py→ 查询计划convert_relational_operators_to_query_plan.py→ 图convert_query_plan_to_graph.py并注释数据集统计信息保存为 sparse-deferred 格式create_sparse_deferred_graph_struct_object.pyInMemoryDB收集图对象后统一写入.npz文件。其中两条源码事实值得注意去重与零基数过滤在 generate_training_querygraphs_helpers.py 的find_unique_and_non_zero_cardinality_queries中生成时会剔除cardinality 0的查询并基于表集合 谓词含常量/不含常量构造签名字符串来去除重复查询计划。这就是为什么最终.npz中的实例数通常少于原始生成的查询数。查询图校验在 validate_query_plan_and_graph.py 中生成后会做严格校验每张图必须满足join 节点数 SQL 中 JOIN 数、scan 节点数 表数等约束每个 column 节点必须携带min_val、max_val、percentiles、percentiles_100长度必须为 101、null_frac、num_unique等字段相关关系节点的correlation值与validity状态如valid、nan、missing、invalidtypes、none必须相互匹配。这些校验规则解释了读取数据时看到的各种占位值如-1填充、-10/-20/-50等特殊相关系数取值帮助读者判断某个特征缺失是语义上的正常占位还是异常。下一步将查询图用于基数估计模型读取查询图后最直接的用法是训练或评估基数估计模型。仓库提供了配套的图 Transformer 实现位于 graph_transformer 目录其工作流程为构建缩放策略用 build_scaling_strategy.py 在所有训练数据集上计算全局统计数值特征缩放参数输出scaling_strategy.json预处理用 preprocess_dataset.py 将.npz查询图批量转换为 TF Dataset训练用 train.py 支持三种模式实例内模型instance based同一数据集训练并测试零样本模型zeroshot在 19 个数据集上训练在留出的第 20 个数据集上测试对应论文中的零样本基数估计评估微调模型finetuned加载预训练 checkpoint 后在目标数据集上微调。模型以cardinality或exec_time为标签进行训练见 constants.py 的LABELS输入即本指南所介绍的查询图。小结CardBench 提供三个层次复杂度的训练查询图单表/二表连接/多表连接共覆盖 20 个数据库、每库数千至数万条查询实例每个实例是以 SQL 查询为中心构建的异构图节点类型含g、tables、attributes、predicates、ops、correlations边类型含 8 类语义关系并内嵌真实基数、执行时间与 SQL 字符串作为图级上下文特征按属性类型选择性填充字符串列用percentiles_100_string数值列用percentiles_100_numeric缺失统一用-1占位读取数据仅需sparse-deferrednumpy通过InMemoryDB.from_file(...)即可加载并访问节点特征与图级标签数据集的生成代码、校验逻辑与配套的图 Transformer 模型均已在仓库中开源可复现数据管线或直接训练模型。赞分享人工智能深度学习NLP计算机视觉强化学习【免费下载链接】google-researchGoogle Research项目地址https://gitcode.com/gh_mirrors/go/google-research点击查看免费下载相关推荐5大核心技术深度解析Docker CLI远程连接架构与安全实践5大核心技术深度解析Docker CLI远程连接架构与安全实践 Docker CLI远程连接配置是现代容器化运维的核心技术它允许开发者从本地环境安全地管理和CLI开发工具Vanna AI训练数据终极指南从零到一构建智能数据库查询系统Vanna AI训练数据终极指南从零到一构建智能数据库查询系统 想要让AI准确理解你的数据库并生成精准SQL查询Vanna AI通过创新的RAG技术解决了这人工智能AI AgentRAG数据库后端数据可视化DeepSpeech 训练脚本命令行 Flags 完全指南从训练、评估到导出的参数速查手册DeepSpeech 训练脚本命令行 Flags 完全指南从训练、评估到导出的参数速查手册 导读 本文是 DeepSpeech 项目训练脚本家族的命令行参数人工智能语音音频深度学习创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考