【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释!
四、提示范式(Explanation for Prompting Paradigm)
随着语言模型规模的扩大,基于提示(prompting-based)的模型展现出了一些新的能力,这要求我们从新的角度来阐明它们背后的机制。然而,模型规模的急剧增加使得传统的解释方法不再适用。将针对传统微调范式(fine-tuning paradigms)的某些可解释性技术 应用于 基于提示的范式时,面临的挑战可以从多个方面总结。
- 例如,基于提示的模型依赖于推理能力(Wei et al., 2023b),这使得局部或特定示例的解释变得意义不大。
- 此外,在拥有数百亿甚至更多参数的规模上,计算要求高的解释技术很快变得不可行。
- 而且,基于提示的模型的复杂内部工作机制和推理过程过于复杂,无法被简化的替代模型有效捕捉。
鉴于这些挑战,针对这种提示范式出现了新的解释技术:
- 例如,思维链(chain of thought, CoT)解释可能为理解和解释基于提示的大型语言模型的行为提供了一个更合适的方法。
- 此外,专注于识别对预测有贡献的影响性示例的方法变得越来越重要。识别这些关键数据点可能会显著增强我们对数据集构成的理解。
- 传统微调范式的全局解释技术也被广泛用于基于提示的LLMs。特别是这些技术能够提供高层次解释,如基于概念的解释和基于模块的解释。
在这一部分,我们首先介绍属于提示范式(prompting paradigm)的模型解释技术,包括:1)解释基础模型,比如LLaMA-2(第4.1节);2)解释助手模型,比如LLaMA-2-Chat(第4.2节);以及3)如何利用大型语言模型(LLMs)的推理和解释能力来提高语言模型的预测性能,并实现有益的应用(第4.3节)。
4.1 基础模型解释(Base Model Explanation)
随着语言模型规模的增加,它们展现出了新的能力,比如少量样本学习(few-shot learning),即仅通过几个例子就能学习新概念的能力。它们还展示了思维链(chain-of-thought, CoT)提示的能力,这允许我们向模型输入一系列提示,引导其生成朝特定方向发展,并让它解释其推理过程(Wei et al., 2022)。
鉴于这些新出现的属性,可解释性研究有三个主要目标:1)理解这些大型语言模型如何能够快速从有限的示例中掌握新任务,这有助于最终用户解释模型的推理过程;2)解释CoT提示;3)表示工程。
4.1.1 解释上下文学习(Explaining In-context Learning)
可解释人工智能技术已经被用来阐明大型语言模型中提示(prompt)是如何工作的。具体来说,我们讨论了那些能够揭示上下文学习(ICL)如何影响模型行为的技术。
一项研究使用SST-2情感分析基准任务作为基线任务,以解释LLMs中的上下文学习范式(Li et al., 2023b)。它通过分析对比性演示和显著性图来研究ICL如何在LLMs中工作。作者通过翻转标签、扰动输入文本和添加补充解释来构建对比性演示。对于情感分析任务,他们发现翻转标签更有可能降低小型模型(例如GPT-2)的显著性,而对大型模型(例如InstructGPT)产生相反的影响。不同演示类型的影响似乎因模型规模和任务类型而异。需要在更多模型、任务和数据集上进行进一步分析。
对比性演示(Contrastive Demonstrations):
通过构建不同的例子对(例如,翻转标签的例子)来展示模型在不同情况下的反应,以分析模型是如何学习和做出决策的。显著性图(Saliency Maps):
一种可视化技术,用来显示模型在做出预测时哪些输入部分(如文本中的单词或图像中的像素)最具影响力。
另一项研究调查了大型语言模型中的ICL是否由其预训练中的语义先验启用,或者是否从提供的示例中学习输入标签映射(Wei et al., 2023b)。实验结果表明,大型模型可以覆盖语义先验并学习矛盾的输入-标签映射,而小型模型更多地依赖于先验。在ICL示例中翻转标签的实验表明,大型模型可以学会翻转预测,而小型模型则不能。这些结果表明,LLMs具有更大的能力来学习任意的输入-标签映射,这是一种不受语义先验限制的象征性推理,这挑战了ICL仅由利用先验驱动的观点。
语义先验(Semantic Priors):
指的是模型在预训练阶段学到的关于语言和世界的一般知识,这些知识可能会影响模型对新任务的理解和执行。符号推理(Symbolic Reasoning):
一种推理形式,涉及使用符号和规则来进行逻辑推理,与基于统计的学习形成对比。输入-标签映射(Input-Label Mappings):
指的是模型如何将输入数据映射到特定标签或输出的过程,这是机器学习中的核心任务之一。
这段有点看不懂,来个说人话版👤:
这项研究是在探讨大型语言模型是怎么进行上下文学习的。研究者想知道,这些模型是依赖于它们事先就知道的信息(语义先验),还是能从给定的例子中学习新的对应关系(输入标签映射)。
实验发现,大型模型很特别,它们不仅能记住之前学的东西,还能学会新的例子中不同的对应关系,哪怕这些新关系和它们之前知道的不一样。而小型模型则更多地依赖于它们已经知道的信息。
研究者还做了一个实验,他们故意把一些例子的标签弄反,想看看模型会怎么办。结果发现,大型模型能够根据这些故意弄反的标签学习,并调整自己的预测。但小型模型就做不到这一点,它们还是按照原来的记忆来做预测。
这说明大型语言模型有很强的学习能力,它们不仅能用已知的知识来理解问题,还能学习新的例子,即使这些例子和它们已知的知识相冲突。这种能力挑战了我们之前的一种观点,即认为大型语言模型的学习完全依赖于它们事先就知道的信息。简而言之,大型模型不仅能记住旧知识,还能学习新花样。
4.1.2 解释CoT提示(Explaining CoT Prompting)
一项研究通过分析输入token的显著性分数来研究思维链(CoT)提示如何影响LLMs的行为(Wu et al., 2023a)。显著性分数表明每个输入token对模型输出的影响程度。这些分数是使用基于梯度的特征归因方法计算的。目标是了解CoT提示是否与标准提示相比改变了显著性分数,从而提供为什么CoT能提高性能的见解。显著性分数的分析表明,CoT提示使模型以更稳定的方式考虑问题输入token。这种对输入的更稳定考虑可能促使生成与标准提示相比更一致准确的答案。
其他工作专注于在少样本提示中扰动CoT,例如通过添加错误,来确定哪些方面对于生成高性能解释很重要(Madaan & Yazdanbakhsh, 2022; Wang et al., 2022a)。提出了叫做“反事实提示”的方法,来测试模型对来扰动问题中关键组成部分(符号、模式和文本)的反应(Madaan & Yazdanbakhsh, 2022)。实验分析表明,这些中间的推理步骤更像是指引模型把符号转换成正确答案的信号,而不是帮助模型学会解决问题的方法。
4.1.3 表示工程(Representation Engineering)
与上述两个从提示工程角度解释LLMs的研究线不同,这一系列研究从表示工程角度解释LLMs。表示工程从自上而下的视角解释模型,并将表示及其转换视为分析的主要元素。这些方法侧重于表示空间的结构和特征,以捕获紧急表示和高级认知现象。
Zou等人(2023)将表示工程分为两部分:1)表示阅读,2)表示控制。
- 表示阅读识别和理解网络中高级概念和功能的表现的过程。这类似于“读取”模型的内部状态,以了解它是如何处理特定输入的。受神经影像学方法的启发,采用了线性人工断层扫描。为了很好地引出概念和功能,分别设计了包括刺激或指令的提示模板。对于概念,可以从最具代表性的token的表示中收集神经活动,也可以从最后一个令牌的响应中收集。对于功能,可以从特定令牌后的响应中收集神经活动。然后,引入线性探测器来预测概念和功能与神经活动。
- 表示控制旨在基于表示阅读的理解,操纵模型内部表示的过程,目的是使模型的行为符合特定的安全或性能要求。直接添加阅读向量可以诱导模型输出真实结果,减去阅读向量可以诱导模型撒谎,这表明在改进模型方面具有巨大潜力。
同样,研究高质量真/假陈述数据集上的表示结构也揭示了表示的线性结构。训练有素的探测器在其他数据集上泛化得很好。如前述工作结论所述,可以识别真实方向并用于引起真实或虚假输出(Marks & Tegmark, 2023)。通过分析六个空间或时间数据集的学到的表示,像LLaMA-13B这样的LLMs被证明学会了空间和时间的线性表示。此外,还在不同大小的模型中发现了相似的模式。随着模型规模的增加,表现也越来越准确。模型还有专门的神经元,它们作为空间或时间的函数激活,这与LLMs中事实知识的建立相一致(Gurnee & Tegmark, 2023)。
总之,表示工程可能是控制模型输出的有希望的技术,但还需要进一步的消融研究来确定其优势和劣势。
4.2 助手模型解释(Assistant Model Explanation)
由于大规模无监督预训练和监督对齐微调,属于这一范式的LLMs具有强大的推理能力。然而,它们的庞大规模也使它们容易产生问题输出,如幻觉。可解释性研究旨在1)阐明对齐微调的作用,2)分析幻觉的原因,3)不确定性量化。
Assistant Model,即助手模型,是指专门为特定用途设计的人工智能模型,它能够使用OpenAI的模型并调用各种工具来执行任务。这些模型通常在对话系统中扮演“助手”的角色,响应用户的请求并提供帮助。助手模型可以根据不同的需求进行定制,例如,通过设置指令(instructions)来定义助手的性格和任务目标,或者通过接入不同的工具(tools)来扩展助手的能力。
4.2.1 解释微调的作用(Explaining the Role of Fine-tuning)
助手模型(Assistant models)通常分为两个阶段进行训练。首先,它们在大量原始文本上进行无监督预训练,以学习通用的语言表示。其次,模型通过监督和强化学习进行对齐微调,使模型与特定任务和用户偏好对齐。这些模型的可解释性研究集中在确定它们的知识主要来自初始预训练阶段(即它们获得通用语言能力)还是来自对齐微调阶段(即它们被定制为特定任务和偏好)。了解模型的知识来源为如何改进和解释它们的性能提供了见解。
Zhou等人(2023)最近的一项研究调查了预训练与命令(instruction)微调在语言模型中的相对重要性。在实验中,作者仅使用1000个精心挑选的命令对 LLaMA-65B 模型进行微调,没有使用强化学习,并取得了与GPT-4相当的性能。
- 研究人员假想,对齐可能是一种更简单的过程,其中模型学习交互风格和格式,而LLMs的几乎所有知识都是在预训练阶段获得的。实验结果证明了预训练的强大力量及其相对于大规模微调和强化学习的重要性。复杂的微调和强化学习技术可能没有以前认为的那么关键。
- 另一方面,这项研究还表明,在指令微调期间,数据质量比数据量更重要。
此外,Wu等人(2023)通过检查命令遵循和概念级知识演变,研究了命令微调的作用。结果表明,经过命令微调的模型可以更好地区分命令和上下文,并很好地遵循用户的命令。此外,它们可以更多地关注输入提示的中间和尾部,而不是预训练模型。
命令遵循(Instruction Following):
研究考察了模型在经过命令微调后,是否能够更好地理解和遵循用户的命令。这意味着模型在接收到具体的任务命令时,能否准确地按照这些命令执行任务。概念级知识演变(Concept-level Knowledge Evolution):
研究还分析了模型在微调过程中,其内部的概念级知识是如何发展和变化的。这涉及到模型如何更新和调整其对特定概念和知识的理解,以适应新的指令和任务需求。
在对模型进行微调时,模型会根据特定的用户任务来调整其内部的概念和知识结构,使其更适合这些任务。但是,这种调整并不改变模型生成语言的总体统计特性,也就是说,模型在词汇使用、句法结构等方面的整体模式没有发生大的变化。与普遍认为更高层捕获更多语义知识的观点相反,在微调模型中捕获的语义知识比例最初增长然后急剧下降。在微调模型时,模型的自注意力机制会发生变化,特别是低层的神经元会更多地参与到编码词与词之间的关系,帮助模型识别和理解指令中的动词。这种调整使得模型能够更好地理解和响应用户的指令。
另一项最近的研究(Gudibande等人,2023)表明,模仿(imitation)可以成功地改善语言模型的风格、个性和遵循指令的能力,但在更复杂的维度上,如事实性、编码和问题解决等方面,模仿并没有改善语言模型。模仿是训练助手模型的另一种常用技术,其中像 GPT-2 或 LLaMA 这样的基础模型是根据更高级系统(例如 ChatGPT 等专有模型)生成的输出进行微调的。
此外,LLaMA-2的技术报告(Touvron等人,2023)表明,微调阶段主要有助于提高语言模型的有用性和安全性,其中有用性描述了LLaMA-2Chat响应满足用户请求和包含预期信息的程度,安全性指的是避免不安全响应,如有毒内容。
总的来说,这些研究强调了基础模型的重要性,突出了预训练的重要性。发现表明,助手模型的知识主要是在预训练阶段获得的。随后的指令微调有助于激活这些知识,以产生对最终用户有用的输出。此外,强化学习可以进一步使模型与人类价值观对齐。
4.2.2 解释幻觉(Explaining Hallucination)
LLMs的快速发展引发了人们对其可信度的担忧,因为它们有可能表现出一些不良行为,如产生幻觉(hallucination),所谓幻觉,是指模型生成的输出在表面上看似合理,但实际上与现实世界的事实或用户输入不一致,内容显得不相关且无意义。研究者们越来越关注如何理解这种幻觉现象是如何产生的,以及如何减少这种幻觉的生成。
最近的一项分析研究表明,幻觉现象源于数据集中的多种问题(Dziri et al., 2022),可以分为两类:
-
缺乏相关数据:在训练数据中,长尾知识(即那些出现频率较低但种类繁多的知识)普遍存在,而LLMs在学习这类知识时容易学习不充分(Kandpal et al., 2023)。这意味着模型可能没有足够的数据来学习那些不常见但重要的信息,导致在实际应用中生成与这些信息相关的幻觉。
-
数据重复:在训练数据中,完美地去重是非常困难的。训练数据集中的重复数据会明显损害模型的性能。Hernandez等人(Hernandez et al., 2022)发现,仅通过重复10%的训练数据,一个800M参数模型的性能可能会降低到400M参数模型的水平。当根据缩放定律检查模型的性能时,发现训练数据中一定程度的重复率可能对模型性能产生不利影响。这种负面影响的原因可能是模型在处理这些重复数据时,会倾向于记忆这些数据,而不是学习如何泛化到新数据。
Scaling Laws,也就是缩放定律或规模定律,在人工智能和机器学习领域,是指模型性能如何随着模型规模(如参数数量)、训练数据量和计算资源增加而提升的一组经验法则。缩放定律的核心思想是模型的性能与模型大小、数据集大小和计算量之间存在可预测的关系,通常表现为幂律关系。
此外,最近的研究发现,幻觉也源于模型固有的某些限制。McKenna等人(2023)证明,LLMs仍然依赖于句子级别的记忆和语料库级别的统计模式,而不是稳健的推理。这一点通过他们对不同LLM家族在自然语言推理任务上的表现分析得到了证实。此外,Wu等人(2023)揭示了LLMs在记忆和推理方面都不完美,特别是在涉及本体论知识时。Berglund等人(2023)指出,LLMs通常因为逻辑推理的困难而受到影响。LLMs往往对自己的输出过于自信,并且难以精确识别事实知识的边界(Ren等人,2023年),这意味着模型在处理信息时,可能无法清晰地区分哪些信息是经过验证的事实,哪些是未经证实的假设、虚构的内容或者是错误的信息。此外,LLM倾向于选择共现词而不是事实答案,这种现象通常被称为捷径或虚假相关(Kang & Choi,2023年)。
句子级别的记忆:
这意味着模型在生成回答或文本时,会记住它在训练数据中见过的具体句子或表达方式。模型可能会直接复制或模仿这些句子,而不是真正理解句子的含义或上下文。语料库级别的统计模式:
这指的是模型会利用它在大量文本数据中观察到的统计规律,比如某些词或短语经常一起出现。模型可能会根据这些统计上的共现关系来生成文本,而不是基于深层次的逻辑推理。
同样,另一种不期望的行为——阿谀奉承(sycophancy)现象也存在于LLMs中,指的是模型可能会生成与用户观点一致而非事实的答案。最糟糕的是,模型扩展和命令调整可能会增加这种行为(Wei等人,2023)。
解决幻觉问题有几种方法,如扩大规模。拥有5400亿参数的PaLM模型在多种任务上的表现急剧提升。尽管它也遭受学习长尾知识的困扰,但其记忆能力被证明比小型模型更好(Chowdhery等人,2022年)。在文本摘要任务中,Ladhak等人(2023)表明,使用更多的提取式微调数据集和适配器微调(仅微调部分参数)通常会产生较少的幻觉,但不会改变幻觉的分布。
因此,对于人工智能模型中的幻觉问题,可以通过两种途径来减轻:一种是从数据层面进行,比如改进微调数据集和增加合成数据干预 (Wei et al., 2023a);另一种是从模型层面进行,比如采用不同的优化方法。
4.2.3 不确定性量化(Uncertainty Quantification)
研究界对量化LLM预测的不确定性也越来越感兴趣,以更好地理解这些大模型的可靠性和局限性。 多数关于不确定性量化的现有文献都集中在对数几率(logits)上,这对于LLMs来说不太适用,特别是对于封闭源模型。这就需要非logit基础的方法来引出LLMs的不确定性,称为置信度引出(Xiong et al., 2023)。
对数几率(logit)是将概率值(介于0和1之间)映射到整个实数范围内的函数。它通常用于二分类问题中,将概率值转换为对数几率值。
分类问题:在二分类问题中,对数几率函数常用于将线性模型的输出转换为概率预测。例如,在逻辑回归中,模型的输出(线性组合)通过Sigmoid函数转换为介于0和1之间的概率值。
有几种代表性的LLMs不确定性估计方法:
首先,基于一致性的不确定性估计涉及生成对问题的多个响应,并使用这些响应之间的一致性来估计模型的置信度(Xiong et al., 2023)。具体来说,它在答案生成过程中引入随机性(自我一致性)或向提示中添加误导性提示(诱导一致性)以产生不同的响应。响应越一致,估计的置信度就越高。
其次,LLMs可以通过提供直接和具体的响应来表达它们的置信度,以表明对预测的高置信度,并给出间接、模糊或模棱两可的响应以传达低置信度。LLMs可以明确声明一个百分比来量化它们的置信度水平。例如,“我对这个答案只有20%的置信度”清楚地传达了低置信度(Xiong et al., 2023)。
第三,可以从token级不确定性中聚合不确定性(Duan et al., 2023)。LLMs通过预测每个token来生成文本,这可以被构建化为一个分类任务。token级不确定性方法根据其概率分布为每个预测token计算置信度分数。然后,可以根据token级不确定性的聚合来估计整体不确定性。
4.3 利用解释(Making Use of Explanations)
在这一节中,我们将讨论如何利用基于提示的大型语言模型(LLMs)的解释能力来提高语言模型的预测性能,并使其能够应用于有益的领域。
4.3.1 改进LLMs(Improving LLMs)
这项研究探讨了LLMs在从有限示例中学习新任务时是否可以从解释中受益。具体来说,它调查了为少数示例任务提供解释是否可以改善模型在这些任务上的性能(Lampinen et al., 2022)。
提供了两种形式的解释:预答案解释(pre-answer explanations)和后答案解释(post-answer explanations)。预答案解释是在答案之前提供中间推理步骤作为解释,而后答案解释则是在答案之后提供。
- Wei等人(2022)提出了一种称为链式思考提示的方法,该方法法在答案之前通过提示提供中间推理步骤作为解释,这种方法帮助语言模型在算术、符号和常识推理任务中取得了好结果。
- 另一项最近的研究在提示中提供答案后的解释(Lampinen et al., 2022)。实验分析表明,提供解释可以提高大型语言模型在少量样本学习中的表现,但提升程度取决于模型的规模和解释的质量。此外,使用验证集为特定任务定制解释,可以进一步提升它们的优势(Lampinen et al., 2022)。
最近的一项研究提出了一种名为“解释调整”的方法,该方法使用更高级模型提供的详细逐步解释来训练较小的语言模型,作为一种监督形式(Mukherjee等人,2023年)。4.2.1节指出,模仿调整主要让较小的模型学习大型模型的风格,而不是推理过程。为了解决这个限制,这项工作提出利用不仅仅是输入-输出对的更丰富的信号来教会较小的模型模仿大型基础模型(如GPT-4)的推理过程。
具体来说,作者收集了由GPT-4生成的提示和详细解释性响应的训练数据。为了使GPT-4生成解释,使用了诸如“你是一个乐于助人的助手,总是提供解释。想象一下你正在回答一个五岁小孩的问题。”的系统指令。实验结果表明,使用解释调整训练的模型在复杂的零样本推理基准测试(如BigBench Hard)上的表现,超过了使用传统指令调整训练的模型。
从解释中获得的简介还可以用来压缩命令(Yin et al., 2023)。作者使用消融分析研究任务定义中不同类别内容的贡献。然后,可以从消融分析中获得的结果用于压缩任务命令。以分类任务为例,分析表明任务指令中最重要的组成部分是与标签相关的信息。移除其他内容只会略微影响分类性能,只有在移除输出标签信息时,模型性能才会大幅下降。此外,他们提出了一种算法,通过移除不必要的token自动压缩定义,发现在保持或提高T5-XL模型在保留数据集上的性能的同时,可以移除60%。
此外,一些研究还深入研究了LLMs生成的解释在增强少量样本上下文学习中的有效性。对于涉及代码执行和算术运算的多步符号推理任务,Nye等人(2021)发现纳入中间计算步骤可以显著提高模型的能力。另一方面,当涉及到包括问答和自然语言推理在内的文本推理任务时,只有text-davinci-002观察到准确性的提高。其他四个模型,包括OPT、GPT-3(davinci)、InstructGPT(text-davinci-001)和text-davinci-002,没有显示出明显的改进,甚至表现得更糟。LLMs生成的解释从两个维度进行评估:事实性和一致性。结果揭示了LLMs可以生成不切实际的解释,但仍然与预测一致,这反过来导致了错误的预测(Ye & Durrett,2022年)。基于这一发现,提出了一个解释优化模型,以选择导致高性能的解释(Ye & Durrett,2023年)。因此,提高模型预测的准确性需要LLMs生成可靠的解释,这仍然是一个巨大的挑战。
4.3.2 下游应用(Downstream Applications)
可解释性也可以应用于教育、金融和医疗等现实世界问题。
例如,可解释的零样本医学诊断是一个有趣的用例。最近的一项研究提出了一个框架,用于使用视觉-语言模型(如CLIP)和LLMs(如ChatGPT)进行可解释的零样本医学图像分类(Liu et al., 2023a)。关键思想是利用ChatGPT自动生成疾病症状和视觉特征的详细文本描述,而不仅仅是疾病名称。这些额外的文本信息有助于从CLIP提供更准确和可解释的诊断(Radford et al., 2021)。为了处理ChatGPT在医学上的潜在不准确性,作者设计了提示,以获得每个疾病类别的视觉可识别症状的高质量文本描述。在多个医学图像数据集上的广泛实验证明了这种无需训练的诊断流程的有效性和可解释性。
上篇:
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(一)_可解释推荐的大型语言模型指标独特句子比率 (usr)-CSDN博客
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)-CSDN博客
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(三)-CSDN博客
下篇:
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(五)-CSDN博客
相关文章:
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 四、提示范式(Explanation for Prompting Paradigm) 随着语言模型规模的扩大,基于提示(prom…...
分布式算法(五):初识ZAB协议
文章目录 一、什么是Zookeeper二、ZAB与Zookeeper的关系为什么Zookeeper不直接使用Paxos 三、ZAB简介1.名词解释提案(Proposal)事务(Transaction)原子广播(Atomic Broadcast) 2.集群角色领导者(…...
用Python操作字节流中的Excel工作簿
Python能够轻松地从字节流中加载文件,在不依赖于外部存储的情况下直接对其进行读取、修改等复杂操作,并最终将更改后的文档保存回字节串中。这种能力不仅极大地提高了数据处理的灵活性,还确保了数据的安全性和完整性,尤其是在网络…...
PHP-Casbin v4.0.0 发布,支持 ACL、RBAC、ABAC 等模型的访问控制框架
PHP-Casbin 是一个用 PHP 语言打造的轻量级开源访问控制框架,支持 ACL、RBAC、ABAC 多种模型。它采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等。 更新内容: http…...
MIT S081 Lab 2 System Calls
Lab链接 一 实现trace功能 1 题目要求 In this assignment you will add a system call tracing feature that may help you when debugging later labs. You’ll create a new trace system call that will control tracing. It should take one argument, an integer “ma…...
Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(2):配置主数据库
Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(2):配置主数据库 目录 Oracle Dataguard(主库为 Oracle 11g 单节点)配置详解(2):配置主数据库一、配置…...
(leetcode算法题)10. 正则表达式匹配
10. 正则表达式匹配 - 力扣(LeetCode) 此题的要求一个字符串 s 和一个字符规律 p之间支持 . 和 * 的正则表达式匹配 . 匹配任意单个字符 * 匹配零个或多个前面的那一个元素 所谓匹配,是要涵盖 整个 字符串 s 的,而不是部分字符串…...
Hive性能调优考量
Hive作为大数据领域常见的数据仓库组件,在设计和开发阶段需要注意效率。影响Hive效率的不仅仅是数据量过大,数据倾斜、job(小文件过多)或者磁盘I/O过多、MapReduce分配不合理等因素都会对Hive的效率有影响。对Hive的调优可以从架构…...
2024-12-29-sklearn学习(26)模型选择与评估-交叉验证:评估估算器的表现 今夜偏知春气暖,虫声新透绿窗纱。
文章目录 sklearn学习(26) 模型选择与评估-交叉验证:评估估算器的表现26.1 计算交叉验证的指标26.1.1 cross_validate 函数和多度量评估26.1.2 通过交叉验证获取预测 26.2 交叉验证迭代器26.2.1 交叉验证迭代器–循环遍历数据26.2.1.1 K 折26.2.1.2 重复 K-折交叉验…...
Spring Boot + MinIO 实现分段、断点续传,让文件传输更高效
一、引言 在当今的互联网应用中,文件上传是一个常见的功能需求。然而,传统的文件上传方式在面对大文件或不稳定的网络环境时,可能会出现性能瓶颈和上传失败的问题。 传统文件上传,就像是用一辆小推车搬运大型家具,一…...
获取用户详细信息-ThreadLocal优化
Thread全局接口可用,不用再重复编写。所以为了代码的复用,使用Thread。把之前的内容(函数的参数和map与username)注释掉,换为Thread传过来的内容(map与username)。 因为Thread需要在拦截器里面…...
R语言6种将字符转成数字的方法,写在新年来临之际
咱们临床研究中,拿到数据后首先要对数据进行清洗,把数据变成咱们想要的格式,才能进行下一步分析,其中数据中的字符转成数字是个重要的内容,因为字符中常含有特殊符号,不利于分析,转成数字后才能…...
Go语言方法和接收器类型详解
Go语言方法和接收器类型详解 1. 方法接收器类型 1.1 值接收器 值接收器方法不会改变接收器的状态,因为Go语言会在调用时复制接收器的值。因此,任何对接收器成员变量的修改都只会影响副本,而不会影响原始结构体实例。 type Person struct …...
Linux常用命令总结
目录 查询java服务的pid查询pid上的进程占用的端口方法 1:使用 lsof 查询端口方法 2:使用 netstat 查询端口方法 3:使用 ss 命令查询端口 system相关命令 查询java服务的pid JPS查询pid上的进程占用的端口 要根据进程 ID(PID&am…...
Linux总结之CentOS Stream 9安装mysql8.0实操安装成功记录
Linux总结之CentOS Stream 9安装mysql8.0实操安装成功记录 由于网上很多的mysql8.0安装教程都是老版本或者安装过程记录有问题,导致经常安装到一半需要删除重新安装。所以将成功的实操安装过程记录一下,方面后面查阅,大家还有问题的可以在此讨…...
ROS2软件架构全面解析-学习如何设计通信中间件框架
前言 ROS(Robot Operating System) 2 是一个用于开发机器人应用的软件平台,也称为机器人软件开发工具包 (SDK)。 ROS2是ROS1的迭代升级版本 ,最主要的升级点是引入DDS(Data Distribution Service)为基础的…...
基于微信小程序的校园自助打印系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
Linux命令——3.网络与用户
文章目录 一、网络1.网络测试与诊断2.网络接口配置3.无线网络配置4.防火墙与网络管理6.防火墙管理1)firewalld命令2)iptables命令 二、用户和群组1.管理员模式2.用户账户管理1)useradd创建2)usermod修改3)userdel 删除…...
2、redis的持久化
redis的持久化 在redist当中,高可用的技术包括持久化,主从复制,哨兵模式,集群。 持久化是最简单的高可用的方法,作用就是备份数据。即将数据保存到硬盘,防止进程退出导致数据丢失。 redis持久化方式&…...
建造者模式 Builder Pattern
在创建一个对象的时候,构造器参数有点多,而且有些参数还是可选的,再者还有不少同类型的,那就更应该使用 builder 模式了。 使用 Builder 模式的初衷是 把易变性(mutability)移动到Builder类,而…...
制作一个类似ChatGPT的AI对话网站,模型能力使用ChatGPT
要快速搭建一个类似ChatGPT的AI对话网站,并且使用类似ChatGPT的模型能力,可以考虑以下技术和工具: ### 1. **使用现有的AI模型平台** - **OpenAI API**: 如果你希望使用类似于ChatGPT的能力,OpenAI提供了强大的API服务(…...
LinuxC高级day2
1.在家目录下创建目录文件,dir a.dir下创建dir1和dir2 b.把当前目录下的所有文件拷贝到dir1中, c.把当前目录下的所有脚本文件拷贝到dir2中 d.把dir2打包并压缩为dir2.tar.xz e.再把dir2.tar.xz移动到dir1中 f.解压dir1中的压缩包 g.使用tree工具&#x…...
Word格式修改
经常修改格式,留下这篇汇总 Word的累加符号上下标变右标指定目录:word如何取消封面或者目录下方的页码,页码从正文开始加参考文献:【Word】怎样给论文添加引用参考文献删空白页: word中无法删除空白页怎么办ÿ…...
深度学习-稀疏卷积
步骤: 1、构建输入输出哈希表; 输入哈希表的键为激活点的索引,值为激活点的坐标;输出哈希表的键为激活点对应的输出点的索引,值为输出点的坐标。 2、构建规则书; 规则书的每一行包含4个值,分别是…...
Microsoft Visual Studio中的/MT, /MTd,/MD,/MDd分别是什么意思?
1. /MT,/MTd,/MD,/MDd的含义 /MT,/MTd,/MD,/MDd是 Microsoft Visual C 编译器的运行时库链接选项。它们决定了程序如何链接 C 运行时库(CRT)。具体含义如下: /MT&#x…...
交换机关于环路、接口绑定、链路聚合的相关知识
文章目录 1、对交换机SW-1进行配置,仅允许Host-1通过Ethernet0/0/1接口与Host-3和Host-4通信,Host-2无法与其他主机通信。2、关闭生成树协议,验证环路造成的影响3、关闭生成树协议通过链路聚合实现两条链路正常通信并提高链路可靠性。 内容包…...
5.微服务灰度发布落地实践(rocketmq增强)
文章目录 前言发送端灰度增强订阅端灰度增强 前言 上一篇分析了,在灰度发布实现中为什么要对消息队列灰度发布进行增强。本篇主要介绍如何实现rocketmq 灰度发布的增强. 发送端灰度增强 订阅端灰度增强...
32单片机从入门到精通之开发环境——库文件(六)
每个人都有自己的追求和梦想,但要实现这些梦想并不容易。在追逐梦想的路上,我们会遇到各种困难和挫折,甚至会感到无助和失望。然而,正是这些困难和挫折让我们更加坚韧和坚定地追求自己的目标。不要害怕失败,失败只是暂…...
大电流和大电压采样电路
大电压采样电路: 需要串联多个电阻进行分压,从而一级一级降低电压,防止电阻损坏或者短路直接打穿MCU。 为什么需要加电压跟随器:进行阻抗的隔离,防止MCU的IO阻抗对分压产生影响: 大电流检测电路ÿ…...
用户态和内核态?
目录 一、定义与特点 二、功能与权限差异 三、安全性与稳定性 四、系统调用与交互 五、参考 用户态和内核态是操作系统中的两种基本运行状态,它们各自具有不同的特点和权限,共同构成了操作系统的运行基础。以下是对用户态和内核态的详细解释&#x…...
Qt天气预报系统设计界面布局第四部分左边
Qt天气预报系统设计 1、第四部分左边的第一部分1.1添加控件1.2修改控件名字 2、第四部分左边的第二部分2.1添加控件2.2修改控件名字 3、第四部分左边的第三部分3.1添加控件3.2修改控件名字 4、对整个widget04l调整 1、第四部分左边的第一部分 1.1添加控件 拖入一个widget&…...
【Spring MVC 常用注解】注解驱动开发的魔法
在 Spring MVC 中,注解可以说是开发者的“魔法棒”,通过简单的注解配置,开发者能够实现请求处理、参数绑定、响应返回等复杂功能,真正做到“少写代码多干活”。 我们接下来就来一起看看 Spring MVC 中常用的注解,它们的…...
FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.4,SDP协议分析
SDP在4566 中有详细描述。 SDP 全称是 Session Description Protocol, 翻译过来就是描述会话的协议。 主要用于两个会话实体之间的媒体协商。 什么叫会话呢,比如一次网络电话、一次电话会议、一次视频聊天,这些都可以称之为一次会话。 那为什…...
STM32 高级 WIFi案例1:测试AT指令
需求描述 测试AT指令是否能够正常控制ESP32的wifi,比如重启、读取设备信息等。 思路: stm32通过串口usart2向ESP32发布命令。ESP32通过串口1返回信息。 配置: 第一步:对ESP32芯片烧录可以读取stm32命令的固件(fac…...
Mono里运行C#脚本18—mono_image_load_names
前面已经分析完成加载CLR的流表,接着下来就是使用前面分析的数据,更进一步来处理了。下面就是通过函数mono_image_load_names获得程序集的名称和模块名称。 在CLI定义的文档里,表Assembly : 0x20: Assembly表结构信息,以下是该表各列的简要说明: HashAlgId: 这是一个4字…...
Java和Python区别: 应用领域与性能抉择的深度解析
文章目录 1. 引言2. 语言特性对比:灵活性与严谨性的碰撞3. 应用场景分析:专注任务的工具选择3.1 数据库交互:Java 的优势所在3.2 图像识别与计算:Python 的专长3.3 Web 开发 4. 高并发请求处理:架构设计与硬件选择4.1 …...
SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者
SQL Server详细使用教程(包含启动SQL server服务、建立数据库、建表的详细操作) 非常适合初学者 文章目录 目录 前言 一、启动SQL server服务的三种方法 1.不启动SQL server服务的影响 2.方法一:利用cmd启动SQL server服务 3.方法二:利用SQL Serv…...
基于Docker+模拟器的Appium自动化测试(二)
模拟器的设置 打开“夜神模拟器”的系统设置,切换到“手机与网络”页,选中网络设置下的“开启网络连接”和“开启网络桥接模式”复选框,而后选择“静态IP”单选框,在IP地址中输入“192.168.0.105”,网关等内容不再赘述…...
CSS系列(47)-- Animation Timeline详解
前端技术探索系列:CSS Animation Timeline详解 ⏱️ 致读者:探索动画时间线的艺术 👋 前端开发者们, 今天我们将深入探讨 CSS Animation Timeline,这个强大的动画控制特性。 基础概念 🚀 时间线定义 …...
1、pycharm、python下载与安装
1、去官网下载pycharm 官网:https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间,去下载python 进入官网地址:https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…...
【翻译】优化加速像素着色器执行的方法
中文翻译 在回复我的 Twitter 私信时,我遇到了一个关于如何提高像素/片段着色器执行速度的问题。这是一个相当广泛的问题,具体取决于每个 GPU/平台和游戏内容的特性,但我在本帖中扩展了我“头脑风暴”式的回答,以便其他人也觉得有用。这不是一份详尽的清单,更像是一个高层…...
ZLib库使用详细教程 以及标准ZLib函数和QT自带压缩函数比较
1. 下载Zlib 官网下载地址如下:http://www.zlib.net/ 2. 利用cmake编译zlib 有两种方法可以打开cmake-gui winR输入cmd打开命令行,在命令行中输入cmake-gui可以直接打开应用界面找到你一开始安装cmake的文件夹,在bin子文件夹中双击cmake-…...
android stdudio环境: gradle一直安装失败
一、一直显示如下错误 The specified Gradle distribution file:/home/wangqingyuan/.gradle/wrapper/dists/gradle-8.6-bin/gradle-8.6-bin.zip does not exist. 经分析,是因为应用本身设置了gradle版本的地址为本地: 应用目录:gradle/gra…...
2024年12月31日Github流行趋势
项目名称:free-programming-books 项目地址url:https://github.com/EbookFoundation/free-programming-books项目语言:HTML历史star数:344575今日star数:432项目维护者:vhf, eshellman, davorpa, MHM5000, …...
音视频入门基础:MPEG2-TS专题(24)——FFmpeg源码中,显示TS流每个packet的pts、dts的实现
音视频入门基础:MPEG2-TS专题系列文章: 音视频入门基础:MPEG2-TS专题(1)——MPEG2-TS官方文档下载 音视频入门基础:MPEG2-TS专题(2)——使用FFmpeg命令生成ts文件 音视频入门基础…...
设计模式の状态策略责任链模式
文章目录 前言一、状态模式二、策略模式三、责任链模式 前言 本篇是关于设计模式中的状态模式、策略模式、以及责任链模式的学习笔记。 一、状态模式 状态模式是一种行为设计模式,核心思想在于,使某个对象在其内部状态改变时,改变该对象的行为…...
TI毫米波雷达原始数据解析之Lane数据交换
TI毫米波雷达原始数据解析之Lane数据交换 背景Lane 定义Lane 确认确认LVDS Lane 数量的Matlab 代码数据格式参考 背景 解析使用mmWave Studio 抓取的ADC Data Lane 定义 芯片与DCA100之间的数据使用LVDS接口传输,使用mmWave Studio 配置过程中有一个选项是LVDS L…...
Python-Pdf转Markdown
使用pdfminer.sixmarkdownify pdfminer.six可以提取Pdf文本内容markdownify可以将文本内容写markdown文件 安装 pip install pdfminer.six pip install markdownify实现 from pdfminer.high_level import extract_text from markdownify import markdownifydef pdf2markdo…...
win32汇编环境下,双击窗口程序内生成的listview列表控件的某行,并提取其内容的示例程序
;运行效果 ;双击后 ;上源码,仔细研究里面的几条备注就理解原理了 ;提取窗口程序内生成的listview列表控件的内容示例程序 ;抄下面源码,可以在radasm里面直接编译运行。主要的部分加了备注。 ;>>>>>>>>>>>>>>…...
对45家“AI+安全”产品/方案的分析
一. 关键洞察 “AI+安全”创新非常活跃,一片百家争鸣之势,赛道选择上,以事件分诊Incident Triage、 安全辅助Security Copilots、自动化Automation三者为主为主,这充分反映了当前安全运营的主要需求,在产品理念选择上以 AI 和 自动化为主,这确实又切合上了在关键…...