当前位置: 首页 > news >正文

论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能

摘要

        思维链提示(Chain-of-thought prompting)在多种自然语言推理任务上展现了卓越的性能。然而,在需要解决的问题比提示中展示的示例更难的任务上,它的表现往往不佳。为了克服从简单到困难的泛化挑战,我们提出了一种新颖的提示策略,即最少到最多提示(least-to-most prompting)。这个策略的核心思想是将复杂问题分解为一系列更简单的子问题,然后按顺序解决它们。解决每个子问题都得益于之前解决的子问题的答案。我们在与符号操作、组合泛化和数学推理相关的任务上进行了实验,结果显示最少到最多提示能够泛化到比提示中看到的更难的问题。一个值得注意的发现是,当使用最少到最多提示的GPT-3 code-davinci-002模型时,它可以在任何分割(包括长度分割)中以至少99%的准确率解决组合泛化基准测试SCAN,而仅使用了14个示例,相比之下,思维链提示的准确率仅为16%。这一点尤其值得关注,因为文献中专注于解决SCAN的神经符号模型是在包含超过15,000个例子的整个训练集上训练的。我们在附录中包含了所有任务的提示。

1 引言

        尽管深度学习在过去十年取得了巨大的成功,但人类智能与机器学习之间仍然存在巨大的差异:(1)给定一个新的任务,人类通常可以从几个演示示例中学会完成它,而机器学习需要大量的标记数据进行模型训练;(2)人类可以清楚地解释其预测或决策的基本原理,而机器学习本质上是一个黑盒子;(3)人类可以解决比他们以前见过的任何困难的问题,而对于机器学习,训练和测试中的示例通常处于相同的难度水平。

        最近提出的思维链提示方法(Wei et al ., 2022;Chowdhery et al, 2022)为缩小人类智能和机器智能之间的差距迈出了重要的一步。它结合了自然语言原理的思想(Ling et al, 2017;Cobbe等人,2021),并辅以少量提示(Brown等人,2020)。当进一步与自一致性解码(Wang et al ., 2022b)相结合,而不是使用典型的贪婪解码时,在许多具有挑战性的自然语言处理任务上,几次思维链提示在很大程度上优于文献中最先进的结果,这些任务是由经过数百倍注释示例训练的特殊设计的神经模型获得的,同时是完全可解释的。

        然而,思维链提示有一个关键的局限性——它在需要泛化的任务上表现往往不佳,这些任务涉及解决比演示示例更难的问题,例如组合泛化(Lake & Baroni, 2018; Keysers et al., 2020)。为了解决这种从简单到困难的泛化问题,我们提出了最少到最多提示。它包括两个阶段:首先将一个复杂问题分解为一系列较简单的子问题,然后依次解决这些子问题,其中解决给定的子问题是通过之前解决的子问题的答案来辅助的。这两个阶段都是通过少样本提示来实现的,因此在任一阶段都没有训练或微调。最少到最多提示的一个使用示例在图1中展示。

图1:最小到最多提示分两个阶段求解数学单词问题:(1)查询语言模型,将问题分解为子问题;(2)查询语言模型,依次求解子问题。第二个子问题的答案建立在第一个子问题的答案之上。本图中省略了每个阶段提示符的演示示例。

        “最少到最多提示”一词是从教育心理学中借用来的(Libby et al, 2008),在那里它被用来表示使用渐进提示序列来帮助学生学习新技能的技术。在这里,我们将这种技术应用于教授人类语言模型。关于符号操作、组合泛化和数学推理的经验结果表明,从最少到最多的提示确实可以泛化到比所演示的更难的问题。

2 从最少到最多的提示

        最小到最大提示教导语言模型如何通过将复杂问题分解为一系列更简单的子问题来解决复杂问题。它由两个连续的阶段组成:

  1. 分解。此阶段的提示包含演示分解的固定示例,然后是要分解的特定问题。
  2.  子问题解决。这一阶段的提示由三部分组成:(1)演示如何解决子问题的恒定示例;(2)之前回答的子问题和生成的解决方案的潜在空列表,以及(3)接下来要回答的问题。

        在图1所示的示例中,首先要求语言模型将原始问题分解为子问题。传递给模型的提示包含演示如何分解复杂问题的示例(图中未显示),然后是要分解的特定问题(如图所示)。语言模型指出,原始问题可以通过解决中间问题“每次旅行需要多长时间?”来解决。

        在下一阶段,我们要求语言模型从问题分解阶段依次解决子问题。原问题作为最后一个子问题追加。解决开始于向语言模型传递一个提示,该提示由说明如何解决问题的示例组成(图中未显示),然后是第一个子问题“每次旅行需要多长时间?”。然后我们使用语言模型生成的答案(“……每次行程需要5分钟”),并通过将生成的答案附加到前一个提示,然后添加下一个子问题来构造下一个提示,该子问题恰好是本例中的原始问题。然后将新的提示传递回语言模型,语言模型返回最终答案。

        最少到最多提示可以与思维链(Wei et al ., 2022)和自洽(Wang et al ., 2022b)等其他提示技巧相结合,但并不一定要结合。此外,对于某些任务,最少到最多提示的两个阶段可以合并成一个单遍提示。

3 结果

        我们给出了符号操作、组合泛化和数学推理任务的最少到最多提示结果,并将其与思维链提示进行比较。

3.1 符号操作

        我们采用了末字母拼接任务(Wei et al., 2022)。在这个任务中,每个输入是一个单词列表,相应的输出是列表中单词的最后一个字母的拼接。例如,“thinking, machine”的输出是“ge”,因为“thinking”的最后一个字母是“g”而“machine”的最后一个字母是“e”。当测试列表的长度与提示示例中的列表相同时,思维链提示能够完美完成工作。然而,当测试列表的长度远长于提示示例中的列表时,它的表现就很差。我们展示了最少到最多提示克服了这个局限性,并且在长度泛化上显著优于思维链提示。

        最少到最多提示。末字母拼接任务的最少到最多提示上下文分别显示在表1和表2中。表1中的示例展示了如何将一个列表分解为一系列子列表。表2中的示例展示了如何将输入映射到期望的输出。给定一个新列表,我们首先将其附加到表1中的示例以构建分解提示,然后将该提示发送到语言模型以获得列表的分解。接着,我们为每个子列表S构建一个解决方案提示,该提示由表2中的示例组成,后面跟着之前的子列表/响应对(如果有的话),然后是S。我们依次将这些提示发送给语言模型,并使用最后一个响应作为最终解决方案。

表1:末字母拼接任务的最少到最多提示上下文(分解)。它可以以100%的准确率将任意长度的列表分解为顺序子列表。

表2:末字母拼接任务的最少到最多提示上下文(解决方案)。这个提示中的两个示例实际上展示了一个基本情况和一个递归步骤。


        值得仔细研究表2中的示例。本质上,它们教会语言模型如何利用之前解决过的问题的答案来构建新问题的答案:(1) 第二个示例中的列表(“think, machine, learning”)是第一个示例中列表(“think, machine”)的扩展,而不是一个完全独立的列表;(2) 对“think, machine, learning”的响应是建立在“think, machine”的输出之上的,起始句子表明“think, machine”的输出是“ke”。这两个示例一起展示了一个基本情况和一个递归步骤。

        思维链提示。末字母拼接任务的思维链提示上下文列在表3中。它使用了与表2中最少到最多提示相同的列表。唯一的区别在于,在思维链提示中,对第二个列表(“think, machine, learning”)的响应是从头开始构建的,而不是使用第一个列表(“think, machine”)的输出。

        我们比较了从最少到最多的提示(表1和2)、思维链提示(表3)和标准少样本提示。标准少样本提示的提示是通过删除思维链提示中的中间解释来构建的。也就是说,它只由这两个例子组成:(1)“think, machine”输出“ke”;(2)“think, machine, learning”输出“keg”。我们不考虑训练或微调基线,因为基于两个示例的机器学习模型泛化效果非常差。

表3:最后一个字母连接任务的思维链提示上下文。与表2中的最小到最大提示不同,思维链提示中的示例彼此独立。

        结果。我们随机抽取Wiktionary1中的单词,以构建长度从4到12不等的测试列表。对于每个给定的长度,将构造500个列表。GPT-3中编码为davici -002的不同方法的精度见表4。标准提示以0的精度完全失败所有测试用例。思维链提示比标准提示显著提高了性能,但它仍然远远落后于从最少到最多的提示,特别是当列表很长时。此外,随着提示长度的增加,思维链提示的性能下降速度比从最小到最多提示快得多。

表4:不同提示方法在最后一个字母连接任务上的准确率。测试列表的长度从4个增加到12个。

        在附录7.2和7.3中,我们展示了使用不同连锁思维提示和不同语言模型的额外实验。请注意,与最少到最多提示相比,思维链提示中的示例可以是相互独立的。对于末字母拼接任务,这意味着我们不需要呈现作为其他示例子列表的示例。实际上,包含独立列表的思维链提示往往优于包含依赖列表的提示,因为前者传达了更多信息。此外,我们可以通过引入额外的示例来增强思维链提示。这似乎是公平的,因为最少到最多提示由于其额外的分解而包含更多的单词。如表13(附录7.3)所示,对于长度为12的列表,思维链提示在使用4个独立示例时达到了37.4%的准确率(附录7.2.2),在使用8个独立示例时达到了38.4%的准确率(附录7.2.3)。尽管与表3中原始提示的31.8%的准确率相比已经有了显著的进步,但思维链提示仍然落后于最少到最多提示,后者拥有74.0%的准确率。

        误差分析。虽然从最少到最多的提示明显优于思维链提示,但对于长列表,它仍远未达到100%的准确性。在附录7.4中,我们给出了详细的误差分析。我们发现只有很少的错误是由于不正确的最后一个字母,而大多数是连接错误(减少或增加一个字母)。例如,给定列表“gratified, contract, fortitude, blow”,该模型会去掉“dte”和“w”的最后一个字母,从而预测结果是“dte”而不是“dtew”。在另一个例子“hollow, supplies, function, gorgeous”中,模型以某种方式复制了“wsn”和“s”串联中的最后一个字母“s”,因此预测结果变成了“wsnss”而不是“wsns”。

3.2 组合泛化

        SCAN (Lake & Baroni, 2018)可能是评估构图泛化最流行的基准。它需要将自然语言命令映射到动作序列(表5)。序列到序列模型在长度分割下表现不佳,训练集中的动作序列(约占20,000多个样本的完整集合的80%)比测试集中的动作序列短。已经提出了许多专门的神经符号模型来解决SCAN (Chen et al ., 2020;Liu et al ., 2020;Nye et al, 2020;Shaw等人,2021;金正日,2021)。我们展示了使用最少到最多提示的大型语言模型可以仅使用几个演示示例来解决SCAN问题。不需要训练或微调。

表5:SCAN中的示例命令及其相应的动作序列。agent通过执行相应的动作序列成功执行自然语言命令。

        Least-to-most提示。与第3.1节中的最后一个字母连接任务类似,SCAN的最小到最大提示基于两种提示:(1)包含8个示例的命令分解提示,用于演示如何将长命令分解为短命令列表(其中一些示例参见表6);(2)包含14个示例的命令映射提示符,用于演示如何将自然语言命令映射到动作序列(其中一些示例参见表7)。分解和映射的完整提示上下文列在附录8中。命令映射提示符中使用的示例旨在完全涵盖SCAN命令的语义。

表6:将长命令分解为短命令序列的两个示例,从提示符最少到最多。

表7:从最少到最多/思维链提示中获取的两个示例,用于将命令映射到动作序列。Python表达式被用作中间表示。

        我们使用Python表示法来使我们的最少到最多提示以及基线(标准少样本提示和思维链提示)简洁,并满足语言模型的输入大小限制(通常最多2048个令牌)。例如,在我们的提示设计中,我们将“look twice”映射为“LOOK” * 2,而不是“LOOK LOOK”。我们需要指出的是,这些Python表达式只是中间表示。从语言模型获得响应后,我们运行一个后处理脚本来扩展Python表达式以生成最终结果。然而,我们也可以进一步教授语言模型正确处理表达式,这并不令人惊讶。在附录8.4中,我们展示了通过几个演示示例,语言模型能够以接近完美的99.7%的准确率扩展Python表达式。

        思维链提示。用于SCAN的思维链提示使用了与最少到最多提示相同的命令映射上下文(见表7),但它不使用命令分解,这是最少到最多提示所独有的。

        结果。我们将最少到最多提示与思维链提示和标准的少样本提示进行比较。标准的少样本提示范例是通过去掉中间解释,从思维链提示中得到的。不同语言模型下不同提示方法的准确率如表8所示。示例输出可以在附录8.3中找到。使用代码-davinci-002,在长度分割下,最小到最大提示的准确率达到99:7%。我们还在所有其他分割甚至整个SCAN数据集上测试了从最少到最多的提示。我们发现它的求解速度保持不变。此外,值得注意的是,代码- davincii -002始终优于文本- davincii -002,而与提示方法无关。

表8:长度分割下SCAN测试集上不同提示方式的准确率(%)text- davici -002的结果基于100个命令的随机子集。

        误差分析。在长度分割的测试集中,提示从少到多共有13个错误,其中6个错误地将“twice”和“three”解释为“around”后面的“twice”和“three”,其余错误地将“after”解释为“and”。让我们为每个类别展示一个失败的例子。在示例“在向右跑三圈后向右走两次”中,code- davincii -002正确地将表达式“向右跑”翻译为(“向右转”+“跑”)* 4。然后,当对这个表达式应用“三次”时,它犯了一个错误,产生(“右转”+“跑”)* 9而不是(“右转”+“跑”)* 4 * 3或(“右转”+“跑”)* 12。在示例“向左运行三次后向左运行两次”中,code-davinci-002为两个由“after”连接的子表达式生成正确的翻译,但它将它们组合起来,就好像它们是由“and”连接一样。这意味着模型产生(“左转”* 2 +“跑”)* 3 +(“左转”+“跑”)* 4 * 2而不是(“左转”+“跑”)* 4 * 2 +(“左转”* 2 +“跑”)* 3。详细的误差分析见附录8.2。

3.3数学推理

        在本节中,我们应用最小到最大提示来解决GSM8K (Cobbe等人,2021)和DROP (Dua等人,2019)中的数学单词问题。我们特别感兴趣的是,结合最少到最多提示的大型语言模型是否可以解决比提示中看到的更困难的问题。在这里,我们只是通过解决步骤的数量来衡量难度。

        我们为解决GSM8K而设计的提示符如表9所示。演示范例由两部分组成。第一部分(从“让我们来分解这个问题……”开始))展示了如何将原始问题分解为更简单的子问题,第二部分展示了如何按顺序解决子问题。请注意,此提示将分解和子问题解决合并到单个步骤中。相反,可以设计两个不同的提示分别用于分解和子问题解决,就像前面部分中最少到最多的提示一样,以进一步提高性能。在这里,我们将重点研究如何将这个简单的“最小到最多”提示从简单的两步问题推广到更复杂的多步问题。

表9:解决GSM8K的最小到最大提示。演示问题只需要两个步骤就可以解决,但是提示符可以处理需要多个步骤才能解决的问题。

        我们还构建了一个思维链提示(表10)作为基线。它是通过删除分解部分从最小到最大提示(表9)派生出来的。结果如表11所示。

        总的来说,从最少到最多的提示只略微提高了思维链提示:从60:97%提高到62:39%;然而,从最少到最多的提示从根本上提高了解决至少需要5个步骤的问题的思维链提示:从39:07%提高到45:23%(表12)。

        我们发现,在GSM8K中,几乎所有从最少到最多提示都无法解决的问题,最终都可以通过使用手工制作的分解来解决。这不足为奇。对于我们人类来说,只要我们知道如何将一个复杂的问题分解成更简单的子问题,我们实际上已经解决了它。对于DROP基准,从最少到最多的提示在很大程度上优于思维链提示(表11)。这可能是因为DROP中的大多数问题都可以简单地分解。

表10:解决GSM8K的思维链提示。它是通过删除分解部分从表9中最小到最大的提示派生出来的。

表11:不同提示方法在GSM8K和DROP上的准确率(%)(仅包含数值问题的子集)。基本语言模型是code-davinci-002。

表12:最少到最多提示和思维链提示的准确性(%),按预期解决方案中所需推理步骤的数量进行细分。

4 相关工作

        组合泛化。SCAN(Lake & Baroni, 2018)是一个广泛使用的基准测试,用于评估组合泛化能力。在其所有分割中,最具挑战性的是长度分割,它要求模型能够泛化到比训练序列更长的测试序列。之前在SCAN上表现良好的工作大多提出了神经符号架构(Chen et al., 2020; Liu et al., 2020)和语法诱导技术(Nye et al., 2020; Shaw et al., 2021; Kim, 2021)。Chen等人(2020)提出了神经符号堆栈机器,其中包含一个神经网络作为控制器,为给定的输入生成执行轨迹,以及一个符号堆栈机器来执行轨迹并产生输出。执行轨迹由用于序列操作的特定于领域的原语组成,这使得机器能够将输入句子分解为不同的组件,分别翻译它们,并将它们组合在一起。Liu等人(2020)提出了一个框架,该框架协作学习两个神经模块,一个组合器和一个求解器,以共同学习输入结构和符号语法规则。Nye等人(2020)和Shaw等人(2021)推断出了SCAN的符号语法规则,而Kim(2021)提出了学习潜在神经语法的方案。尽管带有符号组件的方法能够在SCAN上达到100%的准确率(Chen et al., 2020; Liu et al., 2020; Nye et al., 2020; Shaw et al., 2021),但它们需要复杂的模型训练和语法推断算法来搜索大型语法空间。另一项关于SCAN的工作设计了数据增强方案(Andreas, 2020; Akyurek et al. ¨ , 2021; Lake, 2019)。Andreas(2020)和Akyurek等人(2021)通过重新组合不同训练样本中出现的片段来构建合成训练样本,而Akyurek等人(2021)进一步设计了一种抽样方案,鼓励重新组合模型产生稀有样本。另一方面,Lake(2019)提出了一个元训练算法,该算法需要一个元语法空间来构建训练数据,样本语法的格式与SCAN语法相似。尽管这些数据增强技术提高了在几个组合泛化基准测试上的性能,但它们未能解决SCAN的长度分割问题。其他先前的工作提出了神经网络架构来改善组合泛化,其中鼓励模型学习单词和跨度映射(Russin et al., 2019; Li et al., 2019),输入和输出的对齐作为跨度树(Herzig & Berant, 2021),以及输入和输出单词的排列等变性(Gordon et al., 2020)。然而,这些没有符号组件的端到端神经网络仍然无法泛化到更长的测试输入。与现有工作不同,我们展示了在没有专门设计来改善组合泛化的模型架构和符号组件的情况下,最少到最多提示仅凭少量的演示示例在任何分割(包括长度分割)上达到了99.7%的准确率,并且不需要任何训练或微调。

        从简单到困难的泛化。除了组合泛化之外,还有许多其他任务,测试用例需要比训练示例更多的推理步骤来解决,例如,末字母拼接任务中的测试列表比演示示例更长。Dong等人(2019)提出了神经逻辑机器(NLMs),用于归纳学习和逻辑推理。在小型任务(如小块世界)上训练的NLMs能够完美地泛化到大型任务(如更大的块世界)。Schwarzschild等人(2021)表明,通过在推理过程中执行额外的递归,训练来解决简单问题(如小尺寸迷宫或棋盘谜题)的递归网络能够解决更复杂的问题(如大尺寸迷宫或棋盘谜题)。在我们的方法中,我们通过将复杂问题分解为一系列更简单的问题来实现从简单到困难的泛化。

        任务分解。Perez等人(2020)将多跳问题分解为若干独立的单跳子问题,这些子问题由现成的问答(QA)模型回答。然后,将这些答案汇总形成最终答案。问题分解和答案聚合都是由训练过的模型实现的。Wang等人(2022a)通过将提示建模为连续的虚拟令牌,并通过迭代提示从语言模型中逐步引出相关知识来执行多跳QA。与这些方法不同,我们的方法不涉及任何训练或微调。此外,最少到最多提示中生成的子问题通常是相互依赖的,并且必须按照特定的顺序依次解决,以便一些子问题的答案可以作为解决其他子问题的构建块。Yang等人(2022)通过将问题分解为一系列与SQL子句对应的自然语言提示,并通过基于规则的系统将自然语言问题翻译为SQL查询。Wu等人(2022)提出串联大型语言模型的步骤,使得一个步骤的输出成为下一步的输入,并开发了一个交互式系统,供用户构建和修改链。最少到最多提示串联了问题分解和子问题解决的过程。

5 局限性

        分解提示通常不能很好地跨不同领域泛化。例如,一个展示数学应用题分解的提示(如表9所示)对于教导大型语言模型分解常识推理问题,如“亚里士多德使用笔记本电脑吗?”(Geva et al., 2021)是无效的。为了达到最佳性能,必须为这类问题设计一个新的提示来展示分解。即使在同一领域内,泛化分解也是困难的。我们观察到,如果大型语言模型能够得到GSM8K中几乎所有问题的正确分解,那么这些问题就可以准确地解决。这一发现并不令人惊讶,并且与我们在解决数学问题时的经验相符。每当我们成功地将一个数学问题分解为可以解决的更简单的子问题时,我们实际上已经解决了原始问题。在末字母拼接任务和SCAN基准测试上取得了卓越的结果,因为这些任务中的分解相对简单。

6 结论与讨论

        我们引入了最少到最多提示,以使语言模型能够解决比提示中更难的问题。这种方法包括一个两步过程:问题的自顶向下分解和自底向上的解决方案生成。我们的实证研究涵盖了符号操作、组合泛化和数学推理,发现最少到最多提示显著超越了标准提示和思维链提示。
        一般来说,提示可能不是教导大型语言模型推理技能的最佳方法。提示可以被视为一种单向通信形式,我们向语言模型发出指令,而不考虑其反馈。一个自然的发展趋势是将提示演变为完全双向的对话,使语言模型能够获得即时反馈,从而实现更高效和有效的学习。最少到最多提示技术代表着通过这种双向互动来指导语言模型的一个步骤。

相关文章:

论文翻译 | LEAST-TO-MOST: 从最少到最多的提示使大型语言模型中的复杂推理成为可能

摘要 思维链提示(Chain-of-thought prompting)在多种自然语言推理任务上展现了卓越的性能。然而,在需要解决的问题比提示中展示的示例更难的任务上,它的表现往往不佳。为了克服从简单到困难的泛化挑战,我们提出了一种新…...

【区块链 + 智慧政务】都江堰区块链公共服务应用平台 | FISCO BCOS应用案例

都江堰区块链公共服务应用平台是四川开源观科技有限公司运用 FISCO BCOS 区块链技术为都江堰市建设的市级 区块链节点平台,该平台上线运营一年以来已在政务服务、社区养老和慈善公益领域落地 3 个应用,上链数据超 过 30 万条。 区块链 政务服务应用&am…...

Python从0到100(三十九):数据提取之正则(文末免费送书)

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…...

redis redisson(仅供自己参考)

redis 通过setnx实现的分布式锁有问题 如图: 解决的新的工具为(闪亮登场):redisson redisson可重入锁的原理 实现语言lua: 加锁实现脚本语言: 释放锁的脚本语言: 加锁的lua -- 首先判断这个锁…...

【C语言初阶】探索编程基础:深入理解分支与循环语句的奥秘

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言入门 🌹🌹期待您的关注 🌹🌹 ❀分支与循环语句 📒1.…...

ERP基础知识

ERP 一、概述 ​ ERP是Event-related Potentials的简称。外加一种特定的刺激,作用于感觉系统或脑 的某一部位,在给予刺激或撤销刺激时,或和当某种心理因素出现时在脑区所产生的电位变化,成为事件相关电位,是一种特殊…...

C++是否可以使用.获取union、struct中的成员变量的地址

C可以使用.获取union、struct中的成员变量的地址 示例代码如下所示 #include <stdio.h> #include <stdint.h>struct u128 { uint64_t v64; uint64_t v0; };int main() {union { unsigned __int128 ui; struct u128 s; } union_temp_m128;void* p1 &union_te…...

【前端】包管理器:npm、Yarn 和 pnpm 的全面比较

前端开发中的包管理器&#xff1a;npm、Yarn 和 pnpm 的全面比较 在现代前端开发中&#xff0c;包管理器是开发者必不可少的工具。它们不仅能帮我们管理项目的依赖&#xff0c;还能极大地提高开发效率。本文将详细介绍三种主流的前端包管理器&#xff1a;npm、Yarn 和 pnpm&am…...

C++ 类和对象 赋值运算符重载

前言&#xff1a; 在上文我们知道数据类型分为自定义类型和内置类型&#xff0c;当我想用内置类型比较大小是非常容易的但是在C中成员变量都是在类(自定义类型)里面的&#xff0c;那我想给类比较大小那该怎么办呢&#xff1f;这时候运算符重载就出现了 一 运算符重载概念&…...

【Python实战因果推断】35_双重差分6

目录 Strict Exogeneity No Time Varying Confounders No Feedback No Carryover and No Lagged Dependent Variable Strict Exogeneity 严格的外生性假设是一个相当技术性的假设&#xff0c;通常用固定效应模型的残差来表示&#xff1a; 严格的异质性说明&#xff1a; 这…...

【HarmonyOS】关于官方推荐的组件级路由Navigation的心得体会

前言 最近因为之前的630版本有点忙&#xff0c;导致断更了几天&#xff0c;现在再补上。换换脑子。 目前内测系统的华为应用市场&#xff0c;各种顶级APP陆续都放出来beta版本了&#xff0c;大体上都完成了主流程的开发。欣欣向荣的气息。 学习思路 关于学习HarmonyOS的问题…...

Spring中事件监听器

实现ApplicationListener接口 Configuration public class A48 {public static void main(String[] args) {AnnotationConfigApplicationContext context new AnnotationConfigApplicationContext(A48.class);context.getBean(MyService.class).doBusiness();context.close()…...

案例|LabVIEW连接S7-1200PLC

附带&#xff1a; 写了好的参考文章&#xff1a; 通讯测试工具和博图仿真机的连接教程【内含图文完整过程软件使用】 解决博图V15 V16 V17 V18等高版本和低版本在同款PLC上不兼容的问题 目录 前言一、准备条件二、步骤1. HslCommunicationDemo问题1&#xff1a;连接失败?问题…...

正点原子STM32(基于HAL库)6

目录 TFTLCD&#xff08;MCU 屏&#xff09;实验TFTLCD 简介TFTLCD 简介液晶显示控制器FSMC 简介FSMC 关联寄存器简介 硬件设计程序设计FSMC 和SRAM 的HAL 库驱动程序流程图程序解析 下载验证 LTDC LCD&#xff08;RGB 屏&#xff09;实验RGBLCD<DC 简介RGBLCD 简介LTDC 简介…...

flutter Android端权限

flutter 中权限请求path_provider Android 6.0 - 10.0 (API level 23 - 29)Android 11 (API level 30)具体实现示例注意事项 在 Flutter 中使用 path_provider 插件获取除本应用外所有的 PDF 文件&#xff0c;对于不同的 Android 版本&#xff08;从 Android 6.0 到 Android 14…...

ant design form动态增减表单项Form.List如何进行动态校验规则

项目需求&#xff1a; 在使用ant design form动态增减表单项Form.List时&#xff0c;Form.List中有多组表单项&#xff0c;一组中的最后一个表单项的校验规则是动态的&#xff0c;该组为最后一组时&#xff0c;最后一个表单项是非必填项&#xff0c;其他时候为必填项。假设动态…...

7.16做题总结

今日也是让我看到了繁神的ACM历程&#xff0c;确实&#xff0c;我觉得繁神的历程里面确实有一句很好 不想打算法竞赛了。这是因为有别的事情要做&#xff0c;不是因为我打不动。    不想打比赛凌晨两点才睡了。因为我会困。    不想在群里和高水平选手水群了&#xff0c;因…...

unity使用 MQTT复现plant simulate仿真

unity使用 MQTT复现plant simulate仿真 一、plant simulate端配置 1、plant simulate MQTT组件配置&#xff0c;该组件在类库的信息流类目下&#xff0c;端口不变&#xff0c;填写ip即可&#xff1b; 2、设备配置界面&#xff0c;在控件入口和出口处各挂一个脚本&#xff0c;…...

MATLAB激光通信和-积消息传递算法(Python图形模型算法)模拟调制

&#x1f3af;要点 &#x1f3af;概率论和图论数学形式和图结构 | &#x1f3af;数学形式、图结构和代码验证贝叶斯分类器算法&#xff1a;&#x1f58a;多类型&#xff1a;朴素贝叶斯&#xff0c;求和朴素贝叶斯、高斯朴素贝叶斯、树增强贝叶斯、贝叶斯网络增强贝叶斯和半朴素…...

初识HTML

一 HTML HTML(Hyper Text Markup Language),超⽂本标记语⾔.超文本:⽐⽂本要强⼤.通过链接和交互式⽅式来组织和呈现信息的⽂本形式.不仅仅有⽂本,还可能包含图⽚,⾳频,或者⾃已经审阅过它的学者所加的评注、补充或脚注等等.标记语言:由标签构成的语⾔。 1.HTML代码是由“标签…...

基于Rspack实现大仓应用构建提效实践|得物技术

一、实践背景 随着项目的逐步迭代&#xff0c;代码量和依赖的逐渐增长&#xff0c;应用的构建速度逐步进入缓慢期。以目前所在团队的业务应用来看&#xff08;使用webpack构建&#xff09;&#xff0c;应用整体构建耗时已经普遍偏高&#xff0c;影响日常开发测试的使用效率&am…...

什么是MOW,以bitget钱包为例

元描述&#xff1a;MOW凭借其富有创意的故事情节和广阔的潜力在Solana上脱颖而出。本文深入探讨了其独特的概念和光明的未来。 Mouse in a Cats World (MOW)是一个基于Solana区块链的创新meme项目&#xff0c;它重新构想了一个异想天开且赋予权力的故事。在这个奇幻的宇宙中&am…...

pytorch说明

深度学习中的重要概念&#xff1a; 激活函数&#xff1a; 激活函数的必要性&#xff1a;激活函数不是绝对必须的&#xff0c;但在深度学习中&#xff0c;它们几乎总是被使用。激活函数可以引入非线性&#xff0c;这使得神经网络能够学习更复杂的模式。 激活函数的位置&#x…...

AI语音机器人是否可以设计开放式问题

什么叫开放式提问&#xff1f; 是指提出比较概括、广泛、范围较大的问题&#xff0c;对回答的内容限制不严格&#xff0c;给对方充分自由发挥的余地。 试想一下&#xff0c;就算不是语音机器人&#xff0c;是一个真人销售&#xff0c;和客户沟通时提的问题是开放式的&#xf…...

ModuleNotFoundError: No module named

python脚本执行出现这个错误&#xff0c;检查是否安装了对应的模块&#xff0c;确认已经安装&#xff0c;执行还是出错 原因是我时在c程序中启动执行的python脚本&#xff0c;c程序执行是使用了sudo权限&#xff0c;此时会报错&#xff0c;而在shell中执行python&#xff08;下…...

【操作系统】进程管理——用信号量机制解决问题,以生产者-消费者问题为例(个人笔记)

学习日期&#xff1a;2024.7.10 内容摘要&#xff1a;利用信号量机制解决几个经典问题模型 目录 引言 问题模型 生产者-消费者问题&#xff08;经典&#xff09; 多生产者-多消费者问题 吸烟者问题 读者写者问题&#xff08;难点&#xff09; 哲学家进餐问题&#xff0…...

算法刷题笔记 KMP字符串(C++实现,并给出了求next数组的独家简单理解方式)

文章目录 题目描述基本思路实现代码 题目描述 给定一个字符串S&#xff0c;以及一个模式串P&#xff0c;所有字符串中只包含大小写英文字母以及阿拉伯数字。模式串P在字符串S中多次作为子串出现。求出模式串P在字符串S中所有出现的位置的起始下标。 输入格式 第一行输入整数…...

SpringCloud架构师面试

一、微服务是什么 1、基本概念 微服务是一种架构风格&#xff08;区别于单体架构、垂直架构、分布式架构、SOA架构&#xff09;&#xff0c;应用程序被划分为更小的、流程驱动的服务。 2、微服务的特征 轻量化&#xff1a;将复杂的系统或者服务进行纵向拆分&#xff0c;每个…...

C语言 | Leetcode C语言题解之第228题汇总区间

题目&#xff1a; 题解&#xff1a; char** summaryRanges(int* nums, int numsSize, int* returnSize) {char** ret malloc(sizeof(char*) * numsSize);*returnSize 0;int i 0;while (i < numsSize) {int low i;i;while (i < numsSize && nums[i] nums[i …...

入职前回顾一下git-01

git安装 Linux上安装git 在linux上建议用二进制的方式来安装git&#xff0c;可以使用发行版包含的基础软件包管理工具来安装。 红帽系 sudo yum install gitDebian系 sudo apt install gitWindows上安装git 去官网下载和操作系统位数相同的安装包.或者可以直接安装GitHub…...