论文笔记:Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions

目录

  • 论文笔记:Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions
  • 笔者按
  • 摘要
  • 1 简介
  • 2 上下文相关的跨领域语义解析
    • 2.1 数据集
    • 2.2 任务定义
  • 3 方法
    • 3.1 Utterance-Table Encoder
    • 3.2 Interaction Encoder with Turn Attention
    • 3.3 Table-aware decoder
    • 3.4 Query Editing Mechanism
  • 4 相关工作
  • 5 实验结果
    • 5.1 Metric
    • 5.2 Baselines
    • 5.3 实现细节
    • 5.4 总体结果
    • 5.5 Effect of Query Editing
  • 6 结论
  • 参考

笔者按

这篇论文是针对多轮Text-to-SQL任务展开的。之前被广泛研究的数据集诸如WikiSQL、Spider都是单轮Text-to-SQL任务,每个问题语句之间都是相互独立的。而实际应用场景中,用户更倾向于通过对话方式进行一系列的相关SQL查询。因而,研究多轮Text-to-SQL更有实际意义一些。本文的创新点总结如下:

  1. 多轮对话任务中难度是层层递进的,所以SQL语句大部分是从之前轮次基础上增加或修改一些单词得到的(问题是一些在语义上有依赖关系的文本,其生成的SQL也会倾向于有overlap重叠),所以作者提出在解码时使用了一个copy-net机制显示的拷贝了之前轮次的生成结果。
  2. 在编码解码过程中用了一个文本、数据库schema和历史信息交互编码的方式来提取更好的特征。同时重用上一轮的SQL语句进行编辑。效果大大好于之前的方法。

摘要

我们主要关注跨域上下文相关的Text-to-SQL生成任务。我们观察到相邻的自然语言问题在语言上往往是依赖的,它们对应的SQL查询往往是重叠的,基于此,我们通过编辑之前预测的查询来利用交互历史来提高生成质量。我们的编辑机制将SQL视为序列,并以一种简单的方式在token级别重用生成结果。它可以灵活地更改单个token,并对错误传播具有健壮性。此外,为了处理不同领域中复杂的表结构,我们使用了一个utterance-table编码器和一个table-aware解码器来合并用户utternce的上下文和table schema。我们在SParC数据集上评估了我们的方法,并演示了与从头生成SQL的最先进的基线相比,使用编辑的好处。我们的代码可以在https://github.com/ ryanzhuich /sparc_atis_pytorch上找到。

1 简介

从用户的自然语言(论文中称为utterance)中生成SQL查询是帮助最终用户从数据库中获取信息的一项重要任务。在现实世界的应用程序中,用户经常通过询问一系列相关问题,在与系统的多次交互中访问信息。随着交互的进行,用户经常会引用询问历史中相关的内容,或者假设系统已经知道之前传递的信息,就会省略这些信息。

因此,在上下文相关的场景中,上下文历史对于理解用户的后续问题是至关重要的,系统经常需要重新生成在上一轮中生成的部分序列。最近,Suhr等人(2018)提出了一个上下文相关的Text-to-SQL模型,其中包括一个交互级别的编码器和对先前话语的注意机制。为了重用已经生成的内容,他们建议从前面的查询中复制完整的段。虽然他们的模型成功地推理了显式和隐式引用,但它不需要显式地处理不同的数据库模式,因为ATIS只包含订票域。此外,该模型仅限于复制由基于规则的过程提取的整个段,当段中只有一个或几个标记发生变化时,限制了它利用前一个查询的能力。

为了挖掘这一系列生成查询之间的相关性,并将系统推广到不同的领域,本文研究了一种基于编辑的跨领域上下文相关Text-to-SQL任务的方法。我们提出通过编辑上一轮的查询来生成查询。为此,我们首先将前面的查询编码为一个token序列,解码器计算一个开关以在token级别更改它。这种序列编辑机制对token级别的更改进行建模,因此对错误传播非常健壮。此外,捕捉用户的话语(utterance)和复杂的数据库模式(database schema)在不同的领域,我们使用一个基于BERT的utterance-table编码器与co-attention机制来共同编码用户utterance和column header,并采用table-aware解码器执行SQL生成与关注用户的话语(utterance)和列标题(column header)。

我们在SParC (Yu et al., 2019b)上评估了我们的模型,SParC是一个新的大规模数据集,用于在上下文中进行跨领域语义解析,它由138个领域的200多个数据库的SQL查询注释的一致的问题序列组成。实验结果表明,通过生成之前的查询,我们的模型提升了7%的问题匹配正确率和11%的交互匹配正确率。进一步的分析表明,我们的编辑方法在错误传播方面比复制段更健壮,如果基本的文本到sql生成准确性(无需编辑)得到提高,那么改进就会更加显著。

2 上下文相关的跨领域语义解析

2.1 数据集

我们使用SParC (Yu et al., 2019b),这是一个带有SQL标签的大规模跨域上下文相关语义解析数据集,作为我们的主要评估基准。表3显示了一个SParC示例。我们还报道了在ATIS中的表现(Hemphill et al., 1990;Dahl等人,1994a)与Suhr等人(2018)进行直接比较。此外,我们在SParC构建的Spider2 (Yu et al. 2018c)上评估了我们的模型的跨域上下文独立文本到SQL的能力。

表1和表2中的数据展示了不同数据集直接的统计指标比较。虽然已经对ATIS数据集进行了广泛的研究,但它仅限于一个特定的领域。相反,SParC是上下文相关的和跨域的。SParC中的每个交互都是使用Spider中的一个问题作为交互目标构造的,标注者在其中询问相互关联的问题,以获得完成目标的信息。SParC包含超过200个数据库的交互,它遵循与Spider相同的数据库分割,每个数据库只出现在train、dev和测试集中的一个集合中。总之,SParC为上下文相关的文本到sql带来了新的挑战,因为它(1)包含更复杂的上下文依赖关系,(2)具有更大的语义覆盖,(3)采用跨域任务设置。

2.2 任务定义

XXX代表一个自然语言语句,YYY代表其对应的SQL语句。上下文独立的语义解析任务仅仅考虑如何将XXX映射到YYY。在上下文相关的语义解析任务中,设一个交互III的序列中包含有n个utterance-query对。

在每一轮ttt,该任务的目标就是在给出当前的utterance XtX_tXt和交互历史

的条件下,生成正确的SQL语句YtY_tYt

此外,在跨域设置中,每个交互都基于不同的数据库。因此,该模型还将当前数据库的模式作为输入。我们考虑具有多个表的关系数据库,每个表包含多个列标题:

其中mmm代表column header的数目,每个clc_lcl由多个单词组成(即表名.列名,详见3.1)。

3 方法

我们采用了具有注意机制的Encoder-Decoder架构。如图1所示。该框架包括:
(1)一个utterance-table encoder在每一轮显式地对用户话语utterance和表模式table schema进行编码,
(2)一个与历史交互信息之间的turn-attention(turn是轮次的意思)模块用于解码
(3)一个考虑utterance的上下文、table schema、以及之前生成的查询的table-aware decoder,用于做出编辑决策。

3.1 Utterance-Table Encoder

一个有效的编码器可以捕获用户话语utterance的含义、表模式table schema的结构以及两者之间的关系。为此,我们构建了一个utterance-table encoder,并在这两者之间使用co-attention,如图2所示。

图2b展示了utterance encoder。对于每一轮交互时用户输入的utterance,我们首先使用一个Bi-LSTM来编码utterance token。Bi-LSTM的hidden state用来对所有column header的Embedding做一个attention(即utterance的hidden state作为attention模块中的decoder段输入,encoder段输入为column header的Embedding)。对于每个utterance token embedding,我们对column header embedding进行attention加权平均,以获得最相关的column。然后将Bi-LSTM的hidden state和column attention向量concatenate起来,再用一个Bi-LSTM来生成utterance token embedding hEh^EhE


图2c显示了table encoder。对于每个column header,我们连接它的表名和它的列名,由一个特殊的点标记(即,table_name.column_name)。每个column header都由一个Bi-LSTM处理。为了更好地捕获表模式的内部结构(例如,外键),我们在所有列标题中使用self-attention。然后我们使用一个attention层来捕捉utterance和table schema之间的关系。我们将self-attention向量和utterance attention向量连接起来,然后使用一个Bi-LSTM来生成最后的column header embedding hCh^ChC

请注意,由于co-attention机制的存在,这两个embedding相互依赖,因此在一次交互中,column header的表示在不同的utterance之间会发生变化。

Utterance-Table BERT Embedding. 我们考虑两个选项作为第一层双LSTM的输入。第一个选择是预先训练的词嵌入。其次,我们还考虑了基于BERT的上下文化词嵌入。具体来说,我们遵循Hwang et al.(2019)将用户话语utterance和所有列标题column header连接在一个由[SEP] token分隔的单一序列中:

将该序列输入到预先训练的BERT模型中,该模型最后一层的隐藏状态作为输入嵌入。

3.2 Interaction Encoder with Turn Attention

为了捕获不同utterance中的信息,我们在utterance-level encoder之上使用interaction-level encoder(交互级别的编码器)。在每一轮中,我们使用来自utterance-level encoder的最后一个时间步长的hidden state作为utterance encoding。这是interaction-level encoder的单向LSTM的输入:

这个interaction encoder的hidden state hIh^IhI在交互过程中对交互历史进行编码。
Turn Attention 在说出当前的utterance话语时,用户可以省略或明确提及前面提到的信息。为此,我们采用Turn Attention机制来捕捉当前话语与特定轮次话语之间的关联。在当前回合t,我们通过当前轮次与历史上以前轮次的注意力点积来计算Turn Attention,然后将之前轮次的utterance embeddings加权平均值加到当前轮次的utterance embedding:

ctturnc^{turn}_tctturn总结了上下文信息和当前用户查询,并将作为初始decoder状态,如下所述。

3.3 Table-aware decoder

我们使用LSTM解码器,通过合并交互历史、当前utterance和table schema来生成SQL查询。
假设当前解码为第k步,我们提供给decoder的输入是SQL query的qkq_kqk token的embedding和一个context vector ckc_kck

式中,hDh^DhD是decoder LSTMD\text{LSTM}^DLSTMD的hidden state,并且h0Dh_0^Dh0D通过ctturnc_t^{turn}ctturn来初始化。当一个query token是一个SQL关键词时,qkq_kqk是一个学习得到的embedding;当它是一个column header时,我们使用table-utterance encoder给出的column header embedding作为qkq_kqk。context vectorckc_kck的详情如下:
Context Vector with the Table and User Utterance. context vector由对table和用户utterance的Attention组成。首先,在每一步k,解码器计算decoder的隐藏状态与column header embedding之间的注意值。

其中lll是column headers的一个索引且hlCh_l^ChlC是它的embedding。其次,也计算decoder的hidden state和utterance token embedding之间的Attention。

其中i是轮次的索引,即第i轮,j是token的索引,并且hi,jEh^E_{i,j}hi,jE是第i轮utterance中的第j个token的embedding。context vector ckc_kck是如下的一个concatenation:
Output Distribution. 在输出层,decoder选择生成一个SQL关键字(例如,SELECT, WHERE, GROUP BY, ORDER BY)或列头。这对于跨域设定(即不同的示例中的table schema会发生变化)非常关键。为了实现这一点,我们使用单独的层来评分SQL关键字和列标题,最后使用softmax操作生成输出概率分布:

3.4 Query Editing Mechanism

在与系统的交互中,用户通常会问一系列紧密相关的问题来完成最终的查询目标。因此,为当前回合生成的查询常常与前面的查询有很大的重叠。

为了验证利用前一个查询的有效性,我们考虑通过对前一个query应用复制和插入操作来生成当前查询的过程。图3显示了SQL查询的长度以及不同回合的复制和插入操作的数量。随着交互的进行,用户问题变得更加复杂,因为它需要更长的SQL查询来回答。但是,更多的查询token与之前的查询重叠,因此在第三轮和之后,新token的数量仍然很小。

基于上述观察,我们使用query editing机制来扩展我们的table-aware decoder。我们首先通过第一个Bi-LSTM编码之前的query得到的hidden state为hi,j′Qh_{i,j'}^Qhi,jQ(即第i个query中的第j′j'j个token)。然后我们通过跟之前的query的Attention拓展context vector:

其中,ckqueryc_k^{query}ckquery是通过对query tokens hi,j′Qh_{i,j'}^Qhi,jQ做Attention后和公式(3)一样的形式获取的。

在每一个解码步,我们预测一个开关概率pcopyp_{copy}pcopy来决定是否我们需要从之前的query中复制或者插入一个新的token。

然后,我们使用一个单独的层在第t-1轮对query token进行评分,并将输出分布修改为如下以考虑编辑概率:

虽然复制机制由Gu et al.(2016)和See et al.(2017)引入,但他们侧重于从源句中复制摘要或响应生成应用。相比之下,我们的重点是编辑前面生成的查询,同时合并用户话语和表模式的上下文。

4 相关工作

语义解析是将自然语言的句子映射到形式表示的任务。它已经被研究了几十年,包括使用语言驱动的构成表征,如逻辑形式和lambda calculus,和可执行程序,如SQL查询和其他通用编程语言。大多数早期研究都是在少数领域和小数据集上进行的,如GeoQuery 和Overnight。

最近,大型和跨领域Text-to-SQL数据集,如Wikisql和Spider受到越来越多的关注,因为许多数据驱动的神经方法取得了有前景的结果。它们中的大多数仍然专注于通过将单轮查询问题转换为可执行查询来实现上下文无关的语义解析。

上下文相关语义解析的研究相对较少,包括ATIS,SpaceBook,SCONE ,SequentialQA ,SParC 和CoSQL。在ATIS上,Miller等人(1996)将utterances映射到语义框架,然后映射到SQL查询;Zettlemoyer和Collins(2009)从上下文无关的组合范畴语法(CCG)解析开始,然后解析引用,为句子序列生成lambda-calculus逻辑形式。与我们的工作最相关的是Suhr等人(2018),他们通过将交互历史与交互级编码器合并,并复制之前生成的查询片段,从交互中生成ATIS SQL查询。此外,SCONE包含三个使用堆栈或类列表元素的域,大多数查询包括单个二进制谓词。SequentialQA是通过分解WikiTableQuestions (Pasupat and Liang, 2015)中的一些复杂问题来创建的。由于SCONE和SequentialQA都只使用标记而不是query labels进行注释,所以它们不包含许多具有丰富语义和上下文类型的问题。例如,SequentialQA (Iyyer et al., 2017)要求后续问题的答案必须是之前答案的子集,大多数问题可以通过简单的SQL查询和SELECT WHERE子句来回答。

在我们工作的同时,Yu等人(2019a)引入了CoSQL,这是一个在Wizard-of-Oz设置下收集的大规模跨领域会话Text-to-SQL语料库。CoSQL中的每个对话都模拟一个数据库查询场景,用户是一个crowd worker,专家是一个熟悉SQL的大学计算机科学专业的学生。与其他语料库相比,CoSQL中的问题- sql对反映了用户背景的更大差异,并涉及对之间用户意图的频繁变化或需要用户澄清的模糊问题。这些特性给Text-to-SQL系统带来了新的挑战。

我们的工作也与最近提出的通过编辑生成代码的方法有关(Hayati等人,2018;Yin et al., 2019;Hashimoto等人,2018)。虽然它们遵循通过编辑从训练数据中检索到的相关示例来生成代码的框架,但我们关注依赖于上下文的设置,在该设置中,我们从系统本身预测的前一个查询生成查询。

5 实验结果

5.1 Metric

在Spider和SParC上,我们使用gold query和预测query之间的精确匹配准确率。为了避免排序问题,Yu等人(2018c)没有使用简单的字符串匹配,而是将预测查询分解为不同的SQL子句,如SELECT、WHERE、GROUP BY和ORDER BY,并分别使用集匹配为每个子句计算分数。在SparC上,我们报告了两个指标:问题匹配准确率,即所有问题的平均得分,以及交互匹配准确率,即所有交互的平均得分。

5.2 Baselines

SParC 我们和Yu发布的两个baseline模型进行对比。

(1)Context-dependent Seq2Seq (CD-Seq2Seq):该模型改编自Suhr et al.(2018)。原来的模型是为ATIS开发的,没有将数据库模式作为输入,因此不能很好地跨域泛化。Yu等人(2019b)通过添加一个双lstm数据库模式编码器来对其进行调整,以在多个域中执行上下文相关的SQL生成,该编码器将列标题的词袋表示作为输入。它们还修改解码器,以便在SQL关键字或列标头之间进行选择。
(2) SyntaxSQL-con:这是改编自原来的上下文无关的SyntaxSQLNet (Yu et al., 2018b),使用双lstm编码交互历史,包括utterance和相关的SQL query响应。它还使用列注意机制来计算前一个问题和SQL查询的表示形式。

5.3 实现细节

我们的模型是在PyTorch中实现的。我们使用预先训练的300维GloVe词嵌入。所有LSTM层都有300个隐藏层维度,我们使用1层编码LSTM, 2层解码LSTM。我们使用ADAM优化器在批大小为16的情况下最小化token级交叉熵损失。模型参数由均匀分布U[-0.1, 0.1]随机初始化。主模型的初始学习率为0.001,如果验证损失较前一时期增加,则主模型的初始学习率乘以0.8。当使用BERT而不是GloVe时,我们使用预先训练的samll uncased-BERT模型,其隐藏层维度为768,我们用单独的常数学习率0.00001对其进行微调。训练通常集中在10个epoch。

5.4 总体结果

Spider 表4显示了Spider数据集上的结果。因为每个问题都是独立的,所以我们不使用交互级解码器或query editing。我们的方法在开发集上的性能达到36.4%,在测试集上的性能达到32.9%,为上下文无关的跨域文本到sql生成提供了一个强大的模型。这演示了我们的话语表编码器和表感知解码器处理用户话语语义的有效性,以及在不可见域中生成复杂SQL查询的表模式的复杂性。

此外,添加utterance-table BERT embedding有显著的改进,在开发集上达到57.6%,在测试集上达到53.4%,这与使用BERT的IRNet的最新结果相当。我们将我们的BERT模型的高表现归因于
(1)预先训练的BERT模型在经验上强大的文本理解能力和
(2)utterance和column headers之间的早期交互,即当它们被串联成一个单一序列作为BERT输入。

SParC 表5显示了SParC数据集上的结果。与Spider类似,我们的模型在没有先前查询作为输入的情况下已经优于SyntaxSQL-con,达到了31.4%的问题匹配准确率和14.7%的交互匹配准确率。此外,与CD-Seq2Seq相比,我们的模型在解码阶段具有表语编码器、turn attention、话语和表图式的联合考虑等优点。这将提高10%的问题准确率和6%的交互准确率。

此外,我们还研究了复制段的影响。我们使用与Suhr等人(2018)相同的段复制过程:首先确定地从之前的查询中提取段,并使用LSTM编码每个段,然后根据其段编码计算其输出概率生成段。但是,由于Suhr et al.(2018)的段提取是专门为ATIS数据集设计的,我们通过提取SELECT、from、GROUP by、ORDER by子句以及WHERE子句中的不同条件,实现了自己的段提取过程。通过这种方式,平均每个SQL可以提取3.9个段。我们发现,将段复制添加到CD-Seq2Seq中,在问题匹配上的性能略低,在交互匹配上的增益较小,而使用从gold query中提取的段可以获得更高的结果。这说明段复制容易受到错误传播的影响。此外,它只能复制整个段,因此很难捕获查询中仅一个或几个标记的更改。

为了更好地理解模型在交互过程中是如何执行的,图4(左)显示了开发集的性能划分。考虑到更长的背景历史,后面的问题更难回答。虽然随着回合数的增加,基线的性能会降低,但我们的模型在第2和第3轮次仍然保持38%-48%的准确率,在第4回合或更多时保持20%的准确率。类似地,图4(右)显示了由硬度等级和示例频率划分的性能。这也表明我们的模型在回答困难和额外困难的问题时更有竞争力。

ATIS 我们还在表6中报告了模型在ATIS上的性能。我们的模型实现了36.2%的dev和43.9%的测试串精度,与Suhr等人(2018)的水平相当。在ATIS上,我们只应用我们的编辑机制,重用他们的utterance encoder而不是BERT的utterance-table encoder,因为ATIS是单域的。

5.5 Effect of Query Editing

我们进一步研究query editing机制的效果。为此,我们对模型应用gold query和预测的query的编辑,无论是否有utterance-table BERT embedding。我们还进行了消融研究,分别验证了query attention和sequence editing的作用。

如表5所示,编辑gold query可以不断提高问题匹配和交互匹配的准确性。这表明,当前面的查询是oracle(即前面的查询是完全正确的)时,编辑方法确实有助于提高生成质量。

使用预测的查询是一种更现实的设置,在这种情况下,由于模型本身产生的错误查询,模型会受到错误传播的影响。对于没有utterance-table BERT embedding的模型,使用预测查询只能提高约1.5%。如图5所示,这是因为编辑机制对第4轮更有帮助,第4轮占了所有问题示例的一小部分。对于有utterance-table BERT embedding的模型,每轮查询的生成精度都有显著提高,从而降低了误差传播效果。在这种情况下,编辑方法提供了持续的改进,问题匹配准确率提高了7%,交互匹配准确率提高了11%。图5还显示了使用BERT进行query editing的好处。

最后,作为一项消融研究,表5还报告了在开发集中只关注query attention(使用预测的查询)的结果。这比我们的无查询注意的简单BERT模型有所改进,达到了42.7%的问题和21.6%的交互匹配准确率。通过query editing,我们的最佳模型进一步提高了47.2%的问题和29.5%的交互匹配准确率。这分别演示query attention和query editing的有效性,这两者对于使用前面的查询都是必不可少的。

6 结论

在本文中,我们提出了一个基于编辑的encoder-decoder模型来解决上下文相关的跨域Text-to-SQL生成问题。虽然简单,但实证结果证明了我们的编辑机制的好处。这种方法在错误传播方面比复制段更健壮,而且当基础的Text-to-SQL生成质量(无需编辑)更好时,它的性能会提高。

参考

  1. Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions, pdf
  2. 多轮text-to-SQL 任务介绍, link

论文笔记:Editing-Based SQL Query Generation for Cross-Domain Context-Dependent Questions相关推荐

  1. 论文笔记 ISCC 2019|BGP Dataset Generation and Feature Extraction for Anomaly Detection

    文章目录 1 简介 1.1 动机 1.2 创新 2 背景知识 3 方法 3.1 特征提取 3.2 数据集生成 3.3 流量行为趋势分析 3.3.1 Anomaly and regular traffi ...

  2. 《Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network》论文笔记

    <Improved Crowd Counting Method Based onScale-Adaptive Convolutional Neural Network>论文笔记 论文地址 ...

  3. 《Microsoft Sql server 2008 Internal》读书笔记--第八章The Query Optimizer(1)

    <Microsoft Sql server 2008 Interna>读书笔记订阅地址: http://www.cnblogs.com/downmoon/category/230397.h ...

  4. 小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks.

    小样本论文笔记5:Model Based - [6] One-shot learning with memory-augmented neural networks 文章目录 小样本论文笔记5:Mod ...

  5. 论文笔记—A Review of Visual-LiDAR Fusion based Simultaneous Localization and Mapping

    论文笔记-A Review of Visual-LiDAR Fusion based Simultaneous Localization and Mapping 论文链接 文章摘要 ~~~~    ~ ...

  6. 论文笔记(八):360 VR Based Robot Teleoperation Interface for Virtual Tour

    360 VR Based Robot Teleoperation Interface for Virtual Tour 文章概括 摘要 1. 介绍 2. 方法和系统设计 2.1 系统结构 2.2 远程 ...

  7. 论文笔记-Hybrid Retrieval-Generation Reinforced Agent for Medical Image Report Generation

    论文笔记-Hybrid Retrieval-Generation Reinforced Agent for Medical Image Report Generation 创新点:混合检索生成+强化学 ...

  8. 论文笔记 A Spatial-Temporal Decomposition Based Deep Neural Network for TimeSeries Forecasting

    0 abstract 空间时间序列预测问题出现在广泛的应用中,如环境和交通问题.由于存在特定的空间.短期和长期模式,以及维度的诅咒,这些问题具有挑战性. 在本文中,我们提出了一个用于大规模空间时间序列 ...

  9. 论文笔记目录(ver2.0)

    1 时间序列 1.1 时间序列预测 论文名称 来源 主要内容 论文笔记:DCRNN (Diffusion Convolutional Recurrent Neural Network: Data-Dr ...

最新文章

  1. Gradle安装使用以及基本操作
  2. 技术图文:Numpy 一维数组 VS. Pandas Series
  3. 随机变量的数字特征(数学期望,方差,协方差与相关系数)
  4. fiddler抓取https的最终说明
  5. 深度学习1:生成模型的输入数据集和可视化
  6. [USACO12MAR]拖拉机
  7. Crystal Reports第一张报表
  8. 【POJ - 3259 】Wormholes(Bellman_Ford或spfa算法,判断有向图中是否存在负环)
  9. 二阶等差数列的性质及应用
  10. [leedcode 229] Majority Element II
  11. 售前十年,两种人生,多重感悟!
  12. Java中几种高性能的队列
  13. String类的编码和解码问题
  14. python合并单元格居中_Python实现Excel自动分组合并单元格
  15. MySQL-第九篇分组和组函数
  16. 关于青果教务系统一点小研究
  17. 程序员教程-1章-计算机系统基础知识
  18. 从《虎嗅》改版说说小作坊如何做产品和项目管理
  19. 【kaggle】印度语和泰米尔语问答赛题baseline
  20. 全球与中国琴键式拨码开关市场现状及未来发展趋势

热门文章

  1. 2021年武威铁路中学高考的成绩查询,武威铁路中学统筹推进2020-2021学年第二学期开学工作纪实...
  2. 空洞骑士复活歌女玛丽莎的方法(复活其他灵魂NPC同理)
  3. 68个经典励志小故事,让你终身受益[转]
  4. 《智能制造》总结报告
  5. 什么是MT4?(2022MT4简介)
  6. 【清华集训2014】玛里苟斯(数学 线性基)
  7. 堆结构(二) - 左倾堆的原理与实现
  8. 随手记:小程序相关知识点
  9. 基于MTK平台kpd驱动初步分析
  10. 数据标注去哪接任务订单?靠谱的数据标注平台有哪些?