ZeroNL2SQL:零样本 NL2SQL

发布于:2024 年 10 月 30 日 星期三

#RAG #NL2SQL # Zero-Shot

自然语言到 SQL(NL2SQL)的转换是一个重要的研究领域,它允许非技术用户轻松访问和分析数据,在商业智能、数据分析等领域具有广泛的应用前景。然而,现有的 NL2SQL 方法在面对新的数据库、新的语言现象或 SQL 结构时,往往表现出性能下降的问题。为了解决这一问题,本文研究零样本 NL2SQL,旨在构建一个能够适应各种测试环境的 NL2SQL 模型,而不需要来自测试环境的标注样本。

欢迎关注作者,接收最前沿的人工智能技术

一、引言

1.1 研究背景与动机

自然语言到 SQL(NL2SQL)的转换是一个重要的研究领域,它允许非技术用户轻松访问和分析数据,在商业智能、数据分析等领域具有广泛的应用前景。然而,现有的 NL2SQL 方法在面对新的数据库、新的语言或 SQL 结构时,往往表现出性能下降的问题。为了解决这一问题,本文研究零样本 NL2SQL(Zero-shot NL2SQL),旨在构建一个无需标注样本就能够适应各种新环境的 NL2SQL 模型(ZeroNL2SQL)。综合实验表明,ZeroNL2SQL 在真实的基准测试中可以实现最佳的零样本 NL2SQL 性能。具体而言,ZeroNL2SQL 在执行准确性方面比最先进的基于 PLM 的方法高出 3.2%至 13%,比基于 LLM 的方法高出 10%至 20%。

1.2 零样本 NL2SQL 的挑战

1.2.1 数据库模式对齐

在 NL2SQL 任务中,理解数据库的结构对于生成准确的 SQL 查询至关重要。然而,将自然语言问题与数据库模式中的表、列和关系正确对齐是具有挑战性的,尤其是当存在多个可能匹配的表时。

1.2.2 复杂的自然语言推理

NL2SQL 任务通常涉及复杂的自然语言问题,需要高级推理能力。理解问题的语义、解决歧义以及进行逻辑推导对于生成精确的 SQL 查询是必要的。

1.2.3 数据库实例对齐

这涉及将自然语言问题中提供的信息映射到数据库中存储的相关数据的值。模型需要理解问题的意图,并识别与问题和数据库内容都匹配的特定谓词。例如,在图 1 中,NL2SQL 模型需要生成一个 SQL 谓词 given_name = 'timmy' (而不是 'timmothy')

1.3 现有方案的优势和局限性

1.3.1 基于预训练语言模型(PLMs)

优势:在模式对齐子任务中表现出色,能确定 SELECT 子句中要包含的适当属性以及 FROM 子句中要包含的相关表。

局限性:在零样本设置下不擅长复杂推理。

1.3.2 大型语言模型(LLMs)

优势:在复杂推理任务中表现优越,特别是在处理 WHERE 子句下的谓词时,能够处理复杂的逻辑推导。

局限性:无法实现精确的模式对齐,倾向于选择更多的列和表,导致执行结果不正确,在数据库实例对齐方面存在不足。

1.4 提出的框架 ZeroNL2SQL

基于 PLMs 和 LLMs 的优势互补,作者提出了 ZeroNL2SQL 框架,该框架主要包括两个关键步骤:

1.4.1 SQL 草图生成

利用可调的 PLMs 进行数据库模式对齐并生成一个 SQL 草图,包括 SELECT 的属性、FROM 包含的表以及组成 SQL 查询的必要关键字。

1.4.2 SQL 查询补全

利用 LLMs 填充 SQL 草图中缺失的信息,并通过与数据库中的数据值对齐来校准谓词。

二、预备知识

2.1 零样本 NL2SQL

零样本 NL2SQL 是指推理环境中的数据不在训练集中出现,主要包括在新数据库上测试、在新问题上测试和在新 SQL 上测试三种情况。

2.2 SQL 草图(SQL Sketch)

SQL Sketch 由三部分组成(图 5 所示):SELECT(需要返回给用户的属性)、FROM(用于获取数据的表)和 KEYWORDS(代表子句的关键字)。

2.3 SQL 语言模型

  1. 预训练语言模型(PLMs):可以由普通用户本地托管,并针对不同的下游任务进行微调,如 BERT、BART 和 GPT2 等。
  2. 大型语言模型(LLMs):只能通过网络服务或 API 调用访问,如 ChatGPT、PaLM、GPT4 和 GLam 等。LLMs 通过上下文学习和指令遵循实现零样本复杂推理,而 PLMs 主要通过微调适应下游任务。

2.4 用于 NL2SQL 的语言模型

可以利用适当的提示来引导语言模型进行 NL2SQL 任务,并且考虑到 NL2SQL 任务的复杂性,可以采用上下文学习来更好地引导语言模型生成 SQL 查询。

三、ZeroNL2SQL 框架概述

3.1 PLMs 生成 SQL 草图

给定用户问题和数据库模式,SQL Sketch Generation Module 生成一个 SQL 草图候选列表,并传递给固定的 LLM。

3.2 LLMs 完成 SQL 查询

给定一组 SQL 草图候选,SQL Query Completion Module 利用 LLM 完成细节并选择最优的 SQL 查询作为最终输出。为了支持该框架,开发了两个关键模块:

3.2.1 SQL Sketch Generation(SQL 草图生成) 模块

首先将问题建模为一个序列到序列的生成问题,使用基于编码器 - 解码器的 PLM 生成 SQL 草图。采用数据库感知序列化策略和问题感知对齐器来提高草图生成的准确性。

3.2.2 SQL Query Completion(SQL 查询补全) 模块

设计了谓词校准方法来解决数据库实例对齐问题,并提供合适的谓词推荐给 LLM。采用基于执行的选择策略来选择最优的 SQL 查询。

四、SQL 草图生成

这段文本主要介绍了 SQL 草图生成,它能生成一个排序列表的 SQL 草图,正如在图 7 中所示。首先在 4.1 节引入了一个配备数据库感知序列化策略的 SQL 草图学习框架,然后在 4.2 节开发了问题感知对齐,以便根据自然语言问题的语义进一步对 SQL 草图进行排序。

4.1 SQL Sketch Learning 的过程

4.1.1 数据库感知序列化

在 SQL Sketch Learning 中,数据库感知序列化是一个关键步骤。它将用户问题和数据库模式与不同的指令进行组合,为每个子任务构建特定的输入。通过使用括号和索引对数据库进行序列化,使得 PLM 能够根据用户问题准确地选择与问题最匹配的表 / 列索引,而不是简单地从问题中直接复制表 / 列名称。这种方法有效地避免了 PLM 在面对不同测试环境时可能出现的错误选择,提高了草图生成的准确性。例如,在处理一个关于汽车模型的问题时,如果数据库中有多个与汽车相关的表,通过数据库感知序列化,PLM 能够准确地选择到包含所需信息的表和列。

4.1.2 参数学习

同时,为了训练 PLM 能够更好地生成 SQL 草图,还需要进行参数学习。对基于编码器 - 解码器的 PLM 进行监督微调,在这个过程中,同时在三个子任务上进行多任务学习。通过从标注的 NL2SQL 数据集中提取训练数据,构建包含指令、数据库模式、用户问题和目标标签的数据集。然后通过最小化最大似然来优化模型的参数,使得 PLM 能够更好地学习到如何生成准确的 SQL 草图。

4.2 问题感知对齐器的作用与实现

4.2.1 作用

问题感知对齐器的主要作用是进一步优化 SQL 草图候选。虽然 PLM 通过数据库感知序列化能够生成初步的草图,但在语义层面上,对于 SELECT 和 KEYWORDS 部分可能还不够精准。问题感知对齐器就是为了弥补这一不足,使这两个部分能够更紧密地与问题的意图和要求对齐。例如,当问题是关于 “某个课程的最高得分” 时,问题感知对齐器能够确保 SELECT 部分选择的是 “课程得分” 相关的属性,KEYWORDS 部分包含 “ORDER BY” 关键字。

4.2.2 实现

问题感知对齐器的实现过程如下:首先,它取 SELECT 集合和 KEYWORDS 集合的笛卡尔积得到最终候选集。然后,对于候选集中的每个元素,将其与用户问题串联形成输入序列,通过基于编码器的 PLM 将其转换为高维表示。接着,将这个高维表示输入到一个全连接层,计算出 SELECT 和 KEYWORDS 与用户问题之间的对齐分数。最后,根据对齐分数选择最优的候选组合,从而实现对 SQL 草图的进一步优化。为了训练问题感知对齐器,对基于编码器的 PLM 进行监督微调。根据 SELECT 和 KEYWORDS 是否正确设置对齐标签,通过最小化交叉熵损失来优化参数,使得问题感知对齐器能够更好地学习到如何选择最优的候选组合。

五、SQL 查询补全

5.1 谓词校准的方法与流程

5.1.1 多级匹配

在谓词校准过程中(算法 1 所示),多级匹配是一个重要的方法。由于 LLM 预测的谓词可能存在错误,包括预测值不正确或预测列不正确等情况,多级匹配就是为了纠正这些错误。它按照列、表和数据库三个级别顺序匹配谓词的值。在任何一个级别,如果找到一个与预测值足够接近的值,就会终止匹配过程,并将这个新的值和对应的列作为新的谓词返回给 LLM。例如,当 LLM 预测的谓词中某个值与数据库中的实际值不完全匹配时,通过多级匹配,可以在表级别或数据库级别找到更合适的值来替换,从而确保谓词的准确性。

5.1.2 相似度计算

相似度计算是多级匹配过程中的一个关键环节。相似度计算方法主要分为基于字符和基于语义两类。基于字符的相似度计算可以使用模糊匹配方法,例如通过计算插入和删除字符的数量来衡量两个值之间的相似度。基于语义的相似度计算则需要将值转换为高维向量表示,然后通过计算内积来得到相似度分数。在将值转换为高维向量表示时,可以采用 word2vec - 基于和 PLM - 基于的方法。例如,对于一个单词,可以通过查找预训练的 GloVe 字典来获得其基于 word2vec 的向量表示,或者通过 Sentence Bert(SBERT)来获得其基于 PLM 的向量表示,然后根据不同的方法计算相似度分数,从而为多级匹配提供更准确的参考。

5.2 SQL 查询选择的策略与执行

5.2.1 策略

SQL 查询选择采用基于执行的策略。基于对 SQL 执行结果能够反映其质量的观察,通过对生成的 SQL 查询进行实际执行测试,根据执行结果来选择最优的查询作为最终输出。这种策略的核心思想是,只有能够正确执行并返回正确结果的 SQL 查询才是最优

5.2.2 执行

具体执行过程如下:首先,将 SQL 草图候选输入 LLM 生成 SQL 查询。然后,对生成的 SQL 查询进行可执行检查,如果不可执行则反馈错误信息给 LLM,直到得到可执行的查询。接着,将可执行的查询输入谓词校准模块,得到基于数据库的 SQL 查询。最后,如果执行结果不为 NULL,则返回该 SQL 查询作为最终结果。通过这种方式,确保最终选择的 SQL 查询能够在数据库中正确执行并返回所需的结果。

六、实验

6.1 实验设置的详细介绍

6.1.1 数据集

在实验中,使用了 Spider 作为训练集,这是一个被广泛采用的 NL2SQL 数据集。同时,使用 Dr.Spider 和 KaggleDBQA 作为评估基准。Dr.Spider 包含基于 Spider 的 17 种不同类型的扰动测试集,这些扰动包括数据库扰动、问题扰动和 SQL 扰动等,能够全面地测试模型在不同零样本情况下的性能。KaggleDBQA 则包含真实世界的问题和数据库,其数据和问题更加贴近实际应用场景。

6.1.2 评估指标

采用执行准确率(EX)作为评估指标。这是因为在 LLMs 中使用的 SQL 表达式风格可能与 NL2SQL 基准中的真实结果不同,传统的基于字符串的评估指标如精确匹配准确率并不适合本实验。执行准确率通过比较生成的 SQL 查询和从数据库中检索到的相应真实 SQL 查询的执行结果来衡量模型的性能。

6.1.3 基线

考虑了两种类型的基线。一类是基于 PLM 的 SOTA 模型,包括 SMBOP、T5 - 3B LK、Picard 和 RESDSQL 等,这些模型都是在 Spider 训练集上进行微调的。另一类是基于 LLM 的方法,包括 vanilla LLMs、LLM + In - Context Learning 和 DIN - SQL 等。这些基线模型涵盖了目前在 NL2SQL 领域中比较先进的方法,通过与它们进行比较,可以更好地评估本文提出的 ZeroNL2SQL 框架的性能。

6.1.4 实现细节

在实验中,采用 ChatGPT-3 作为 LLM,这是基于 OpenAI 的 gpt-3.5-turbo,目前被广泛使用。对于 SQL Sketch Generation,采用 T5-3B 作为骨干的编码器 - 解码器 PLM。同时,设置了一系列的参数,如批量大小、学习率、训练轮数等,并使用了相应的优化算法如 Adafactor 和 Adam 等。在 SQL Query Completion 模块中,使用 Sentence Bert 和预训练的 GloVe 字典来获取值的嵌入,通过设置合适的相似度阈值来进行相似度计算。所有实验都在 1 NVIDIA RTX A6000 48G 上使用 PyTorch 实现。

6.2 与基于 PLM 的方法比较结果分析

6.2.1 在 Dr.Spider 上的实验结果

在 Dr.Spider 基准的 17 个测试集中进行实验,结果显示 ChatGPT + ZeroNL2SQL 在性能上优于所有基线,包括基于 PLM 的 SOTA 模型和 vanilla ChatGPT。具体来看,数据库和用户问题的扰动对 NL2SQL 性能影响较大,SQL 扰动影响较小。结合 ZeroNL2SQL 后,ChatGPT 在困难测试集上表现出更好更稳定的 NL2SQL 性能。例如,在一些复杂的数据库结构和问题条件下,ChatGPT 本身可能无法准确地生成 SQL 查询,但通过 ZeroNL2SQL 框架的辅助,能够显著提高其性能,生成更准确的 SQL 查询。

6.2.2 在 KaggleDBQA 上的实验结果

在 KaggleDBQA 数据集上进行实验,结果表明与基于 PLM 的 SOTA 模型相比,ChatGPT + ZeroNL2SQL 的执行准确率显著提高。这表明在相同训练集下,ZeroNL2SQL 在完全不同的测试集上能表现出更好的零样本推理能力。由于 KaggleDBQA 的数据和问题更加贴近实际应用场景,这种性能提升更加凸显了 ZeroNL2SQL 框架的优势。例如,在处理一些真实世界中的复杂商业数据和问题时,ZeroNL2SQL 能够更好地适应并提供准确的 SQL 查询结果。

6.3 与基于 LLM 的方法比较结果分析

6.3.1 性能比较

在 EX 准确率方面,比较了不同的上下文学习方案,包括随机采样和基于相似度的采样方法。结果发现,这些不同的采样方法差异不大,且示例数量对性能影响较小。与上下文学习相比,ZeroNL2SQL 在 KaggleDBQA 上能带来更显著的改进,并对 ChatGPT 实现更稳定的改进。例如,在某些特定的测试集上,上下文学习可能会因为示例选择的局限性而导致性能波动,而 ZeroNL2SQL 通过其独特的框架结构和算法流程,能够更稳定地提升性能。

6.3.2 成本比较

在调用 ChatGPT API 的平均令牌数量方面,ZeroNL2SQL 接近 vanilla ChatGPT 且远低于各种上下文学习方法。这是因为 ZeroNL2SQL 通过学习示例并将其转换为定制的 SQL 草图来引导 LLM,而不是直接将示例提供给 LLM。这种方式不仅提高了性能,还降低了成本,使得模型在实际应用中更具优势。例如,在处理大量数据和频繁查询的场景下,较低的令牌消耗意味着更低的成本和更高的效率。

6.4 消融研究结果分析

6.4.1 SQL Sketch Generation 模块组件的影响

数据库感知序列化策略对生成 SQL 草图影响最大。它避免了模型过度关注用户问题,使模型能基于数据库模式生成有效草图。例如,在一些复杂的数据库结构中,如果没有数据库感知序列化策略,模型可能会错误地选择表和列,导致生成的草图无法准确反映数据库的结构。问题感知对齐器对 SELECT 和 KEYWORDS 部分有增益,有助于 SQL 草图生成。它能够进一步优化草图,使其更符合问题的意图和要求,提高草图的准确性和实用性。

6.4.2 谓词校准中值匹配方法的评估

多级匹配方法性能最佳。它能够有效地纠正 LLM 预测的谓词错误,通过在列、表和数据库三个级别顺序匹配谓词的值,提高了谓词的准确性。在相似度计算方法中,SBERT 方法表现出更稳定和优异的性能,能更好地捕捉值的整体含义。例如,在处理一些语义复杂的词汇时,SBERT 能够更准确地计算相似度,为多级匹配提供更可靠的依据。

七、相关工作

7.1 基于 PLM 的 NL2SQL

许多工作将预训练语言模型应用于 NL2SQL 任务,分为仅编码器的 PLMs 和编码器 - 解码器的 PLMs。对于仅编码器的 PLMs,如 BERT 等,一些研究通过利用图神经网络等方法进一步处理用户问题和数据库模式,然后通过语法神经解码器生成 SQL 查询。对于编码器 - 解码器的 PLMs,如 T5 等,一些方法将 NL2SQL 任务作为端到端的翻译问题进行处理,并采用一些特定的策略如关系感知自注意力、模式选择和约束解码等来提高生成 SQL 查询的准确性。然而,ZeroNL2SQL 的目标是使 PLMs 在新的测试环境中生成准确的 SQL 草图,因此关注测试环境变化对 PLMs 的影响并提出自适应方法,以更好地适应零样本 NL2SQL 的需求。

7.2 基于 LLM 的 NL2SQL

一些工作尝试将大型语言模型应用于 NL2SQL 任务。例如,有的研究评估了 CodeX 模型的零样本 NL2SQL 能力,还有的进一步验证了其在该任务上的稳健性并提出了有效的示例采样方法。随着 ChatGPT 的流行,也有研究探索了其零样本 NL2SQL 推理能力,并指出其与现有基于 PLM 微调的方法存在差距,但在新数据集上表现出较强的稳健性。为了提高 LLMs 在 NL2SQL 任务上的有效性,一些方法如 DIN - SQL 通过添加不同子任务的示例来使 LLMs 能够逐步生成 SQL 查询。与这些方法不同,ZeroNL2SQL 通过可调的 PLMs 为固定的 LLM 生成细粒度的指导(即 SQL 草图),显著提高了 NL2SQL 的准确性,同时确保了高效率。

八、结论与未来工作

8.1 研究成果总结

本文提出了 ZeroNL2SQL 框架,通过交错可调的 PLM 和固定的 LLM,有效地解决了零样本 NL2SQL 生成的问题。该框架由 SQL Sketch Generation 和 SQL Query Completion 两个模块组成,分别利用 PLMs 和 LLMs 的优势,克服了各自的局限性。通过在 Dr.Spider 和 KaggleDBQA 等基准上的广泛实验,证明了 ZeroNL2SQL 框架在零样本 NL2SQL 性能上优于现有的基于 PLM 和基于 LLM 的方法。这一成果为 NL2SQL 领域的研究提供了新的思路和方法,有助于推动该领域在实际应用中的发展,使非技术用户能够更方便、准确地通过自然语言与数据库进行交互。

8.2 扩展到对话式 NL2SQL 任务

考虑到 LLMs 的优秀交互能力,ZeroNL2SQL 可以应用于对话式 NL2SQL 任务。在对话式环境中,用户可能会提出一系列相关的问题,模型需要根据对话的上下文和历史信息来生成准确的 SQL 查询。这就需要进一步研究如何更好地利用 LLMs 的交互能力和 ZeroNL2SQL 框架的现有优势,来适应对话式 NL2SQL 任务的特殊需求。例如,可以探索如何在对话过程中动态更新 SQL 草图和查询,以及如何处理对话中的歧义和平滑过渡问题。

8.3 扩展到超大数据库

考虑到 ZeroNL2SQL 中的有效谓词校准方法,经过效率优化后可以扩展到超大数据库。超大数据库往往具有海量的数据和复杂的结构,这对模型的性能和效率提出了更高的要求。通过进一步优化谓词校准方法和整个 ZeroNL2SQL 框架的算法流程,可以使其更好地适应超大数据库的环境。例如,可以研究如何在大规模数据上更快速地进行谓词匹配和校准,以及如何优化 SQL 草图生成和查询完成的过程,以提高整体性能和效率。


论文地址:Interleaving Pre-Trained Language Models and Large Language Models for Zero-Shot NL2SQL Generationicon-default.png?t=O83Ahttps://arxiv.org/pdf/2306.08891

代码地址:GitHub - ruc-datalab/ZeroNL2SQLContribute to ruc-datalab/ZeroNL2SQL development by creating an account on GitHub.icon-default.png?t=O83Ahttps://github.com/ruc-datalab/ZeroNL2SQL

原文链接:ZeroNL2SQL:零样本 NL2SQL本文研究零样本 NL2SQL,旨在构建一个能够适应各种测试环境的 NL2SQL 模型,而不需要来自测试环境的标注样本。icon-default.png?t=O83Ahttps://mp.weixin.qq.com/s/xXenKZQuvcsTkeNuuczSqA

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

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

相关文章

nginx配置https及url重写

nginx配置https及url重写 一、https简介1、安全访问2、数据的安全性3、数据的完整性3、身份的真实性 二、配置https网站1、环境规划2、部署私有CA3、部署https的虚拟主机 三、URL重写1、语法 四、location的写法1、语法2、location uri {}3、location ~ uri { }4、location ~*…

【安全解决方案】深入解析:如何通过CDN获取用户真实IP地址

一、业务场景 某大型互联网以及电商公司为了防止客户端获取到真实的ip地址,以及达到保护后端业务服务器不被网站攻击,同时又可以让公安要求留存网站日志和排查违法行为,以及打击犯罪的时候,获取不到真实的ip地址,发现…

4. 日志系统实现

log.h 文件定义了一个单例模式的日志类 Log,用于记录系统日志。 单例设计模式: 主要功能 根据上述分析,这个日志类 Log 主要实现了以下功能: 1. 日志写入 该日志类提供了 write_log() 方法用于将日志内容写入文件。日志内容可以…

【SQL】SQL函数

📢 前言 函数 是指一段可以直接被另一段程序调用的程序或代码。主要包括了以下4中类型的函数。 字符串函数数值函数日期函数流程函数 🎄 字符串函数 ⭐ 常用函数 函数 功能 CONCAT(S1,S2,...Sn) 字符串拼接,将S1,S2&#xff0…

论文翻译 | PROMPTAGATOR : FEW-SHOT DENSE RETRIEVAL FROM 8 EXAMPLES

摘要 最近的信息检索研究主要集中在如何从一个任务(通常有丰富的监督数据)转移到其他各种监督有限的任务上,其隐含的假设是从一个任务可以泛化到所有其他任务。然而,这忽略了这样一个事实,即存在许多多样化和独特的检索…

【MySQL】深入理解隔离性

目录 一、数据库并发的场景 1. 读-读并发 2. 读-写并发 3. 写-写并发 二、多版本并发控制( MVCC ) 2.1.MVCC的核心思想 2.2.MVCC的优势 2.3.MVCC的工作原理 2.4.MVCC的应用场景 三、理解MVCC 3.1. 3个记录隐藏字段 3.2.undo日志 4.快照的概…

目录遍历漏洞

目录遍历 目录 概念漏洞分析 加密型传递参数编码绕过目录限定绕过绕过文件后缀过滤(截断上传原理) 漏洞挖掘 访问图片文件测试时去掉文件名只访问目录路径搜索引擎谷歌关键字 pikachu目录遍历 目录遍历与任意文件下载其实差不多,但是如果目录遍历比如etc/passwd只能看不能下…

GitLab在Linux上的详细部署教程并实现远程代码管理与协作

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 本文主要介绍如何在Linux CentOS8 中搭建GitLab私有仓库并且结合内网穿透工具实现在公网…

LC:贪心题解

文章目录 376. 摆动序列 376. 摆动序列 题目链接:https://leetcode.cn/problems/wiggle-subsequence/description/ 这个题目自己首先想到的是动态规划解题,贪心解法真的非常妙,参考下面题解:https://leetcode.cn/problems/wiggle…

Javaee:阻塞队列和生产者消费者模型

文章目录 什么是阻塞队列java中的主要阻塞队列生产者消费者模型阻塞队列发挥的作用解耦合削峰填谷 模拟实现阻塞队列put方法take方法生产者消费者模型 什么是阻塞队列 阻塞队列是一种支持阻塞操作的队列,在多线程中实现通线程之间的通信协调的特殊队列 java中的主…

Redis特性和应用场景以及安装

目录 Redis特性 1.数据在内存中存储 2.可编程性 3.可拓展性 4.集群 5.高可用 6.持久化 7.主从复制 8.速度快 Redis的应用场景 1.用作数据库 2.用作缓存或保存会话 3.用作消息队列 Redis 不可以做什么 Redis的安装 Redis特性 Redis 之所以受到如此多公司的⻘睐…

如何在VMware中安全地恢复已删除的快照?

在VMware中是否可以恢复已删除的快照? 答案是肯定的,您有几种方法可以尝试恢复被删除的快照文件: 仅删除了快照描述符文件(如VMname-000000#.vmdk):这种情况下,可以手动重新创建描述符文件&…

强化学习DQN实践(gymnasium+pytorch)

Pytorch官方教程中有强化学习教程,但是很多中文翻译都太老了,里面的代码也不能跑了 这篇blog按照官方最新教程实现,并加入了一些个人理解 工具 gymnasium:由gym升级而来,官方定义:An API standard for rei…

ubuntu22.04安装向日葵

1、下载deb安装包 进入官网下载图形版本:https://sunlogin.oray.com/download/linux?typepersonal 2、命令行安装 sudo chmod x 文件名.deb sudo dpkg -i 文件名.deb 3、开始报错的看这里! 首先展示一下安装成功的效果图: 接下来是我安…

Vuestic 数据表格 使用demo

<template><br><div class"grid sm:grid-cols-3 gap-6 mb-6"><VaButton click"()>{for(const it in this.selectedItems){console.log(this.selectedItems);}}">参数设置</VaButton><VaButton>参数刷新</VaButt…

深入了解 美国高防 CN2 :如何提升全球化业务的网络安全与性能

美国高防 CN2 的重要性 在跨国企业和全球化业务的不断扩展下&#xff0c;对高性能和安全的网络连接需求不断增加。美国高防 CN2&#xff08;Global Internet Access&#xff09;以其卓越的跨境传输效率和强大的防护能力&#xff0c;成为许多企业关注的焦点。尤其是对电商、游戏…

NVR批量管理软件/平台EasyNVR多个NVR同时管理支持视频投放在电视墙上

在当今智能化、数字化的时代&#xff0c;视频监控已经成为各行各业不可或缺的一部分&#xff0c;无论是公共安全、交通管理、企业监控还是智慧城市建设&#xff0c;都离不开高效、稳定的视频监控系统的支持。而在这些应用场景中&#xff0c;将监控视频实时投放到大屏幕电视墙上…

新材料产业数据管理:KPaaS平台的创新驱动

近日&#xff0c;工业和信息化部、财政部、国家数据局联合印发《新材料大数据中心总体建设方案》&#xff08;以下简称《建设方案》&#xff09;&#xff0c;为新材料产业的发展注入了强大动力。该方案规划清晰&#xff0c;目标明确&#xff0c;旨在充分发挥大数据、人工智能对…

AI代币是什么?AI与Web3结合的未来方向在哪里?

近两年随着人工智能的崛起&#xff0c;AI已经渗透到制造业、电商、广告、医药等各个行业&#xff0c;加密货币领域也不例外&#xff0c;人工智能与区块链的融合&#xff0c;让我们看到了独特的数字资产 — AI加密代币。 它的流行始于2022年底&#xff0c;随着OpenAI智能聊天机…

关于springboot跨域与拦截器的问题

今天写代码的时候遇到的一个问题&#xff0c;在添加自己设置的token拦截器之后&#xff0c;报错&#xff1a; “ERROR Network Error AxiosError: Network Error at XMLHttpRequest.handleError (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:112:14) at Axi…