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

【文献精读笔记】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过程包括以下几个步骤:

  1. 数据准备:Polyjuice首先生成原始句子和扰动句子的配对。这些扰动句子是通过删除、否定、洗牌等方式从原始句子派生出来的。

  2. 微调过程:接着,Polyjuice使用这些句子对来微调GPT-2模型。微调的目的是让模型学会区分原始句子和扰动句子,并理解它们之间的差异。通过比较这两种句子,模型可以学习到如何对原始输入进行适当的扰动,以生成符合特定任务需求的反事实解释

  3. 适应下游任务:通过微调,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值的特点

  1. 公平性:Shapley值确保了每个参与者获得的收益与其对游戏的贡献成正比。
  2. 效率:总收益被完全分配,没有任何剩余或不足。
  3. 对称性:如果两个参与者对游戏的贡献相同,那么他们将获得相同的Shapley值。
  4. 虚拟玩家:如果一个参与者的加入或离开不会影响其他参与者的收益分配,那么这个参与者的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 (大语言模型的可解释性综述)(三)-CSDN博客
【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(四)-CSDN博客

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(五)-CSDN博客 

相关文章:

【文献精读笔记】Explainability for Large Language Models: A Survey (大语言模型的可解释性综述)(二)

****非斜体正文为原文献内容(也包含笔者的补充),灰色块中是对文章细节的进一步详细解释! 3.1.2 基于注意力的解释(Attention-Based Explanation) 注意力机制可以揭示输入数据中各个部分之间的关系&#…...

朱姆沃尔特隐身战舰:从失败到威慑

前言 "朱姆沃尔特"号驱逐舰是美国海军雄心勃勃的项目,旨在重塑未来海战。它融合了隐身、自动化和强大火力,然而由于技术问题和预算超支,原计划建造32艘的目标被大幅缩减,最终只建造了三艘。该舰的设计特点包括“穿浪逆船…...

免费分享 | 基于极光优化算法PLO优化宽度学习BLS实现光伏数据预测算法研究附Matlab代码

研究内容 宽度学习系统(BLS)简介: BLS是一种新型的神经网络结构,由增强节点(Enhancement Nodes, ENs)和特征节点(Feature Nodes, FNs)组成,具有结构简单、训练速度快、泛…...

logback日志文件多环境配置路径

项目中遇到问题,springboot项目 本地jar包部署到现场后,经常遇到现场的日志存放的路径会更改,经过查阅,有两种方式,下面简单说明一下。 一、第一种 启动jar包时 添加参数 --logging.configF:\hgtest\config\logback.x…...

面试高频:一致性hash算法

这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些…...

docker部署项目

docker部署项目 (加载tar包:docker image load -i mysql.tar) 一、jdk环境配置 1.jdk下载地址 --Java Archive | Oracle 中国 --选择好版本进入 --下载Linux x64 Compressed Archive的链接 2.解压 --创建文件夹:mkdir /ro…...

每天40分玩转Django:Django Celery

Django Celery 一、知识要点概览表 模块知识点掌握程度要求Celery基础配置、任务定义、任务执行深入理解异步任务任务状态、结果存储、错误处理熟练应用周期任务定时任务、Crontab、任务调度熟练应用监控管理Flower、任务监控、性能优化理解应用 二、基础配置实现 1. 安装和…...

df.groupby(pd.Grouper(level=1)).sum()

df.groupby(pd.Grouper(level1)).sum() 在 Python 中的作用是根据 DataFrame 的某一索引级别进行分组,并计算每个分组的总和。具体来说: df.groupby(...):这是 pandas 的分组操作,按照指定的规则将 DataFrame 分组。 pd.Grouper(…...

运动控制探针功能详细介绍(CODESYS+SV63N伺服)

汇川AM400PLC和禾川X3E伺服EtherCAT通信 汇川AM400PLC和禾川X3E伺服EtherCAT通信_汇川ethercat通信-CSDN博客文章浏览阅读1.2k次。本文详细介绍了如何使用汇川AM400PLC通过EtherCAT总线与禾川X3E伺服进行通信。包括XML硬件描述文件的下载与安装,EtherCAT总线的启用,从站添加…...

C语言基础18(GDB调试)

文章目录 GDBGDB概述什么是GDB**GDB**的主要功能 GDB的启动GDB常见的启动方式 GDB的退出GDB的常用命令GDB查看源代码指令———list(1)**GDB** 查看设置**------info****GDB** 查看内存**GDB** 设置断点**---break (b)****GDB** 设置观察点**---watch****GDB** 程序调试 GDB完整…...

《向量数据库指南》——应对ElasticSearch挑战,拥抱Mlivus Cloud的新时代

在当今数据驱动的商业环境中,向量数据库的应用正变得愈加重要。随着人工智能和机器学习的快速发展,尤其是在自然语言处理、图像识别及推荐系统等领域,向量数据库以其强大的存储和检索能力,迎来了广泛的应用机会。然而,在实际应用中,企业在选择和实施向量数据库方案时,常…...

c++的stl库中stack的解析和模拟实现

目录 1.stack的介绍和使用 1.1stack的介绍 1.2stack的使用 2.stack的模拟实现 1.stack的介绍和使用 1.1stack的介绍 1. stack 是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stac…...

C语言——字符函数和内存函数

目录 前言 字符函数 1strlen 模拟实现 2strcpy 模拟实现 3strcat 模拟实现 4strcmp 模拟实现 5strncpy 模拟实现 6strncat 模拟实现 7strncmp 模拟实现 8strstr 模拟实现 9strtok 10strerror 11大小写字符转换函数 内存函数 1memcpy 模拟实现 2…...

查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的

问题背景 查询docker overlay2文件夹下的 c7ffc13c49xxx是哪一个容器使用的 [root@lnops overlay2]# du -sh * | grep G 1.7G 30046eca3e838e43d16d9febc63cc8f8bb3d327b4c9839ca791b3ddfa845e12e 435G c7ffc13c49a43f08ef9e234c6ef9fc5a3692deda3c5d42149d0070e9d8124f71 1.…...

Golang的容器编排实践

Golang的容器编排实践 一、Golang中的容器编排概述 作为一种高效的编程语言,其在容器编排领域也有着广泛的运用。容器编排是指利用自动化工具对容器化的应用进行部署、管理和扩展的过程,典型的容器编排工具包括Docker Swarm、Kubernetes等。在Golang中&a…...

【51项目】51单片机自制小霸王游戏机

视频演示效果: 纳新作品——小霸王游戏机 目录: 目录 视频演示效果: 目录: 前言:...

ArkTs之NAPI学习

1.Node-api组成架构 为了应对日常开发经的网络通信、串口访问、多媒体解码、传感器数据收集等模块,这些模块大多数是使用c接口实现的,arkts侧如果想使用这些能力,就需要使用node-api这样一套接口去桥接c代码。Node-api整体的架构图如下&…...

【数据库初阶】MySQL中表的约束(上)

🎉博主首页: 有趣的中国人 🎉专栏首页: 数据库初阶 🎉其它专栏: C初阶 | C进阶 | 初阶数据结构 亲爱的小伙伴们,大家好!在这篇文章中,我们将深入浅出地为大家讲解 MySQL…...

173. 矩阵距离 acwing -多路BFS

原题链接:173. 矩阵距离 - AcWing题库 给定一个 N行 M 列的 01矩阵 A,A[i][j] 与 A[k][l]]之间的曼哈顿距离定义为: dist(i,j,k,l)|i−k||j−l|| 输出一个 N 行 M 列的整数矩阵 B,其中: B[i][j]min1≤x≤N,1≤y≤M,A…...

Linux下部署Redis集群 - 一主二从三哨兵模式

三台服务器redis一主二从三哨兵模式搭建 最近使用到了redis集群部署,使用一主二从三哨兵集群部署redis,将自己部署的过程中的使用心得分享给大家,希望大家以后部署的过程减少一些坑。 服务器准备 3台服务器 ,确定主redis和从red…...

实战设计模式之建造者模式

概述 在实际项目中,我们有时会遇到需要创建复杂对象的情况。这些对象可能包含多个组件或属性,而且每个组件都有自己的配置选项。如果直接使用构造函数或前面介绍的工厂方法来创建这样的对象,可能会导致以下两个严重问题。 1、参数过多。当一个…...

活动预告 | Microsoft Azure 在线技术公开课:使用 Azure OpenAI 服务构建生成式应用

课程介绍 通过 Microsoft Learn 免费参加 Microsoft Azure 在线技术公开课,掌握创造新机遇所需的技能,加快对 Microsoft Cloud 技术的了解。参加我们举办的“使用 Azure OpenAI 服务构建生成式应用”活动,了解如何使用包括 GPT 在内的强大的…...

ubuntu安装firefox

firefox下载地址:https://ftp.mozilla.org/pub/firefox/releases/ 卸载 sudo apt-get update dpkg --get-selections |grep firefox apt-get purge firefox 解压 tar -xjf firefox*.tar.bz2复制文件 sudo mv firefox/ /opt/firefox30sudo mv /usr/bin/firefox /…...

计算机网络原理(谢希仁第八版)第4章课后习题答案

第四章 网络层 详细计算机网络(谢希仁-第八版)第四章习题全解_计算机网络第八版谢希仁课后答案-CSDN博客 1.网络层向上提供的服务有哪两种?是比较其优缺点。网络层向运输层提供 “面向连接”虚电路(Virtual Circuit)服…...

RabbitMQ-基本使用

RabbitMQ: One broker to queue them all | RabbitMQ 官方 安装到Docker中 docker run \-e RABBITMQ_DEFAULT_USERrabbit \-e RABBITMQ_DEFAULT_PASSrabbit \-v mq-plugins:/plugins \--name mq \--hostname mq \-p 15672:15672 \-p 5672:5672 \--network mynet\-d \rabbitmq:3…...

从零开始学架构——互联网架构的演进

1 技术演进 1.1 技术演进的动力 对于新技术,我们应该站在行业的角度上思考,哪些技术我们要采取,哪些技术我们不能用,投入成本过大会不会导致满盘皆输?市场、技术、管理三者组成的业务发展铁三角,任何一个…...

python +tkinter绘制彩虹和云朵

python tkinter绘制彩虹和云朵 彩虹,简称虹,是气象中的一种光学现象,当太阳光照射到半空中的水滴,光线被折射及反射,在天空上形成拱形的七彩光谱,由外圈至内圈呈红、橙、黄、绿、蓝、靛、紫七种颜色。事实…...

重新整理机器学习和神经网络框架

本篇重新梳理了人工智能(AI)、机器学习(ML)、神经网络(NN)和深度学习(DL)之间存在一定的包含关系,以下是它们的关系及各自内容,以及人工智能领域中深度学习分支对比整理。…...

TypyScript从入门到精通

TypyScript从入门到精通 TypyScript 是什么?增加了什么环境搭建二、为何需要 TypeScript三、编译 TypeScript四、类型声明五、类型推断基本类型六、类型总览JavaScript 中的数据类型TypeScript 中的数据类型1. 上述所有 JavaScript 类型2. 六个新类型:3.…...

【MATLAB】绘制投资组合的有效前沿

文章目录 一、数据准备二、有效前沿三、代码3.1 数据批量读取、预处理3.2 绘制可行集3.3 绘制有效前沿3.4 其它-最大夏普率 一、数据准备 准备多个股票的的历史数据,目的就是找到最优的投资组合。 下载几个标普500里面的公式的股票数据吧,下载方法也可…...