更主动的对话规划者:PPDPP论文解读

news2024/11/13 12:56:19

摘要

主动对话在大语言模型(LLMs)时代中是一个实际且具有挑战性的对话问题,其中对话策略规划是提升LLMs主动性的重要关键。现有的大多数研究通过各种提示方案或使用口头AI反馈迭代增强处理特定案例的能力,以实现LLMs的对话策略规划。然而,这些方法要么受限于冻结状态下LLMs的策略规划能力,要么难以迁移到新案例中。在本研究中,我们引入了一种新的对话策略规划范式,旨在为主动对话问题制定策略,利用可调语言模型插件作为即插即用的对话策略规划器,命名为PPDPP(Plug-and-Play Dialogue Policy Planner)。

具体而言,我们开发了一个新颖的训练框架,既能在现有的人工标注数据上进行监督微调,也能通过基于目标的AI反馈和由LLM自我对话模拟收集的动态交互数据进行强化学习。通过这种方式,LLM驱动的对话代理不仅能够在训练后推广到不同的案例中,还可以通过简单替换已学习的插件,适用于不同的应用场景。

此外,我们还提出在交互设置下评估对话系统的策略规划能力。实验结果表明,在三种不同的主动对话应用场景(包括谈判、情感支持和辅导对话)中,PPDPP始终显著优于现有方法。

主要工作

本文的主要工作如下:

  1. 提出了一种新的对话策略规划范式,名为PPDPP(Plug-and-play Policy Dialogue Planner),用于为大语言模型(LLM)驱动的对话代理制定策略。PPDPP通过插拔式语言模型插件来执行对话策略规划,使LLM可以进行更灵活的对话管理。
  2. 开发了一个新的训练框架,该框架结合了有监督微调和基于自我博弈模拟强化学习。通过人类注释数据的有监督微调和从目标导向的AI反馈中学习,增强了模型的策略规划能力。
  3. 该方法不仅能够在训练后推广到不同的对话案例,还能够通过替换学习到的插件应用于不同的领域和任务,而无需影响LLM的核心响应生成能力。
  4. 提出了在交互式环境中评估对话系统策略规划能力的方案,并在多个主动对话任务中验证了该框架的有效性。实验结果表明,PPDPP在谈判情感支持教学对话三个不同的主动对话任务上均显著优于现有方法 。

image.png
图 1:两种基于 LLM 的主动对话系统的架构。虚线将在推理阶段被遮挡。

介绍

论文引入了一种新颖的对话策略规划范式,利用一个可调的语言模型插件(命名为“即插即用对话策略规划器”PPDPP)来为大语言模型(LLM)制定策略。如图1(b)所示,PPDPP充当策略代理,预测对话代理在下一轮中应采取的对话策略。该策略首先可以通过现有的人类注释语料库进行有监督微调。然后,我们采用自我博弈范式,提示两个LLM(一个作为助手,一个作为用户)根据不同的案例背景信息进行角色扮演对话,以模拟对话代理和实际用户之间的多轮交互动态环境。对于每个案例,这两个LLM分别承担不同的,通常是相互竞争的目标(例如,在谈判对话中,买家试图获得更有利的价格,而卖家则希望达成更高的价格)。与此同时,第三个LLM作为奖励模型,提供目标导向的语言反馈,指示目标的完成情况,这些反馈将被转换为用于强化学习(RL)的标量奖励。当达到目标或达到最大对话轮次时,我们利用RL算法进一步调整策略代理,以收集的交互数据和目标导向的AI反馈为基础进行优化。通过这种方式,LLM驱动的对话代理不仅比基于提示的方法展现出更强的适应性,还可以通过简单地切换调优后的插件,在不影响LLM的上下文理解和响应生成能力的前提下,适用于各种不同的应用场景。

为了克服传统回合级别响应评价指标的限制,我们进一步提出了一种基于LLM的交互式评价方法,利用上述的LLM用户模拟器和奖励模型。这种方法能够模拟多样的用户与助手之间的交互,以评估成功率和达到指定目标的平均回合数。我们在三个不同的主动对话问题上进行了广泛的实验,包括谈判、情感支持和辅导对话。实验结果证明了所提出的PPDPP框架在现有LLM对话系统上的优越性,表明PPDPP能够有效且高效地引导对话以达成预定目标。

方法

MDP Environment(马尔可夫环境)

MDP 环境
我们将对话过程建模为马尔可夫决策过程(MDP)。在每个回合 t t t,根据对对话历史的观察,对话系统选择一个动作 a t ∈ A a_t \in A atA,其中 A A A 是由领域专家预先定义的一组候选策略。随后,用户角色对该动作作出回应。这个过程一直重复,直到对话目标实现或达到最大回合数 T T T。目标是学习一个策略 π \pi π,以最大化在观察到的对话过程中累积奖励的期望值:

π ∗ = arg ⁡ max ⁡ π ∈ Π [ ∑ t = 0 T r ( s t , a t ) ] \pi^* = \arg \max_{\pi \in \Pi} \left[ \sum_{t=0}^{T} r(s_t, a_t) \right] π=argπΠmax[t=0Tr(st,at)]

其中, s t s_t st 表示对话历史的状态, r ( ⋅ ) r(\cdot) r() 是中间奖励,表示为 r t r_t rt

Plug-and-Play Dialogue Policy Planner(即插即用对话策略规划器)

如图 1(b) 所示,采用了一个较小的模型作为插件,用于控制LLM驱动的对话代理中的对话策略规划。我们使用一个可调的预训练语言模型,例如 RoBERTa(Liu et al., 2019),作为对话策略规划器,用于预测动作 a t a_t at。在进行交互式在线学习之前,可以通过现有的对话语料库 D \mathcal{D} D 进行有监督的微调(SFT) 来初始化PPDPP。具体来说,给定对话历史 { u 1 s y s , u 1 u s r , . . . , u t − 1 s y s , u t − 1 u s r } \{ u_1^{sys}, u_1^{usr}, ..., u_{t-1}^{sys}, u_{t-1}^{usr} \} {u1sys,u1usr,...,ut1sys,ut1usr} 作为当前状态 s t s_t st,SFT 过程旨在最小化预测的动作 a t a_t at 与每个标注回合 t t t 中的人工标注动作 y t y_t yt 之间的交叉熵损失:

a t = PPDPP ( u 1 s y s , u 1 u s r , . . . , u t − 1 s y s , u t − 1 u s r ) (2) a_t = \text{PPDPP}(u_1^{sys}, u_1^{usr}, ..., u_{t-1}^{sys}, u_{t-1}^{usr}) \tag{2} at=PPDPP(u1sys,u1usr,...,ut1sys,ut1usr)(2)

L c = − 1 ∣ D ∣ ∑ d ∈ D 1 T d ∑ t = 1 T d a t log ⁡ y t (3) L_c = - \frac{1}{|\mathcal{D}|} \sum_{d \in \mathcal{D}} \frac{1}{T_d} \sum_{t=1}^{T_d} a_t \log y_t \tag{3} Lc=D1dDTd1t=1Tdatlogyt(3)

其中, T d T_d Td 表示对话的轮次数。尽管基于语料的学习通常会导致次优策略,这样的初始化应该有助于加速交互式在线训练的收敛过程。

自我博弈互动

在交互式在线学习过程中,我们提示两个LLM分别作为用户和助手,进行自我博弈对话,模拟动态的用户-助手交互。每个LLM会接收到角色和相应对话目标的任务描述。例如,在情感支持对话中,患者(用户)将接收到关于情感问题原因的情境描述,而治疗师(助手)将接收到任务描述,帮助减少用户的情绪困扰并引导他们解决问题。在教学对话中,学生(用户)将接收到关于其知识状态的描述,而老师(助手)将接收到教授用户掌握特定练习的任务描述。

当轮到助手时,PPDPP首先基于互动历史预测下一个动作 a t a_t at。预测的动作会映射到一个预定义的自然语言指令 M a ( a t ) \mathcal{M}_a(a_t) Ma(at)。然后助手生成基于对话历史和自然语言动作指令的策略响应:

u t s y s = LLM s y s ( p s y s ; M a ( a t ) ; u 1 s y s , u 1 u s r , . . . , u t − 1 s y s , u t − 1 u s r ) (4) u_t^{sys} = \text{LLM}_{sys}(p_{sys}; \mathcal{M}_a(a_t); u_1^{sys}, u_1^{usr}, ..., u_{t-1}^{sys}, u_{t-1}^{usr}) \tag{4} utsys=LLMsys(psys;Ma(at);u1sys,u1usr,...,ut1sys,ut1usr)(4)

接着,用户角色基于更新的对话历史生成响应,其中包括 u t s y s u_t^{sys} utsys

u t u s r = LLM u s r ( p u s r ; u 1 s y s , u 1 u s r , . . . , u t − 1 s y s , u t − 1 u s r , u t s y s ) (5) u_t^{usr} = \text{LLM}_{usr}(p_{usr}; u_1^{sys}, u_1^{usr}, ..., u_{t-1}^{sys}, u_{t-1}^{usr}, u_t^{sys}) \tag{5} utusr=LLMusr(pusr;u1sys,u1usr,...,ut1sys,ut1usr,utsys)(5)

其中, p s y s p_{sys} psys p u s r p_{usr} pusr 是相应的提示词。这个过程会重复,直到达到终止状态。总体而言,在自我博弈互动中有三种状态:1) 进行中:对话仍在继续,尚未达到目标;2) 目标完成:指定的对话目标完成,例如解决寻求者的情感问题或学生掌握练习;3) 目标失败:如果对话达到最大回合数但未能完成目标,则被视为失败。

LLM作为奖励模型

我们引入了第三个LLM作为奖励模型,命名为 L L M r w d LLM_{rwd} LLMrwd,它有两个功能:(1)在对话过程中确定目标的完成情况;(2)通过标量奖励评估策略结果。具体来说,我们提示奖励模型回答一个多选问题,以生成目标导向的AI反馈。我们进一步定义了一个映射 M r ( ⋅ ) \mathcal{M}_r(\cdot) Mr() 来将语言反馈转换为标量奖励。

由于规划结果的主观性以及LLM生成的输出的差异性,我们遵循一种常见做法(Wang等,2023e),通过对奖励LLM生成的序列进行采样来缓解这些问题。一般来说,我们通过对目标导向的AI反馈采样 l l l 次,获得标量值 v t v_t vt,并将其转换为标量值,具体计算公式为:

v t = 1 l ∑ i = 1 l M r ( LLM r w d ( p r w d ; u 1 s y s , u 1 u s r , . . . , u t − 1 s y s , u t − 1 u s r , u t s y s , u t u s r ; τ ) ) (6) v_t = \frac{1}{l} \sum_{i=1}^{l} \mathcal{M}_r \left( \text{LLM}_{rwd}(p_{rwd}; u_1^{sys}, u_1^{usr}, ..., u_{t-1}^{sys}, u_{t-1}^{usr}, u_t^{sys}, u_t^{usr}; \tau) \right) \tag{6} vt=l1i=1lMr(LLMrwd(prwd;u1sys,u1usr,...,ut1sys,ut1usr,utsys,utusr;τ))(6)

其中, p r w d p_{rwd} prwd 是提示词。我们首先使用 v t v_t vt 来确定自我博弈互动的状态。如果 v t v_t vt 不低于某一阈值 ϵ \epsilon ϵ,我们将状态视为目标完成。如果对话达到终止状态,包括目标完成目标失败,我们将获得奖励 r t = v t r_t = v_t rt=vt。如果没有完成目标,我们会给予一个小的负奖励,例如, r t = − 0.1 r_t = -0.1 rt=0.1,以惩罚对话过长,从而促进更高效的目标完成。

强化学习

当达到目标或对话达到最大轮次时,我们获得目标导向的奖励 r t r_t rt。我们将策略代理表示为 π ( a t ∣ s t ) \pi(a_t|s_t) π(atst),其返回在状态 s t s_t st 下采取动作 a t a_t at 的概率。为了优化策略代理,我们使用简单的策略梯度方法(Sutton等,1999),公式如下:

θ ← θ − α ∇ log ⁡ π θ ( a t ∣ s t ) R t (7) \theta \leftarrow \theta - \alpha \nabla \log \pi_{\theta}(a_t|s_t) R_t \tag{7} θθαlogπθ(atst)Rt(7)

其中, θ \theta θ 表示策略网络的参数, α \alpha α 表示策略网络的学习率, R t R_t Rt 是从第 t t t 轮到最后一轮 T T T 的累积总奖励:

R t = ∑ t ′ = t T γ T − t ′ r t ′ R_t = \sum_{t'=t}^{T} \gamma^{T-t'} r_{t'} Rt=t=tTγTtrt

其中, γ \gamma γ 是用于折扣未来奖励相对于即时奖励的折扣因子。

在推理过程中,调优后的PPDPP直接基于对话历史提供动作提示,引导对话LLM生成下一轮的响应,而奖励LLM则不会使用(如图1(b)所示)。通过这种方式,使用调优后的PPDPP的LLM驱动对话代理可以直接应用于不同的新情况,无需为每个新案例进行多次迭代模拟。

方法分析

推理阶段工作流程

在推理阶段,经过训练的 PPDPP 作为对话策略规划器,指导 LLM(大型语言模型)驱动的对话代理与真实用户进行交互。整个过程不再使用奖励模型 L L M r w d LLM_{rwd} LLMrwd

具体流程如下:

  1. 初始化对话: 对话开始时,系统准备好初始的对话历史 s t s_t st,可能为空或包含初始信息。

  2. 策略规划器预测动作:

    • 输入: 对话历史 s t s_t st(包括系统和用户的所有前述话语)。
    • 过程: PPDPP(如使用经过微调的 RoBERTa)根据 s t s_t st 预测下一步应采取的策略动作 a t a_t at
    • 输出: 动作 a t a_t at,例如 “询问用户需求”、“提供建议” 等。
  3. 动作映射为指令:

    • 将预测的动作 a t a_t at 映射为预定义的自然语言指令 M a ( a t ) \mathcal{M}_a(a_t) Ma(at),例如将动作 “询问用户需求” 映射为指令 “请询问用户他们目前面临的主要问题是什么。”
  4. LLM 生成系统回复:

    • 输入:
      • L L M s y s LLM_{sys} LLMsys(系统的 LLM),如 GPT-4。
      • 提示词 p s y s p_{sys} psys
      • 自然语言动作指令 M a ( a t ) \mathcal{M}_a(a_t) Ma(at)
      • 对话历史 s t s_t st
    • 过程: LLM_{sys} 基于 M a ( a t ) \mathcal{M}_a(a_t) Ma(at) s t s_t st 生成系统的下一轮回复 u t s y s u_t^{sys} utsys
    • 输出: 系统回复 u t s y s u_t^{sys} utsys
  5. 与用户交互:

    • 用户回复: 真实用户阅读 u t s y s u_t^{sys} utsys 后,生成他们的回复 u t u s r u_t^{usr} utusr
    • 更新对话历史: u t s y s u_t^{sys} utsys u t u s r u_t^{usr} utusr 添加到对话历史 s t s_t st 中,形成新的状态 s t + 1 s_{t+1} st+1
  6. 循环迭代: 重复步骤 2 至 5,直到对话达到终止条件,例如目标完成或达到最大回合数。

注意事项:

  • 无奖励模型参与: 在推理阶段,奖励模型 L L M r w d LLM_{rwd} LLMrwd 不参与对话过程,因为策略规划器已经在训练阶段学会了如何选择合适的策略。
  • 灵活适应新场景: 通过更换 PPDPP,可以在不影响 LLM 核心响应生成能力的情况下,适用于不同的应用场景。

训练阶段工作流程

训练阶段包括有监督微调和基于自我博弈的强化学习两部分。整个流程旨在优化策略规划器,使其能够在与用户的交互中选择最佳策略,达到预定的对话目标。

具体流程如下:

1. 有监督微调(Supervised Fine-Tuning,SFT)

目的: 初始化 PPDPP,使其具备基本的策略预测能力,加速后续强化学习的收敛。

流程:

  • 数据准备: 使用现有的人类注释对话语料库 D \mathcal{D} D,其中每一轮对话都有人工标注的策略动作 y t y_t yt
  • 训练:
    • 输入: 对话历史 s t s_t st,对应的人工标注动作 y t y_t yt
    • 过程: 最小化预测动作 a t a_t at y t y_t yt 之间的交叉熵损失:
      L c = − 1 ∣ D ∣ ∑ d ∈ D 1 T d ∑ t = 1 T d a t log ⁡ y t L_c = - \frac{1}{|\mathcal{D}|} \sum_{d \in \mathcal{D}} \frac{1}{T_d} \sum_{t=1}^{T_d} a_t \log y_t Lc=D1dDTd1t=1Tdatlogyt
    • 输出: 初始化后的策略规划器 PPDPP。

2. 基于自我博弈的强化学习(Reinforcement Learning via Self-Play)

目的: 通过模拟动态的用户-助手交互,收集数据,进一步优化策略规划器。

流程:

2.1 自我博弈互动
  • 角色设定:
    • L L M _ s y s LLM\_{sys} LLM_sys(助手): 扮演对话系统,具有特定的对话目标。
    • L L M _ u s r LLM\_{usr} LLM_usr(用户): 扮演用户,具有相应的目标或情境描述。
  • 交互过程:
    • 助手回合:
      • 策略预测: PPDPP 根据当前对话历史 s t s_t st 预测下一步动作 a t a_t at
      • 动作映射: a t a_t at 映射为自然语言指令 M a ( a t ) \mathcal{M}_a(a_t) Ma(at)
      • 生成回复: L L M s y s LLM_{sys} LLMsys 基于 M a ( a t ) \mathcal{M}_a(a_t) Ma(at) s t s_t st 生成系统回复 u t s y s u_t^{sys} utsys
    • 用户回合:
      • 生成回复: L L M u s r LLM_{usr} LLMusr 基于更新的对话历史 s t s_t st(包括 u t s y s u_t^{sys} utsys)生成用户回复 u t u s r u_t^{usr} utusr
    • 更新对话历史: u t s y s u_t^{sys} utsys u t u s r u_t^{usr} utusr 添加到 s t s_t st,形成新的状态 s t + 1 s_{t+1} st+1
    • 判断终止: 根据对话是否达到目标、达到最大回合数等条件,判断是否终止。
2.2 LLM 作为奖励模型
  • 目的: 评估策略效果,提供强化学习的奖励信号。
  • 过程:
    • 生成反馈:
      • 输入: 对话历史 s t s_t st,包括最新的系统和用户回复。
      • 过程: 奖励模型 LLM_{rwd} 被提示回答一个与对话目标相关的多选问题,生成目标导向的 AI 反馈。
      • 采样多次: 为了减少主观性和输出差异性,对 LLM_{rwd} 的输出进行 l l l 次采样。
    • 映射奖励: 将语言反馈通过映射函数 M r ( ⋅ ) \mathcal{M}_r(\cdot) Mr() 转换为标量奖励 v t v_t vt
      v t = 1 l ∑ i = 1 l M r ( LLM r w d ( ⋅ ) ) v_t = \frac{1}{l} \sum_{i=1}^{l} \mathcal{M}_r \left( \text{LLM}_{rwd}(\cdot) \right) vt=l1i=1lMr(LLMrwd())
    • 判定状态:
      • 目标完成: 如果 v t ≥ ϵ v_t \geq \epsilon vtϵ(阈值),则视为目标完成。
      • 目标失败: 如果达到最大回合数且未完成目标,则视为目标失败。
    • 给予奖励:
      • 目标完成或失败: r t = v t r_t = v_t rt=vt
      • 继续对话: r t = − 0.1 r_t = -0.1 rt=0.1,以惩罚过长的对话。
2.3 强化学习更新策略
  • 目的: 基于累积奖励优化策略规划器,使其选择能最大化预期累积奖励的动作。
  • 过程:
    • 计算累积奖励:
      R t = ∑ t ′ = t T γ T − t ′ r t ′ R_t = \sum_{t'=t}^{T} \gamma^{T-t'} r_{t'} Rt=t=tTγTtrt
      其中, γ \gamma γ 是折扣因子。
    • 策略梯度更新:
      θ ← θ − α ∇ log ⁡ π θ ( a t ∣ s t ) R t \theta \leftarrow \theta - \alpha \nabla \log \pi_{\theta}(a_t|s_t) R_t θθαlogπθ(atst)Rt
      其中, θ \theta θ 为策略网络参数, α \alpha α 为学习率。
2.4 循环迭代
  • 重复步骤 2.1 至 2.3: 不断进行自我博弈互动,收集数据,更新策略。
  • 直到收敛: 当策略规划器的性能满足预期,或达到训练迭代次数,停止训练。

总结

  • 推理阶段:

    • 使用训练好的 PPDPP 作为策略规划器,根据对话历史预测动作,指导 LLM 生成系统回复。
    • 与真实用户交互, 不再使用奖励模型。
    • 灵活适应不同场景, 通过更换 PPDPP,可应用于不同的任务。
  • 训练阶段:

    • 有监督微调: 初始化策略规划器,使其具备基本策略预测能力。
    • 自我博弈互动: 模拟用户和助手的对话,收集交互数据。
    • 奖励模型评估: 使用 L L M r w d LLM_{rwd} LLMrwd 评估对话效果,提供奖励信号。
    • 强化学习优化: 基于累积奖励,更新策略规划器参数。
    • 循环迭代: 持续进行自我博弈和策略优化,直到策略性能稳定。

通过上述流程,PPDPP 能够有效地学习对话策略,在推理阶段指导 LLM 生成有策略的回复,提升对话代理的主动性和目标完成效率。

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

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

相关文章

元宇宙+教育:打造个性化、互动化学习生态系统!

近两年来,元宇宙风在全球迅速掀起了一股新浪潮。“元宇宙”成为各个行业的热门发展方向,各个行业正试图通过元宇宙寻求新的发展突破口,教育行业也不例外。 教育培训元宇宙作为一种前沿的教育模式,深度融合了虚拟现实、增强现实及…

SAP HCM HR_MAINTAIN_MASTERDATA自带解锁功能

导读 锁功能:在SAP HCM模块有针对人的加锁功能,今天遇到的一个问题是,人员无法被锁住,给我第一反应就是代码没有加锁,代码有问题,但是去看代码系统确实已经加锁,但是系统还是提示这个&#xff…

BPF 调度器 sched_ext 实现机制、调度流程及样例

本文地址:https://www.ebpf.top/post/bpf_sched_ext_dive_into 在文章 Linus 强势拍板合入: BPF 赋能调度器终成正果中,我们回顾了 BPF 在调度器在合入社区过程中的历程,补丁 V7 已经在为合并到 6.11 做好了准备,后续代码仓库也变…

4. 认识 LoRA:从线性层到注意力机制

如果你有使用过 AI 生图,那你一定对 LoRA 有印象,下图来自Civitai LoRA,上面有很多可供下载的LoRA模型。 你可能也曾疑惑于为什么只导入 LoRA 模型不能生图,读下去,你会解决它。 文章目录 为什么需要 LoRA?…

预训练数据指南:衡量数据年龄、领域覆盖率、质量和毒性的影响

前言 原论文:A Pretrainer’s Guide to Training Data: Measuring the Effects of Data Age, Domain Coverage, Quality, & Toxicity 摘要 预训练是开发高性能语言模型(LM)的初步和基本步骤。尽管如此,预训练数据的设计却严…

STM32 HAL freertos零基础(十一)中断管理

1、简介 在FreeRTOS中,中断管理是一个重要的方面,尤其是在嵌入式系统中。正确地处理中断可以确保系统的实时响应能力,并且能够在中断服务程序(ISR)中执行关键操作。FreeRTOS提供了一些机制来帮助开发者管理中断,并确保在多任务环境下中断处理的安全性和高效性。 任何中…

【AI大模型】Transformer模型:Postion Embedding概述、应用场景和实现方式的详细介绍。

一、位置嵌入概述 \1. 什么是位置嵌入? 位置嵌入是一种用于编码序列中元素位置信息的技术。在Transformer模型中,输入序列中的每个元素都会被映射到一个高维空间中的向量表示。然而,传统的自注意力机制并不包含位置信息,因此需要…

3CCD的工作原理

昨天看编辑送的一本《计算机视觉》中3CCD的工作原理错了,其实是百度百科错了,所以我想有人就照搬照抄错了。专业问题不要问百度,百度就是骗子一样的存在,这么多年就从来没有把心思放在做事上。3CCD通过光学棱镜分光后就已经是单色…

智能摄像头MP4格式化恢复方法

如果说生孩子扎堆,那很显然最近智能摄像头多碎片的恢复也扎堆了,这次恢复的是一个不知名的小品牌。其采用了mp4视频文件方案,不过这个案例的特殊之处在于其感染了病毒且不只一次,我们来看看这个小品牌的智能恢复头格式化的恢复方法…

Oracle发邮件功能:设置的步骤与注意事项?

Oracle发邮件配置教程?如何实现Oracle发邮件功能? Oracle数据库作为企业级应用的核心,提供了内置的发邮件功能,使得数据库管理员和开发人员能够通过数据库直接发送邮件。AokSend将详细介绍如何设置Oracle发邮件功能。 Oracle发邮…

基于web的 BBS论坛管理系统设计与实现

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )

一:Linux 背景知识 1.1. Linux 是什么 Linux 是一个操作系统. 和 Windows 是 “并列” 的关系,经过这么多年的发展, Linux 已经成为世界第一大操作系统,安卓系统本质上就是 Linux. 1.2 Linux 发行版 Linux 严格意义来说只是一个 “操作系…

【楚怡杯】职业院校技能大赛 “云计算应用” 赛项样题三

某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,选…

高亮下位机温湿度

效果如下: 如何对QTextEditor中的内容进行高亮和格式化显示: 首先我们要自定义一个类WenshiduHighlighter,继承自QSyntaxHighlighter实现构造函数,在构造函数中将需要匹配的正则和对应的格式创建,存到成员变量中重写父类的void h…

DNS应答报文分析

目录 DNS应答以太网数据帧 1. 数据链路层 1.1 以太网首部:(目的MAC地址6字节)(源MAC地址6字节)(帧类型2字节)共14字节 1.2 以太网首部数据 2. 网络层 2.1 IP协议头部共20个字节 2.2 IP协议头部数据 3. 传输层 3.1 UDP头部共8字节 3.2 UDP头部数据 4. 应用层 4.1 D…

低空经济第一站:无人机飞手人才培养技术详解

在低空经济蓬勃发展的背景下,无人机飞手作为直接操作者和应用者,其人才培养技术成为推动这一新兴经济形态持续健康发展的关键。以下是对无人机飞手人才培养技术的详细解析: 一、培养目标 无人机飞手的培养旨在培养具备扎实无人机操作技能、…

_Array类,类似于Vector,其实就是_string

例子&#xff1a; using namespace lf; using namespace std;int main() {_Array<int> a(10, -1);_Array<_string> s { _t("one"), _t("two") };_pcn(a);_pcn(s);} 结果&#xff1a; 源代码_Array.h&#xff1a; /***********************…

el-table 的单元格 + 图表 + 排序

<el-table border :data"tableDataThree" height"370px" style"width: 100%"><el-table-column :key"activeName 8" width"50" type"index" label"序号" align"center"></el…

macOS系统Homebrew工具安装及使用

1.打开Homebrew — The Missing Package Manager for macOS (or Linux) 2.复制安装命令到终端执行 复制 执行 3. 开始自动安装过程 4.安装成功 5.使用brew安装wget工具

第L6周:机器学习-随机森林(RF)

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 1.什么是随机森林&#xff08;RF&#xff09; 随机森林&#xff08;Random Forest, RF&#xff09;是一种由 决策树 构成的 集成算法 &#…