论文翻译 | 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 结论与讨论

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

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

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

相关文章

快速在springboot项目中应用EasyExcel

目录 ​编辑一、介绍 二、准备工作 三、初始化项目 3.1 创建项目 3.2 引入依赖 3.3 创建数据库和数据表 3.4 编写application.properties文件 四、开始编写 4.1 目录结构 4.2 MyBatis配置类 4.3 用户实体类 4.4 mapper接口 4.5 编写数据操作文件 4.6 编写Service 业…

【Linux】03.权限

一、权限的概念 Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以在 linux 系统下做任何事情,不受限制普通用户:在linux下做有限的事情超级用户的命令提示符是“#”,普通用户的命…

字节算法岗面试,效率贼高

最近这一两周看到不少互联网公司都已经开始秋招提前批了。 不同以往的是,当前职场环境已不再是那个双向奔赴时代了。求职者在变多,HC 在变少,岗位要求还更高了。 最近,我们又陆续整理了很多大厂的面试题,帮助一些球友…

python--实验 11 模块

目录 知识点 模块基础 模块使用方式 自定义模块示例 模块的有条件执行 Python包结构 定义和导入包 常用第三方库及安装 实例代码 第三方库自动安装脚本 Python标准库介绍 PyInstaller 小结 实验 1.(基础题)制作文本进度条。 2.(基础题) 蒙特卡罗方法计算圆周率…

[GXYCTF2019]BabySQli

原题目描述:刚学完sqli,我才知道万能口令这么危险,还好我进行了防护,还用md5哈希了密码! 我看到是个黑盒先想着搞一份源码 我dirsearch明明扫到了.git,算了直接注入试试看 随便输入了两个东西&#xff0c…

Type-C PD芯片:引领充电技术的新纪元

随着科技的飞速发展,人们对电子设备的依赖日益加深,对充电速度、效率和安全性的要求也越来越高。在这样的背景下,Type-C PD(Power Delivery)芯片应运而生,以其高效、安全、智能的特点,成为了充电…

vscode编译环境配置-golang

1. 支持跳转 如果单测函数上方不显示run test | debug test,需要安装Code Debugger(因为以前的go Test Explorer不再被维护了) 2. 单测 指定单个用例测试 go test -v run TestXXXdlv 调试 需要安装匹配的go版本和delve版本(如…

Linux多线程编程-生产者与消费者模型详解与实现(C语言)

1.什么是生成者与消费者模型 生产者-消费者模型是并发编程中的经典问题,描述了多个线程(或进程)如何安全、有效地共享有限的缓冲区资源。在这个模型中,有两种角色: 生产者(Producer)&#xff1…

<数据集>光伏板缺陷检测数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:2400张 标注数量(xml文件个数):2400 标注数量(txt文件个数):2400 标注类别数:4 标注类别名称:[Crack,Grid,Spot] 序号类别名称图片数框数1Crack8688922Grid8248843S…

研究生发表期刊/会议必看,一文看懂A/B/C类和顶刊

主要看:中国计算机学会(CCF)推荐国际学术期刊 里面的划分等级 等级为:A类(最难)>B类(中等难度)>C类(难度一般) 本人这边计划:最低发C刊&a…

css-grid布局(栅格布局)

css新世界-auto-fit grid 一个比flex更强大的布局,适合做整体布局 grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)); auto-fit的话有strech效果gap 不仅可以用于grid 也可用flex. 在grid-template-areas表示这个位置空着grid area 的 [a b]命名可重复命名 表示的…

双向收发的信号应该在哪进行串联端接?分享几个实用设计方法!

高速先生成员--黄刚 经过上次高速先生的描述,相信大家已经掌握了串联端接的秘诀了,简单来说,那就是第一步:先看看芯片的驱动内阻,第二步:再用加起来50欧姆匹配的方法来选择适合的串阻值,第三步&…

【C语言报错已解决】格式化字符串漏洞(Format String Vulnerability)

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 引言:一、问题描述:1.1 报错示例:1.2 报错分析:1.3 解决思路&#xff…

HEROIC FANTASY WERE CREATURES PACK VOL 2 (幻想生物)

这个包收集了5种英雄幻想生物:狼人,狼人,狼人山羊,狼人鲨鱼和狼人蜘蛛。 狼人:27.5 Ktris Max//101个骨骼//4种材质//最多4096*4096个纹理//40个动画(11个是根运动变体) 狼人:15.83 Ktris//66个骨骼//3种材质//最多4096*4096个纹理//35个动画(9个是根运动变体) wereg…

Centos 使用nfs配置共享目录使docker集群所有容器日志统一主机访问

Centos 使用nfs配置共享目录,使docker集群所有容器日志统一存放在主机一个共享目录下,供开发人员访问查看 准备两台或以上Centos服务器 192.168.0.1 nfs服务器 192.168.0.2 nfs客户端 以root用户登录192.168.0.1服务器,执行以下操作 注意先…

excel根据数据批量创建并重命名工作表

需求 根据一列数据,批量创建并重命名工作表 做法 1. 右键该sheet,选择查看代码 2. 输入VBA代码 正向创建 Sub create_sheets_by_col()Dim num% 定义为integer*num Application.WorksheetFunction.CountA(Sheet1.Range("A:A")) num是非空…

接着探索Linux的世界 -- 基本指令(文件查看、时间相关、打包压缩等等)

话不多说,直接进入主题 一、cat指令 -- 查看目标文件的内容 语法:cat [选项][文件] 功能: 查看目标文件的内容 -b 对非空输出行编号 -n 对输出的所有行编号 -s 不输出多行空行 1、查看目标文件的内容 2、 -b 对非空输出行编号 3、-n 对…

项目部署笔记

1、安全组需开放(如果不开放配置nginx也访问不到) 2、域名解析配置IP(子域名也需配置IP,IP地址可以不同) 3、如果出现图片获其他的文件找不到的情况请仔细检查一下路径是否正确 4、服务器nginx配置SSL证书后启动报错: nginx: […

巧用 VScode 网页版 IDE 搭建个人笔记知识库!

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ] 巧用 VScode 网页版 IDE 搭建个人笔记知识库! 描述:最近自己在腾讯云轻量云服务器中部署了一个使用在线 VScode 搭建部署的个人Markdown在线笔记,考虑到在线 VScode 支持终…

Day05-filebeat常用的输出组件,logstash的输入输出组件及date,grok,geoip过滤插件实战案例

Day05-filebeat常用的输出组件,logstash的输入输出组件及date,grok,geoip过滤插件实战案例 1、使用filebeat采集docker日志2、filebeat的input类型之filestream实战案例2.1 课堂练习案例2.2 将数据写入到本地文件案例2.3 写入数据到ES集群2.4…