【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释!
3.1.2 基于注意力的解释(Attention-Based Explanation)
注意力机制可以揭示输入数据中各个部分之间的关系,从而为模型的预测提供解释。许多现有方法尝试仅基于注意力权重或通过分析注意力中编码的知识来解释模型。这些解释技术可以分为三组:可视化方法、基于函数的方法和基于探测的方法。由于基于探测的方法通常用于学习全局解释,因此将在第3.2.1节中讨论。此外,关于注意力权重是否适合解释的研究存在广泛争议。这一主题将在后面的讨论中涵盖。
3.1.2.1 可视化(Visualizations)
(a) 第 6 层句子 A 和句子 B 之间注意力矩阵的二分图注意力表示 (Vig, 2019);
通过使用二部图或热图显示单个输入的注意力模式和统计数据,可视化提供了一种直观的方式来理解模型的工作原理。这些技术涉及在不同尺度上表示关系,以不同形式为不同模型表示注意力。
在输入数据层面,根据前提句和假设句之间的每个单词/token/句子对的注意力得分,以评估模型预测的可信度。一些系统还允许用户手动修改注意力权重以观察效果(通过直接操作注意力权重,可以增加或减少模型对特定单词的关注程度)。
在自然语言处理中,特别是在涉及逻辑推理或问答系统的任务时,“前提句”和“假设句”通常指两个部分:
前提句:提供背景信息或已知事实的句子。
假设句:基于前提句提出的推论或问题。
例如,在问答系统中,前提句可能是一段文本描述,假设句可能是基于该描述的问题。注意力机制会帮助模型识别前提句中哪些部分对回答假设句最为重要。
在神经元层面,可以检查单个注意力头以理解模型行为。
注意力头本质上是一个计算加权平均的机制。每个注意力头都关注输入数据中的不同方面,分析它们的激活模式可以揭示哪些输入部分与模型的输出最为相关。
每个注意力头能够学习到输入数据不同特征或模式,主要是因为它们在训练过程中学习到了不同的权重矩阵。 那万一他们学到了相同的权重矩阵呢?理论上,如果多个注意力头学习到相同的权重矩阵,它们就会关注输入数据的相同方面,导致模型效率低下和冗余。 这相当于多个注意力头在做重复的工作,没有充分利用模型的计算能力。 然而,这种情况在实际训练中很少发生,主要原因如下:
随机初始化: 如前所述,注意力头的权重矩阵是随机初始化的。 这种随机性确保了它们在训练开始时就具有不同的参数,降低了学习到相同权重矩阵的可能性。
反向传播算法和优化器: 反向传播算法和优化器(例如Adam)会不断调整权重矩阵,以最小化损失函数。 这个过程会引导不同的注意力头学习到不同的参数,以更好地捕捉输入数据的不同特征。 如果多个注意力头学习到相同的权重矩阵,损失函数并不会得到显著的降低,因此优化器会倾向于让它们学习到不同的参数。
正则化技术: 一些正则化技术,例如dropout和weight decay,可以防止模型过拟合,并鼓励模型学习到更具泛化能力的参数。 这些技术也能间接地防止多个注意力头学习到相同的权重矩阵。
数据的多样性: 如果训练数据足够多样化,那么不同的注意力头更有可能学习到不同的特征。 如果数据过于单一,则可能导致多个注意力头学习到相同的权重矩阵。
在模型层面,通过可视化模型中不同注意力头(attention heads)和层(layers)之间的注意力分布,可以识别出一些特定的模式或规律。
也有工作侧重于可视化注意力流以追踪注意力的演变,这可用于理解信息转换并实现模型之间的训练阶段比较(DeRose et al., 2020)。因此,注意力可视化提供了一种明确的、交互式的方法来分析偏差、错误和评估决策规则。有趣的是,它还有助于制定解释性假设。
3.1.2.2 基于函数的方法(Function-Based methods)
由于原始注意力不足以完全解释模型预测,人们研发了更佳的变体,以识别解释的重要归因。
梯度作为衡量敏感性与显著性的公认度量标准,故而被广泛融入自定义归因分数内。
这些自定义归因分数在对涉及注意力权重的梯度的定义方式上存在差异。例如,梯度可以是输出相对于注意力权重的偏导数 (Barkan et al., 2021),或者是偏导数的积分 (Hao et al., 2021)。梯度和注意力之间的操作也可以有所不同,例如逐元素乘积。
总的来说,这些融合注意力和梯度的归因分数通常比单独使用任何一个表现得更好,因为它们融合了更多有助于突出重要特征和理解网络的信息。
3.1.2.3 关于注意力的辩论(Debate Over Attention)
有大量研究评估注意力头,但关于这种方法有效性的辩论可能短期内不会解决。这场辩论源于几个关键方面。
- 首先,一些工作将基于注意力的解释与其他方法(如LIME)进行比较,发现注意力通常不能识别对预测最重要的特征 (Serrano & Smith, 2019; Jain & Wallace, 2019)。它们提供的解释不如其他方法(Thorne等人,2019),或者不能与其他解释方法相关联(Jain & Wallace, 2019; Liu et al., 2020; Ethayarajh & Jurafsky, 2021)。
- 其次,一些研究直接批判注意力机制在模型预测中的有效性。他们认为,原始注意力未能捕捉文本中的句法结构,可能不会像通常假设的那样对预测做出贡献(Mohankumar等人,2020)。此外,原始注意力包含冗余信息,降低了其在解释中的可靠性(Bai等人,2021;Brunner等人,2019)。
- 然而,也有研究反驳了这些主张。例如,评估解释模型一致性的挑战存在于许多方法中,不仅只在基于注意力的方法中(Neely等人,2021)。此外,在不重新训练的情况下操纵注意力权重可能会使评估产生偏见(bias)(Wiegreffe和Pinter,2019)。并且,BERT中的注意力头已被证明可以有效地编码语法(Clark等人,2019)。
为了使注意力可解释,人们还探索了技术解决方案,如优化输入表示(Mohankumar等人,2020)、规范化学习目标(Moradi等人,2021)、避免有偏见(bias)的学习(Bai等人,2021)甚至融入人类原理(Arous等人,2021)。但持续辩论的核心原因是缺乏完善的评估标准,这将在第5.1节中进一步讨论。
3.1.3 基于示例的解释(Example-Based Explanations)
基于示例的解释旨在从个体实例的角度解释模型行为。与基于模型或基于特征的解释不同,基于示例的解释说明了模型输出如何随着不同输入而变化。我们关注对抗性示例、反事实解释和数据影响。
- 对抗性示例通常通过操纵输入数据中较不重要的部分来生成。它们揭示了模型失效或出错的案例,揭示了其弱点。
- 相比之下,反事实解释主要通过改变输入数据的重要部分来生成,它们在算法补救等场景中很受欢迎,因为提供对期望结果的补救措施。
- 与操纵输入不同,数据影响检查训练数据如何影响模型对测试数据的预测。
3.1.3.1 对抗性示例(Adversarial Example)
研究表明,神经模型对输入数据的微小变化非常敏感。这些微小的修改可以改变模型决策,而几乎不会被人类察觉。对抗性示例对于揭示模型失效的领域至关重要,并且通常被添加到训练数据中以提高鲁棒性和准确性。
以一种人类难以察觉的方式改变输入文本,但分类会偏离原始分类(Jin 等人,2020 年)(译文:(f) 分类。原始文本:角色们被置于不可能的矫揉造作的情境中,完全与现实脱节(消极)。扰动文本:角色们被置于不可能的精心设计的环境中,完全与现实脱节(积极))
对抗性示例最初是通过word级别操作生成的,如错误、删除和插入,这些在检查时是显而易见的。
word 和 token的区别:
更高级的token级别扰动方法,如TextFooler (Jin et al., 2020),已经发展起来,它们基于排名策略,首先针对重要性高的单词。然后根据词嵌入相似性、词性相似性、句子语义相似性和预测偏移来选择候选词。然而,与上下文相关的表示(contextualized representations)相比,词嵌入(word embedding)在句子表示上存在局限性,常常导致句子的表示变得不连贯。
“词嵌入”指的是将单词转换成固定维度的向量表示,这种表示通常是通过预训练模型(如Word2Vec、GloVe等)得到的,它们能够捕捉单词的语义信息,但是它们是静态的,不包含上下文信息。这意味着同一个单词在不同的句子中,其词嵌入表示是相同的,而不考虑它在句子中的上下文环境。
而“上下文相关的表示”则是指在特定上下文中单词的表示,这种表示能够捕捉到单词在不同上下文中的不同含义。例如,BERT、GPT等模型生成的词嵌入就是上下文相关的,它们能够根据单词在句子中的位置和周围的单词来调整其向量表示,从而更准确地捕捉单词的语义。
因此,当使用词嵌入来表示整个句子时,由于缺乏上下文信息,可能会导致句子的各个部分之间缺乏连贯性,使得句子的整体表示不够准确和自然。相比之下,上下文相关的表示能够更好地捕捉句子的语义结构和连贯性。
通过关注上下文表示,一系列采用掩码-填充(mask-then-infill)过程的工作已经取得了最先进的性能。它们利用预训练的掩码语言模型(如BERT)进行包括替换、插入和合并在内的扰动。通常,使用大型语料库来训练掩码语言模型,生成上下文表示并获得token的重要性排名。然后模型被冻结,按照排名顺序对token进行扰动操作。
- 对于替换,生成的示例替换 masked token。
- 对于插入,新token被插入到masked token的左侧或右侧。
- 对于合并,两个 token被mask并被替换为一个token。
SemAttack (Wang et al., 2022b) 提出了一个更通用且有效的框架,适用于各种嵌入空间,包括错别字空间、知识空间和上下文语义空间。输入token首先被转换到嵌入空间以生成被扰动的嵌入,这些嵌入被迭代优化以满足攻击目标。实验表明,即使在有防御措施的白盒设置中,替换5%的单词可以将BERT的准确率从70.6%降低到2.4%。SemAttack的出色攻击性能可能是因为它直接操纵嵌入。
3.1.3.2 反事实解释(Counterfactual Explanation)
反事实解释是一种解释因果关系的方法,它通过考虑“如果...会怎样?”(What if...?)的问题来探究因果效应。具体来说,反事实解释关注的是:
- 反事实条件:假设某个事件或条件没有发生,那么结果会有什么不同?
- 因果效应:某个因素是否真的导致了某个结果,以及这种影响的程度。
例如,如果一个病人服用了某种药物后康复了,反事实解释会问:“如果病人没有服用这种药物,他还会康复吗?”通过回答这个问题,我们可以更好地理解药物和康复之间的因果关系。
(e)提供输入文本的负面示例以测试模型在情感预测方面的能力,并且也可用于提高模型性能(Wu 等人,2021 年)(译文:原始文本:这对孩子们很好(积极)。
否定示例:这对孩子们不好(消极)。)
反事实解释是一种常见的因果解释形式,使用Granger因果关系的概念来识别哪些输入变量可以用来预测输出变量。然后,我们可以使用反事实解释来进一步探究这些输入变量对输出变量的因果影响。
Granger因果关系(Granger Causality)
Granger因果关系是一种统计概念,用于确定一个时间序列是否可以用来预测另一个时间序列。具体来说:
- 预测能力:如果时间序列X能够提供关于时间序列Y未来值的信息,并且这种信息是Y过去的值所不能提供的,那么我们可以说X在Granger意义上是Y的原因。
- 统计测试:通常通过回归分析和统计测试来确定X是否是Y的Granger原因。
给定一个观察到的输入x和一个具有某些特征变化的扰动ˆx,预测y将变为ˆy。反事实解释揭示了基于某些观察到的输入变化将发生什么。反事实解释被用来满足特定的需求,比如提供一种方法,让用户能够通过改变输入数据中的某些特征来改变模型的预测结果,例如通过选择特定的反事实来实现算法性补救。
例如,如果一个人的贷款申请被拒绝,反事实解释可以提供给他们一些可操作的反馈,告诉他们需要改变哪些特征(比如收入水平、信用评分等)才能获得贷款批准,这种反馈就是一种算法性补救。
示例可以由人类生成,也可以通过如释义或单词替换等扰动技术生成。Polyjuice (Wu et al., 2021)是一个代表性的生成器,它支持对输入句子进行多种排列类型的操作,比如删除、否定和重新排序。它还可以根据token的重要性来扰动它们,这意味着它能够识别并重点影响句子中的关键词汇。然后,Polyjuice会在特定的原始句子和经过扰动的句子对上微调GPT-2,这样做的目的是为了让生成的反事实解释更加适合特定的下游任务。与之前依赖人工的方法相比,每个反事实解释的生成时间从2分钟降低到了10秒,显著提高了效率(Kaushik等人,2020)。
Polyjuice选择使用GPT-2作为其基础模型,"基础模型"(Foundation Model)在这里指的是一个预训练好的、通用的模型,它在大量的数据上进行了学习,具备了处理多种下游任务的通用能力。这样的模型可以被微调(finetune)以适应特定的任务。
Polyjuice过程包括以下几个步骤:
数据准备:Polyjuice首先生成原始句子和扰动句子的配对。这些扰动句子是通过删除、否定、洗牌等方式从原始句子派生出来的。
微调过程:接着,Polyjuice使用这些句子对来微调GPT-2模型。微调的目的是让模型学会区分原始句子和扰动句子,并理解它们之间的差异。通过比较这两种句子,模型可以学习到如何对原始输入进行适当的扰动,以生成符合特定任务需求的反事实解释。
适应下游任务:通过微调,Polyjuice使得GPT-2模型能够更好地适应特定的下游任务。
反事实解释生成被构建为一个两阶段方法,首先mask/选择重要tokens,然后填充/编辑这些tokens。
具体来说,MiCE在第一阶段使用基于梯度的归因选择要mask的tokens,然后在第二阶段通过二分搜索优化最小编辑量。(Ross等人,2021)
- 第一阶段:
别忘了前文提到过:基于梯度的归因是一种技术,它通过分析模型输出相对于每个输入特征的偏导数来确定每个输入特征的重要性。在文本处理中,这可以被用来选择对模型预测影响最大的单词(tokens),这些单词随后可以被遮蔽(mask)或修改以生成反事实解释。
- 第二阶段:
二分搜索是一种算法,它通过反复将搜索空间一分为二来快速定位目标值。在MiCE模型中,二分搜索被用来优化最小编辑量,即在保持反事实解释有效性的同时,尽量减少对原始文本的修改。这种方法通过不断调整编辑的程度,通过二分搜索找到最小的编辑量,使得反事实解释与原始预测的结果不同,但又尽可能接近原始文本。
相比之下,CREST(ContRastive Edits with Sparse raTionalization)是一个结合了选择性合理化(selective rationalization)和反事实文本生成(counterfactual text generation)的框架。
- 第一阶段
选择性合理化,它从大量可能的解释中选择一部分来构建解释。在自然语言处理中,这意味着从文本中选择一些关键部分(如关键单词或短语)来生成解释。这种方法的目的是在保持解释准确性的同时,减少解释的复杂性和长度,使其更加易于理解和使用。
- 第二阶段
反事实文本生成是一种生成与原始文本不同但具有相似效果的文本的过程。通常用于生成与原始文本在某些特征上不同,但预测结果不同的文本。例如,如果一个模型预测某个文本具有负面情感,反事实文本生成可能会改变一些单词,以生成一个具有正面情感预测的文本。
与MiCE不同,CREST模型使用了选择性合理化模型中生成的关键部分(rationales)来创建反事实解释,而不是像MiCE那样严格追求最小化的编辑量。CREST通过这种方式提供了一种更灵活的方法来生成反事实解释,允许在保持解释有效性的同时,有更多的变化和灵活性。CREST模型不通过最小化编辑量来保持原始输入和反事实之间的相似性,而是通过控制合理化器生成的解释的稀疏性来控制这种接近程度。这意味着CREST模型在生成反事实解释时,会考虑到解释的简洁性和重要性,而不是简单地减少编辑量(Treviso等人,2023)。
实验表明,这两种方法都能在有效性和流畅性方面生成高质量的反事实。
3.1.3.3 数据影响(Data Influence)
这一系列方法通过测量单个训练样本对测试点上的损失函数的影响程度,来表征它们在训练过程中的重要性 (Yeh et al., 2018)。这个概念最初来自统计学,描述了在移除特定数据点后模型参数如何受到影响。通过观察影响模式,我们可以加深对模型如何根据其训练数据进行预测的理解。由于研究人员开始认识到数据的重要性,已经开发了几种以数据为中心分析模型的方法。
首先,影响函数(Influence Function)允许我们通过测量梯度和Hessian-向量积(Hessian-vector products)来近似地理解单个训练样本对测试点损失的影响,而无需重新训练模型 (Koh & Liang, 2017)。
Yeh等人(2018)将测试点的预测分解为训练点的线性组合,其中正值表示兴奋训练点,负值表示抑制点。
Data Shapley采用蒙特卡洛和基于梯度的方法来量化数据点对预测器性能的贡献,更高的Shapley值告诉所需的数据类型以改进预测器(Ghorbani和Zou,2019)。
🍚重温Shapley值的基本概念:
Shapley值基于这样一个观点:在一个多人合作游戏中,每个参与者对总收益的贡献是不同的,而Shapley值就是用来公平地分配这些收益的一种方法。具体来说,它考虑了每个参与者在所有可能的参与者组合中的平均贡献。
Shapley值的特点
- 公平性:Shapley值确保了每个参与者获得的收益与其对游戏的贡献成正比。
- 效率:总收益被完全分配,没有任何剩余或不足。
- 对称性:如果两个参与者对游戏的贡献相同,那么他们将获得相同的Shapley值。
- 虚拟玩家:如果一个参与者的加入或离开不会影响其他参与者的收益分配,那么这个参与者的Shapley值为零。
另一种方法使用随机梯度下降(Stochastic Gradient Descent, SGD)的方法来分析单个训练数据点对模型的影响。具体来说,这种方法通过分析不包含该数据点的小型批次(minibatches)来推断该训练点的影响,并利用模型参数的Hessian向量来进行分析(Hara等人,2019)。。
- Hessian矩阵是损失函数相对于模型参数的二阶导数矩阵,它描述了损失函数的曲率。Hessian向量是Hessian矩阵与一个特定方向向量的乘积,它提供了损失函数在该方向上的曲率信息。如果移除某个训练点后,模型参数的Hessian向量发生了显著变化,这表明该训练点对模型有较大的影响。
基于这种方法,TracIn使用训练过程中的检查点来推导训练点的影响(Pruthi等人,2020)。
由于在每次迭代中追踪参数和使用的训练样本是不切实际的,TracIn使用一种启发式方法,即利用在训练过程中定期保存的检查点(checkpoints)。这些检查点包含了模型的参数,可以用来近似计算训练样本的影响。
然而,上述方法通常伴随着昂贵的计算成本,即使应用于中等规模的模型也是如此。为了解决这个问题,可以考虑两个关键维度:1)减少搜索空间;2)减少近似参数的Hessian向量数量。
Guo等人(2020)还展示了影响函数在模型调试中的适用性。
最近,Anthropic已经采用了特征值校正的Kronecker-分解近似曲率(EK-FAC)来扩展这种方法,以适应具有8.1亿、64亿、220亿和520亿参数的LLMs。
结果表明,随着模型规模的增加,有影响力的序列(这里指模型识别出的重要训练样本或数据点)更擅长捕捉查询的推理过程,而较小的模型提供的输出往往只能是与语义无关的信息片段。(Grosse等人,2023)。
3.1.4 自然语言解释(Natural Language Explanation)
(d)为输入文本的重要组成部分提供解释,以协助进行常识推理(Rajani 等人,2019 年)(译文:常识推理问题:在和朋友一起吃汉堡时,人们想要做什么? 选项:玩得开心、美味,或消化不良 ;解释:通常,与朋友一起吃汉堡意味着愉快的时光。)
自然语言处理中的自然语言解释是指用生成的文本解释模型对输入序列的决策。生成自然语言解释的基本方法涉及使用原始文本数据和人工注释的解释来训练语言模型。然后训练有素的语言模型可以自动生成自然语言解释 (Rajani et al., 2019)。
由于解释提供了额外的上下文空间,它们可以提高下游预测的准确性,并作为数据增强技术(Luo等人,2022;Yordanov等人,2022)。
- 这意味着,当我们为模型的预测提供一个解释时,这个解释可以提供额外的信息,帮助模型更好地理解和处理新的数据,从而提高预测的准确性。
- 数据增强是通过创建新的训练样本来提高模型性能的技术,而解释可以提供额外的信息,相当于增加了数据,帮助模型学习。
存在几种不同的预测-解释方法,包括“先解释再预测”(explain-then-predict)、“先预测再解释”(predict-then-explain)和“联合预测-解释”(joint predict-explain)方法。这些方法的选择取决于任务的目的。
- 联合预测-解释:同时进行预测和解释,两者相互影响。
- 先预测再解释:先进行预测,然后为预测结果生成解释。
- 先解释再预测:先生成解释,然后使用这些解释来指导预测。
但是,应用生成的解释的可靠性仍需要进一步调查。值得注意的是,本节介绍的技术以及第4节提到的CoT(Chain of Thought)解释,它们都产生自然语言解释,这意味着它们生成的解释是人类可读的文本,可以直观地理解模型的预测过程。然而,这里覆盖的解释通常由单独的模型生成,而CoT解释是由LLMs本身产生的。
这意味着,有些情况下,我们会有一个专门的模型来生成解释,而在其他情况下,解释是由执行预测的同一个模型生成的。
上篇:【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(一)_可解释推荐的大型语言模型指标独特句子比率 (usr)-CSDN博客
下篇:
相关文章:
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)
****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 3.1.2 基于注意力的解释(Attention-Based Explanation) 注意力机制可以揭示输入数据中各个部分之间的关系&#…...
AI大模型-提示工程学笔记1
卷首语:我所知的是我自己非常无知,所以我要不断学习。 写给AI入行比较晚的小白们(比如我自己)看的,大神可以直接路过无视了。 几个基本概念 1. 给LLM提示 用户可以通过简单的提示词(Prompts)…...
webrtc-internals调试工具
Google 的 Chrome(87 或更高版本)WebRTC 内部工具是一套内置于 Chrome 浏览器中的调试工具; webrtc-internals 能够查看有关视频和音频轨道、使用的编解码器以及流的一般质量的详细信息。这些知识对于解决音频和视频质量差的问题非常有帮助。 webrtc-int…...
百度PaddleSpeech识别大音频文件报错
一、背景 公司前同事留下了一套语音识别项目,内部使用百度PaddleSpeech。在项目验收的时候发现无法识别大音频文件,但是可以识别小音频文件。 这套项目是通过python调用的百度PaddleSpeech,然后提供了restful接口,然后java项目可…...
No.3十六届蓝桥杯备战|数据类型长度|sizeof|typedef|练习(C++)
数据类型⻓度 每⼀种数据类型都有⾃⼰的⻓度,使⽤不同的数据类型,能够创建出⻓度不同的变量,变量⻓度的不同,存储的数据范围就有所差异。 sizeof操作符 sizeof 是⼀个关键字,也是操作符,专⻔是⽤来计算特…...
MapReduce相关概念(自用)
MapReduce:分布式计算模型 MapReduce 是一种分布式计算模型,由 Google 在 2004 年提出,用于大规模数据集(TB 或 PB 级别)的分布式处理。它通过简单的编程模型,将复杂的分布式计算分解为两个基本阶段&#…...
Nginx - 整合lua 实现对POST请求的参数拦截校验(不使用Openresty)
文章目录 概述步骤 1: 安装 Nginx 和 Lua 模块步骤 2: 创建 Lua 脚本用于参数校验步骤 3: 配置 Nginx 使用 Lua 脚本写法二: 状态码写法三 : 返回自定义JSON复杂的正则校验 步骤 4: 测试和验证ngx.HTTP_* 枚举值 概述 一个不使用 OpenResty 的 Nginx 集…...
I2C(一):存储器模式:stm32作为主机对AT24C02写读数据
存储器模式:在HAL库中,I2C有专门对存储器外设设置的库函数 I2C(一):存储器模式的使用 1、I2C轮询式写读AT24C02一页数据2、I2C轮询式写读AT24C02多页数据3、I2C中断式写读AT24C02一页数据4、I2C使用DMA式写读AT24C02一…...
AI助手网站
chatgpt :https://chatgpt.com/ https://openai.com/index/chatgpt/ 百度ai助手 https://chat.baidu.com/ 百度AI助手https://chat.baidu.com/ 文心快码 文心快码BaiduComate 文心快码BaiduComate 文心快码BaiduComate有代码问题,问文…...
初始nginx
华子目录 nginx介绍nginx功能介绍基础特性web服务相关功能nginx进程结构web请求处理机制 nginx进程间通信nginx启动与http连接建立http处理过程 nginx模块介绍nginx命令演示 nginx介绍 nginx是免费的、开源的、高性能的HTTP和反向代理服务器、邮件代理服务器、以及TCP/UDP代理服…...
可扩展性设计架构模式——事件驱动架构
事件驱动架构(Event-Driven Architecture, EDA)是一种可扩展性设计软件架构模式,它通过事件来触发和通信(以事件为核心),实现不同系统组件之间的解耦(促进应用程序或系统部件之间的松耦合通信&a…...
Prometheus 专栏 —— Prometheus安装、配置
配置文件基本结构 global: 全局配置 scrape_interval: 抓取目标指标的频率,默认为 1minevaluation_interval: 评估告警规则的频率,默认为 1minscrape_timeout: 抓取目标指标数据拉取超时,默认为 10s,如果出现 context deadline e…...
Java并发编程面试题:线程池Fork/Join(19题)
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【每日学点鸿蒙知识】WebView代理、2D绘制矩形圆角、TextInput清理按钮、pdf滑动、icon配置问题
1、HarmonyOS Webview 支持设置代理功能吗? 使用Web的onInterceptRequest先拦截再代理来实现。具体可以参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-web-V5#ZH-CN_TOPIC_0000001930757269__on…...
抽奖系统(1)(Java 实现)
1. 需求描述 1. 包含管理员的注册与登录 1) 注册包含:姓名、邮箱、手机号、密码 2) 登录包含两种方式 (1) 电话 密码登录 (2) 电话 短信登录;验证码获取 (3) 登录需要校验管理员身份 2. 人员管理:管理员支持创建普通用户,查看…...
数据库系统原理复习汇总
数据库系统原理复习汇总 一、数据库系统原理重点内容提纲 题型:主观题 1、简答题 第一章:数据库的基本概念:数据库、数据库管理系统、三级模式;两级映像、外码 第二章:什么是自然连接、等值连接; 第三…...
基于16QAM的载波同步和定时同步性能仿真,采用四倍采样,包括Costas环和gardner环
目录 1.算法仿真效果 2.算法涉及理论知识概要 3.MATLAB核心程序 4.完整算法代码文件获得 1.算法仿真效果 matlab2022a仿真结果如下(完整代码运行后无水印): 仿真操作步骤可参考程序配套的操作视频。 2.算法涉及理论知识概要 载波同步是…...
鸿蒙next RCP网络请求工具类进阶版来了
前言: 各位同学大家好,有一段时间没有更新文章了,最近因为鸿蒙官方的网络请求换掉了了rcp 之前是使用http 这些都是原生开发的 当然有那种三方大家熟知的 axios (这个也是基于http 后面也会过时)所以大家还是要了解一下rcp的原生的网络请求的。那么我们…...
driftingblues6_vh靶机
首先把靶机换成NAT模式 使用 arp-scan 命令扫描网段内存活的主机,以获取靶机ip地址 arp-scn -l 尝试访问ip 使用御剑扫描子域名,尝试访问robots.txt文件 通过访问文件我们发现了一个/textpattern/textpattern目录 访问一下目录发现了登录页面 他还给了…...
Go语言入门
文章目录 零、Linux下Go的安装1.下载、解压2.添加环境变量3.验证安装4.初始化Go模块(1)cd到项目目录(2)初始化模块(3)获取依赖包(4)清理和验证依赖(5)检查 go.mod 文件(6)介绍 go.mod 和 go.sum 文件 5.项目目录结构 一、感性认识1.从 Hello world 开始2.加法函数 二、Go语法1.…...
VS Code中怎样查看某分支的提交历史记录
VsCode中无法直接查看某分支的提交记录,需借助插件才行,常见的插件如果git history只能查看某页面的改动记录,无法查看某分支的整体提交记录,我们可以安装GIT Graph插件来解决这个问题 1.在 VSCode的插件库中搜索 GIT Graph安装&a…...
【杂谈】-AI搜索引擎如何改变传统SEO及其在内容营销中的作用
AI搜索引擎如何改变传统SEO及其在内容营销中的作用 文章目录 AI搜索引擎如何改变传统SEO及其在内容营销中的作用1、什么是AI搜索引擎2、AI搜索引擎对SEO策略的影响3、AI搜索引擎在内容营销转型中的作用4、AI搜索引擎在营销领域的挑战、道德问题和未来5、总结 在当今的数字营销世…...
快速掌握Haproxy原理架构
文章目录 一、原理架构二、无负载均衡三、四层负载均衡的工作流程四、七层负载均衡工作流程五、基础属性mode 属性retries 属性maxconn 属性clitimeout 属性servtimeout 属性states uri 属性 一、原理架构 四层tcp代理:Haproxy仅在客户端和服务器之间双向转发流量&…...
Java中以某字符串开头且忽略大小写字母如何实现【正则表达式(Regex)】
第一种思路是先将它们都转换为小写或大写,再使用String类的startsWith()方法实现: 例如,如下的二个示例: "Session".toLowerCase().startsWith("sEsSi".toLowerCase()); //例子之一//例子之二String str "Hello Wo…...
如何提高Redis服务器的最大打开文件数限制
文章目录 如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制3. 修改Redis配置文件4. 修改systemd服务文件5. 重新加载systemd并重启Redis6. 验证更改 注意事项 如何提高Redis服务器的最大打开文件数限制 在运行高并发…...
React 组件通信完整指南 以及 自定义事件发布订阅系统
React 组件通信完整指南 1. 父子组件通信 1.1 父组件向子组件传递数据 // 父组件 function ParentComponent() {const [data, setData] useState(Hello from parent);return <ChildComponent message{data} />; }// 子组件 function ChildComponent({ message }) {re…...
代码随想录算法【Day5\Day6】
DAY5\Day6 1.熟悉哈希表的数据结构:数组、map和set,使用方法、使用场景 2.哈希表应用场景:解决给你一个元素,判断它在集合里是否出现过。 242.有效的字母异位词 本题用数组解决的。 class Solution { public:bool isAnagram(…...
Oracle 数据库执行计划的查看与分析技巧
目录 Oracle 数据库执行计划的查看与分析技巧一、什么是执行计划二、查看执行计划的方法(一)使用 EXPLAIN PLAN 命令(二)通过 SQL Developer 工具查看(三)启用 AUTOTRACE 功能 三、执行计划中的关键信息解读…...
VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比
VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比 目录 VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现VMD-SSA-BiLSTM、VMD-BiLSTM、BiLSTM时间序列预测对比; 2.单变量时间序列预测 就是先vmd把变…...
QGIS二次开发(地图符号库操作)
实习三 地图符号库操作 3.1 任务要求 基于QGIS,实现地图符号的设计/存储与显示;基于QGIS实现一个点、线、面shp矢量图层文件的显示。通过设置引用的符号,改变矢量图层的显示效果;可编辑地图的符号库汇中的点符号、线符号、面符号…...
wordpress网站用token登入开发过程
生成跳转token 示例: function generate_login_token($user_id, $secret_key) {$payload [user_id > $user_id,timestamp > time(),];$payload_json json_encode($payload);$signature hash_hmac(sha256, $payload_json, $secret_key);return base64_en…...
Uniapp在浏览器拉起导航
Uniapp在浏览器拉起导航 最近涉及到要在浏览器中拉起导航,对目标点进行路线规划等功能,踩了一些坑,找到了使用方法。(浏览器拉起) 效果展示 可以拉起三大平台及苹果导航 点击选中某个导航,会携带经纬度跳转…...
在 CentOS 上安装 FFmpeg
在CentOS 上安装 FFmpeg 方法一:在线安装 添加 EPEL 和 RPM Fusion 源: sudo yum install epel-release sudo yum install https://download1.rpmfusion.org/free/el/rpmfusion-free-release-$(rpm -E %rhel).noarch.rpm安装 FFmpeg: sudo yu…...
影刀进阶指令 | liblib反推 (SD AI绘图反推)
文章目录 影刀进阶指令 | liblib反推 (SD AI绘图反推)一. 需求二. 流程三. 实现3.1 流程概览3.2 流程步骤讲解1\. 获取png地址2\. 打开页面3\. 上传png文件4\. 获取png的prompt信息 四. 运维 影刀进阶指令 | liblib反推 (SD AI绘图反推) 先看看我们要实现的功能,li…...
WebStorm 创建一个Vue项目
一、下载并安装WebStorm 步骤一 步骤二 选择激活方式 激活码: I2A0QUY8VU-eyJsaWNlbnNlSWQiOiJJMkEwUVVZOFZVIiwibGljZW5zZWVOYW1lIjoiVU5JVkVSU0lEQURFIEVTVEFEVUFMIERFIENBTVBJTkFTIiwiYXNzaWduZWVOYW1lIjoiVGFvYmFv77yaSkVU5YWo5a625qG25rAIOa0uW3peS9nOWupC…...
回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测
回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现CNN-LSTM卷积长短期记忆神经网络多输入单输出回归…...
rust windwos 两个edit框
use winapi::shared::minwindef::LOWORD; use windows::{core::*,Win32::{Foundation::*,Graphics::Gdi::{BeginPaint, EndPaint, PAINTSTRUCT},System::LibraryLoader::GetModuleHandleA,UI::WindowsAndMessaging::*,}, };// 两个全局静态变量,用于保存 Edit 控件的…...
ArcGIS计算矢量要素集中每一个面的遥感影像平均值、最大值等统计指标
本文介绍在ArcMap软件中,基于矢量面要素集,计算在其中每一个面区域内,遥感影像的像元个数、平均值、总和等统计值,并将统计信息附加到矢量图层的属性表中的方法。 首先,明确一下本文的需求。现在有一个矢量面要素集&am…...
JavaScript高级程序设计基础(十一)
上接语言基础:JavaScript高级程序设计基础(十) 五、集合引用类型 5.1 object 此处简单介绍object,object由两种方式可以创造:由构造函数new Object(),或者对象字面量。如果想要修改对象的值可以用点语法,如object.na…...
【服务器学习专栏 1.2 -- 带外管理】
请阅读 嵌入式学习必备专栏 文章目录 Overview服务器带外管理BMC 介绍BMC 特点BMC 工作原理 Overview 从技术的角度,网络管理可分为带外管理(out-of-band)和带内管理(in-band)两种管理模式。 带内管理,是指…...
《Vue3 二》Vue 的模板语法
在 React 中,想要编写 HTML,是使用 JSX,之后通过 Babel 将 JSX 编译成 React.createElement 函数调用;在 Vue 中,也支持 JSX 的开发模式,但大多数情况下都是使用基于 HTML 的模板语法,在模板中允…...
手机租赁平台开发全攻略打造高效便捷的租赁服务系统
内容概要 手机租赁平台开发,简单说就是让用户能轻松租赁各类手机的高效系统。这一平台不仅帮助那些想要临时使用高端手机的人们节省了不少资金,还为商家开辟了新的收入渠道。随着智能手机的普及,很多人并不需要长期拥有一部手机,…...
【Ext.js 初步入门】Ext.js 作用以及用法 概述
一、Ext.js的作用 首先我们需要了解类似Ext.js以及easyui类似产品的作用是什么。 我的理解是就是相当于一个组件库,它与bootstrap类似产品的区别在于,bootstrap与ext.js和easyui面向的问题不同,bootstrap面向的问题样式,ext.js和…...
基于源码剖析:深度解读JVM底层运行机制
每日禅语 佛说,给你修路的,是你自己;埋葬你的,也是你自己;帮助你的,是你自己;毁灭你的,也是你自己;成就你的,自然还是你自己。所以佛说:自作自受&…...
redis延迟队列
Redis延迟队列 Redis延迟队列是基于Redis构建的消息队列,用来处理需延迟执行的任务。 基本原理 它借助Redis的有序集合(Sorted Set)数据结构达成目的。会把任务及其执行时间分别当成成员与分值存进有序集合,由于执行时间作为分值&…...
GDPU Vue前端框架开发 期末赛道出勇士篇(更新ing)
记住,年底陪你跨年的不会仅是方便面跟你的闺蜜,还有孑的笔记。 选择题 1.下列选项用于设置Vue.js页面视图的元素是()。 A. Template B. script C. style D. title 2.下列选项中能够定义Vuejs根实例对象的元素是(&…...
WordPress TutorLMS插件 SQL注入漏洞复现(CVE-2024-10400)(附脚本)
0x01 产品描述: Tutor LMS是一个功能强大的...
小程序配置文件 —— 14 全局配置 - tabbar配置
全局配置 - tabBar配置 tabBar 字段:定义小程序顶部、底部 tab 栏,用以实现页面之间的快速切换;可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面; 在上面图中,标注了一些 tabBar …...
基于python+Django+mysql文档格式转换工具系统设计与实现
博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。 所有项目都配有从入门到精通的基础知识视频课程ÿ…...
异步线程池中,ThreadPoolTaskExecutor和ThreadPoolExecutor有什么区别?
异步线程池中,org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor和java.util.concurrent.ThreadPoolExecutor有什么区别? org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor 和 java.util.concurrent.ThreadPoolExec…...