论文翻译 | Chain of Hindsight aligns LanguageModels with Feedback

embedded/2024/11/14 19:52:11/

摘要

        从人类偏好中学习对于语言模型匹配人类需求并与人类和社会价值观保持一致非常重要。先前的研究通过学习人类的反馈来理解和遵循指令,取得了显著的成功。尽管如此,这些方法要么是建立在人工注释者青睐的精心挑选的模型上,这使得它们在数据利用方面效率低下,并且很难在一般情况下应用,要么是依赖于强化学习,而强化学习往往受到不完美的奖励函数的影响,并且依赖于极具挑战性的优化。在这项工作中,我们提出了一种新的技术,即后见之明链,它很容易优化,并且可以从任何形式的反馈中学习,无论其极性如何。我们的想法是受到人类如何从语言形式的广泛反馈中学习的启发。我们将所有类型的反馈转换为句子序列,然后用于微调模型,使我们能够利用语言模型的语言理解能力。我们在与反馈配对的模型代序列上对模型进行条件设置。通过这样做,模型被训练成基于反馈生成输出,同时学习识别和纠正负面属性或错误。将我们的方法应用于大型语言模型,我们观察到后见之明链在将语言模型与人类偏好对齐方面明显优于以前的方法。我们报告了总结和对话基准的重大改进,我们的方法在人类评估中明显更受欢迎。

1 引言

        大型语言模型在自然语言理解方面取得了惊人的成果[37, 38, 7]。然而,为了保证这些技术对社会产生积极影响,它们与人类价值观保持一致至关重要。实现这一目标中最关键的要素之一是使用人类反馈。人类反馈使我们能够以一种既客观又主观的方式来评估这些模型的性能。它可以帮助识别准确度、公平性和偏见方面的问题,并可以提供关于如何改进模型的见解,以确保模型的输出与社会规范和期望保持一致。由于将人类反馈纳入语言模型的重要性,研究人员一直在开发和测试各种用于人在环系统中方法。这些方法旨在使纳入人类反馈的过程更加高效,从而产生能够在提高性能和准确性的同时,提供更高公平性和更合乎伦理的输出的模型[18, 36, 55, 35, 42, 等等]。
        语言建模的成功在很大程度上归功于监督式微调(SFT)和带人类反馈的强化学习(RLHF)技术的运用。尽管这些方法在提高语言模型在特定任务上的性能方面展示了前景,但它们也存在显著的局限性。SFT依赖于人类标注的数据和积极评价的模型生成来微调预训练的语言模型。然而,这种方法严重依赖于标注数据的可用性,这可能涉及重大的费用和时间投入。此外,仅依赖积极评价的数据可能会限制模型识别和纠正负面属性或错误的能力,从而降低其对新数据和不曾见过的数据的泛化能力。另一方面,RLHF能够从所有数据中学习,无论反馈评价如何。然而,这种方法需要学习一个奖励函数,这可能会出现不一致和不完善[16]。此外,强化学习算法的优化可能具有挑战性,在其应用中存在重大困难。
        在这项工作中,我们旨在通过结合SFT和RLHF的优势来克服它们的局限性,以便利用所有反馈,而不诉诸于强化学习。我们的关键想法是,人类能够从丰富和详细的反馈中学习,这些反馈形式为比较。我们的假设是,通过在一系列生成与反馈配对的条件下训练语言模型,它们能够学会识别和纠正错误和负面属性。
        此外,先前的研究强调了预训练语言模型在上下文学习和指令调整方面的有效性[38, 7, 51, 等等]。基于这些见解,我们引入了一种新方法:将所有人类反馈转化为一个序列,然后微调模型以理解和有效利用这种反馈。具体来说,我们建议在预测输出时,让模型依赖于一个或多个模型输出及其相应的反馈,这些反馈以与其他输出的比较形式呈现。
        本质上,我们的方法通过在生成输出时考虑一个或多个模型生成的输出及其相关的反馈(以与其他输出的比较形式呈现)来微调模型。在训练阶段,模型会收到如“差”和“好”的反馈表达。然后,模型的任务是预测与反馈更一致的输出,如下例所示:“你怎么向6岁的孩子解释神经网络?差:{一个不合格的答案} 好:{一个优秀的答案}。”此外,我们的框架允许整合自然语言反馈,例如“{一个不合格的答案}与{一个优秀的答案}相比,是一个不太受欢迎的答案”,这不仅告诉模型偏好,还提供了额外的特定任务指导。在推理时,当模型接收到表明“好”的积极反馈时,它会被引导生成期望的输出,从而确保更受欢迎的行为。
        我们提出的方法使模型能够从正面和负面反馈中学习,允许识别和纠正负面属性或错误。我们将我们的方法命名为“事后诸葛亮链”(CoH),因为它依赖于一系列事后反馈。我们在摘要和对话任务领域对我们的方法进行了全面评估,与SFT及其各种迭代以及RLHF相比,在自动评估和人类评估中都显示出实质性的性能提升。
        我们的主要贡献有两方面:(a) 我们引入了一种新颖的学习框架,称为CoH,它有效地利用所有可用的反馈数据来提高模型性能,而无需依赖RLHF。值得注意的是,我们的方法CoH保持了与预训练相同的训练目标,使其易于训练且易于扩展;(b) 我们进行了广泛的实验,以展示我们的方法与现有基线(包括最先进的RLHF方法)相比的有效性。

2 Chain of Hindsight 

        我们的目标是利用人类评分的数据和反馈来提高基于Transformer的语言模型的性能,为了实现这一目标,我们提出了一种新颖的方法,超越了传统的SFT方法和RLHF方法。
将所有反馈转化为一个序列。我们的方法旨在考虑人类提供的所有反馈和指示。为了实现这一点,我们向模型展示了一系列模型生成的内容,以及人类提供的相应反馈和解释。我们的方法使用了一种常规的Transformer模型架构,该架构是因果的且仅包含解码器,如[7, 46]在注意力机制工作中的提议。这意味着在每个时间步,模型只能关注过去的时步和自身。给定由令牌x = [x1, · · · , xn]表示的文本,标准的因果语言建模目标定义为最大化x的自回归对数似然性:log p(x) = log ΣQn_i=1 p(xi | x<i)。在CoH中,我们通过结合多个模型输出与反馈来构建x,然后用于指令微调。例如,当模型被提示向孩子解释神经网络时,它会为提示生成多个响应。这些响应然后被组合成一个序列,并与基于人类评分生成的反馈指令配对。图2中展示了一个示例。在训练阶段,模型会接收到表示为“差”和“好”的正反馈和负反馈,模型被条件化以预测更好地匹配后者反馈的输出,例如“如何向6岁的孩子解释神经网络?差:{一个不好的答案} 好:{一个好的答案}。”。此外,我们的框架允许整合自然语言反馈,例如“你怎么向6岁的孩子解释神经网络?差:{一个不合格的答案} 好:{一个优秀的答案}”,这提供了额外的特定任务指导和上下文。通过纳入更广泛的多样化正反馈和负反馈,它进一步增强了模型的性能。在这项研究中,我们选择使用基于评分生成的模板反馈,而不是人类在环中的开放式反馈。反馈类型取决于任务,我们在附录B中列出了上下文自然语言反馈。 

        理论上,人们可以在环中采用人类的开放式反馈。然而,对于这项研究,我们选择使用基于评分的预定模板来生成反馈。在推理阶段,我们以“好”这种积极反馈的形式提示模型,以指导模型生成有利的输出。为了使模型能够从反馈中学习,我们要求模型预测由模型生成的每个令牌 xi ∈ x。不对其它令牌应用损失,因为这在推理时阻碍了模型的生成。这是通过掩码实现的,可以表达为:

log p(x) = log ΣQn_i=1 1O(x)(xi) p(xi | [xj ]i−1_j=0), 

        其中 1O(x)(xi) 表示令牌 xi 是否不属于事后反馈的一部分。换句话说,如果 xi 不属于反馈部分,则为1;如果属于反馈部分,则为0。模型被训练来预测每个非反馈令牌 xi,给定之前的令牌 [xj ]i−1_j=0。 

        训练。我们使用模型输出的数据集及其相应的人类偏好,例如正面和负面评级,从中我们采样小批量的模型输出。为了用自然语言生成后见之明的反馈,我们随机抽取一种反馈格式,并将人类评分纳入其中。我们将后见之明反馈和模型输出组合成后见之明链,作为自回归模型的输入。目标是对输入序列进行自回归预测,并使用交叉熵损失对模型进行优化。我们在最后一个模型输出序列中对每个时间步的损失取平均值。在人类偏好学习机制中,正面和负面数据通常彼此相似(例如:(Anthropic有用且无害的数据集)。由于CoH在预测另一个示例时将模型置于一个示例上,因此模型可以简单地“复制”示例,而无需学习理解底层任务。为了解决这个问题,我们在训练期间随机屏蔽了0%到5%的过去标记,这有助于规范模型并防止其过度拟合到训练期间看到的特定示例[44,30]。为了保持模型在一般语言建模任务上的性能,我们在之前的工作[35]之后增加了一个正则化项,使预训练数据集的对数似然最大化。我们将此技术应用于我们的方法和评估中的所有基线。我们的方法如图2所示,算法算法1中进行了总结。 

2.1 与先验范式的关系 

        我们讨论了CoH与先前从偏好数据中学习的范式的联系。
        监督式微调(SFT)。SFT是偏好学习中常用的方法,涉及使用正标签数据进行微调[35, 42]。然而,我们的方法与SFT的不同之处在于,我们同时整合了正面和非正面的评分数据,并利用了反馈输入。与SFT相比,CoH利用了更广泛的信息谱。
条件SFT。这种方法与决策Transformer模型[8]相似,涉及带有反馈作为前缀令牌的SFT的条件训练。本质上,CoH和条件SFT都使用反馈令牌作为条件输入。然而,区别在于CoH使用了一系列反馈-示例对,使得我们的方法在做出预测时能够基于更全面的信息进行条件化。
带非似然性的SFT。带非似然性的SFT在传统的SFT框架中引入了对负面评分数据的非似然性损失[53, 29]。
        基于人类反馈的强化学习(RLHF)。RLHF[42, 35, 45]涉及根据人类偏好获取奖励函数,并使用强化学习来最大化这个奖励。与RLHF相比,CoH提供了一个更为简单的训练过程,并且正如我们的实验评估将展示的,它在性能方面始终优于RLHF。 

3 评估设置 

        训练数据集。我们使用了三个数据集的组合来从人类反馈中学习。这三个数据集包括:

  • WebGPT。WebGPT数据集[34]包含了总共19,578个比较示例,每个示例包括一个问题、一对模型答案和元数据。答案由人类根据偏好分数进行评分,以帮助识别两个答案中更好的一个。
  • HH。Anthropic的Helpful and Harmless (HH)数据集[14, 4]包含了人类评分的对话。这个数据集中的每个示例都包含了一个人类和一个语言模型之间的两段对话,其中一段对话被人类标记者标记为更偏好。
  • Summarization。总结数据集[45]包含了关于模型生成的总结的人类反馈。人类评估者被要求从呈现给他们的两个选项中选择更好的总结。

        评估基准和指标。我们在总结和对话基准上考虑了自动评估和人类评估。

  • 总结基准。遵循先前的RLHF工作[45, 34, 4],我们考虑在TL;DRs数据集[47]上进行自动评估和人类评估。原始的TL;DR数据集包含了来自reddit.com的约300万个帖子,涵盖了各种主题(子Reddit),以及原始发帖者写的帖子摘要(TL;DRs)。我们使用Stiennon等人[45]提供的过滤版本,其中包含123,169个帖子。我们在验证集上评估性能。

        对于评估指标,标签者为总结的覆盖率(原始帖子中的重要信息有多少被涵盖)、准确性(总结中的陈述在多大程度上是帖子的一部分)、连贯性(总结独立阅读的容易程度)和整体质量进行评分。
        关于评估维度和人类标签者的指导的更多细节可以在附录A中找到。

  • 对话基准。我们还评估了Anthropic的Helpful and Harmless (HH)数据集[14, 4]的验证分割,其中每个示例都包含了一个人类和一个大型语言模型之间的两段对话,其中一段对话被人类所偏好。为了评估对话,我们考虑了诸如帮助性和无害性等指标。一个有帮助的模型应该遵循指示并从少量提示或其他可解释的模式中推断意图。由于给定提示的意图可能不清晰或含糊,我们依赖标签者的判断,我们使用的主要指标是标签者的偏好评分。

        为了收集我们的评估数据,将我们的微调模型部署与人类聊天会过于昂贵且耗时。相反,我们使用正面示例构建了“伪”对话。我们用我们的模型输出替换了先前对话中的每个模型响应,该输出是通过将模型条件化在人类响应和过去的模型输出上生成的。我们采取这种方法而不是让人类直接与微调模型聊天,以重用人类生成的数据,因为收集交互式数据可能非常昂贵且容易受到数据质量低的问题影响。关于评估维度和人类标签者指导的更多细节可以在附录A中找到。
        基线。我们的主要基线是SFT、带非似然性的SFT(记为SFT-U)、条件SFT(记为C-SFT)和RLHF,它们与CoH之间的联系请参考第2.1节。我们使用GPT-J 6B [48]和OPT [57]作为基础预训练模型,其他语言模型也可以使用。遵循先前的工作[35, 42],我们采用PPO算法[43]来实现RLHF基线。我们调整了PPO的超参数和奖励学习以获得最佳可能结果。为了确保公平比较,我们仔细调整了所有其他基线的训练超参数。 

4 结果 

        我们进行这些评估的主要目标是评估我们提议的方法的有效性,该方法侧重于总结和对话基准。我们进行了自动和人工评估,以便将我们的方法与既定基线(包括SFT、条件SFT、不可能SFT和RLHF方法)进行基准测试[35,42]。 

        总结评价。在图3中,我们给出了我们的模型在摘要数据集的测试集上的ROUGE分数。我们提出的方法,CoH,大大优于基线,包括基于预训练模型,SFT,条件SFT,非似然SFT和RLHF。尽管我们的方法很简单,但CoH在所有指标上都优于RLHF。我们注意到RLHF表现第二好,有条件SFT紧随其后。


        为了进一步评估我们提出的方法的性能,我们进行了人体评估,如表1所示。Base为预训练模型,SFT- u为非似然SFT, C-SFT为条件SFT。我们在CoH和基线之间进行了两两比较,因为我们发现,与同时评估多个选项相比,这样做对人类标记者来说是一项更容易的任务。我们从第三方平台雇佣了75名精通英语的人工标注员来提供评级。


        在两两比较中,人类标记者被提供了两个摘要,一个由基线生成,另一个由CoH生成。他们被要求根据上述三个指标在两者中选择最佳(或平局)。指标是准确性、一致性和覆盖率,参照前人的研究[35],我们在其中使用了相同的指令,并额外指导我们的人工标注员进行选择,人工评价指令的完整细节见附录a。表1给出了总结任务的人工评价结果。CoH大大优于RLHF和条件SFT,证明了CoH在使语言模型与人类偏好保持一致方面的有效性。

 

        对话评估。我们在HH数据集上评估我们的方法,通过测试其分类哪一对对话更受偏好的能力。图4展示了基线与我们的方法的比较。SFT在基预训练模型上显示出显著的改进;添加非似然性会降低性能,这表明非似然性损害了模型的生成能力;条件SFT在SFT上显示出改进,展示了从负面示例中学习的益处;RLHF表现第二好,但被我们的CoH显著超越。结果表明CoH在从偏好中学习方面的有效性。我们进一步在基于HH数据集的对话任务上进行评估。我们使用与总结人类评估中相同的75名人类标签者和成对比较的设置。对于这项任务,我们提供人类标签者指导,以评估答案是否有所帮助和无害[4]。结果如表2所示。CoH在符合人类偏好方面显著优于RLHF和条件SFT,展示了CoH的有效性。


        语言反馈。我们通过评估仅使用二元反馈(而非我们的默认设置中的二元反馈与细致语言反馈的组合)的性能来增强我们方法的有效性。我们将没有自然语言反馈的这种基线称为CoH w/o LF。为了评估这些变体的性能,我们进行了一项专注于总结领域的人类评估任务,使用了75名人类评估者的输入。如表3所示的结果表明,我们的默认方法和我们的“w/o LF”变体都显著优于RLHF。此外,我们的发现表明,包含自然语言反馈可以提升结果。人类偏好评分显示,带有语言反馈的模型获得了14.1%的偏好,而没有语言反馈的模型获得了11.6%的偏好。结果表明我们CoH框架的有效性。由于CoH框架提供了将自然语言反馈纳入训练的灵活性,设计更有效的自然语言反馈是我们的未来方向之一。


        模型规模趋势评估。为了评估CoH在不同模型规模上的有效性,我们进行了全面的评估。图5中的发现展示了不同模型规模对CoH方法性能相对于SFT基线和RLHF的影响。值得注意的是,对于较小的模型规模,CoH与SFT基线相比性能略有下降。然而,随着模型规模的增加,CoH始终超越所有SFT和RLHF基线,并显示出积极的规模趋势,表明其在增加模型复杂性时提高模型性能的有效性。
        与ChatGPT蒸馏的比较。本研究中使用的人类偏好开源数据集是基于人类对模型生成的偏好来策划的。尽管这些偏好如我们在实验中所展示的,提供了有价值的学习信号,但这些响应的模型能力明显低于ChatGPT等专有模型。因此,这些开源数据集的数据质量与ChatGPT和用户之间的在线对话(在ShareGPT上分享)相比显得不足。鉴于ShareGPT数据展示了比开源数据集更高的质量和更大的多样性,我们感兴趣的是我们的CoH方法在应用于开源人类偏好数据集时,与在ShareGPT数据上使用的SFT方法相比的表现如何。为此,我们与使用ShareGPT数据的监督式微调的Koala [17]进行了比较。


        值得注意的是,当将SFT和CoH应用于开源数据集时,我们保持了模型和训练超参数的一致性。此外,我们通过在ShareGPT和开源数据集上微调,将CoH与Koala结合起来;在这里,开源数据集提供了正面和负面示例,而ShareGPT仅贡献了正面示例。我们使用与Koala相同的第三方人类标签者进行人类评估,对各种模型生成的响应进行成对比较。这些评估基于专门为ShareGPT保留的问题集。图6中的结果显示,我们的CoH方法在性能上与Koala相当。此外,CoH+Koala的联合方法根据人类评分超过了Koala。与此同时,条件SFT(C-SFT)和SFT在性能上远远落后于Koala。这强调了CoH在利用人类偏好进行学习方面的有效性。 

5 相关工作 

        从后见之明中学习。在本文中,我们探讨了利用人类反馈从后见之明链中学习的方法,这种方法使模型能够从错误中学习并修正生成。学习后见经验的关键想法在目标条件化的强化学习[20, 1, 40]中得到了探讨。Andrychowicz等人[1]提出了后见经验回放(HER)来事后重新标记奖励和转换,以从稀疏反馈中学习。虽然HER依赖于强化学习和距离函数来从后见经验中学习,但我们提出了一种名为CoH的新方法,它使用人类反馈构建后见之明经验链,并直接微调模型。我们的方法与其他方法相比具有几个优势,例如HIR [58],它也利用了错误的模型输出。HIR可以看作是CoH的一种特殊情况,后见之明链的长度为一条。与HIR不同,HIR的训练过程复杂,涉及似然性损失、对比损失和熵损失,我们的方法简单易行。同时,Korbak等人[23]研究了在预训练过程中根据人类偏好进行条件化,并展示了在使语言模型与人类偏好一致方面的性能提升。他们的方法与长度为一条后见之明链的CoH相似。我们的工作专注于微调预训练的语言模型,而Korbak等人[23]专注于改进预训练。
        从人类反馈中学习。先前的工作已经探索了使用人类反馈来改善各种任务,如摘要[6, 60, 45]、对话[55, 18, 4, 5, 2, 41]、翻译[24, 3]、语义解析[26]、故事生成[59]、评论生成[9]、证据提取[36]和遵循指令[35, 4]。它们背后的主要技术可以分为监督式微调(SFT)或在过滤的人类注释上训练,以及从人类反馈中学习奖励函数以进行强化学习,这通常被称为RLHF [10, 32, 27, 50],并已用于训练不需要手工设计奖励的强化学习智能体。Ouyang等人[35]通过使用SFT和RLHF结合人类反馈训练模型,展示了在语言模型对齐性能方面的改进。我们的工作属于SFT的范畴,与SFT的不同之处在于我们的方法基于反馈进行条件化,并且可以从没有正面评分的示例中学习。我们的方法与RLHF相辅相成,可以直接结合起来以进一步改进。Bai等人[5]展示了如何使用指令向模型提供人类偏好和期望行为,其中模型被提示一组陈述/原则,并使用RLHF进行训练。在我们的工作中,我们向模型提供一系列模型输出及其反馈,并训练模型根据反馈/控制令牌生成期望的输出。
        指令微调和条件训练。使用人类反馈在后见之明链上微调类似于指令微调。受大型语言模型令人印象深刻的上下文学习能力驱动,基于指令微调预训练模型已被证明可以在许多基准测试中改善语言模型[例如49, 33, 54, 11, 51, 39, 56, 19等]。指令通常是来自NLP基准测试的重新格式化的示例[例如51, 11]。CoT提示[52]在先前的工作[11, 51]中被广泛认为是指令,特别是由人类编写的逐步解释。与之相关,我们的后见之明链由人类编写的后见反馈和排名模型输出组成。条件训练[21, 13, 25, 8, 12, 31]探讨了在控制令牌上对模型进行条件化以进行可控生成。与之相关,CoH推广到在一系列控制令牌上进行条件化,而不仅仅是一个控制令牌。这样做,CoH使模型能够理解控制令牌及其相应输出之间的差异。我们的工作提出了一个有前景的方向,即使用后见反馈从模型输出中构建指令,并且可以与先前的指令微调和条件训练工作结合起来以进一步改进。 

6 结论 

        总之,我们介绍了后见之明链(CoH),其灵感来源于人类如何通过比较形式的丰富反馈来学习。我们将语言模型条件化在一连串的后见反馈上,使它们能够有效地利用所有示例,无论其偏好分数如何。在摘要和对话数据集上的广泛实验表明,CoH显著优于RLHF和其他基线。
        局限性和未来工作。尽管我们的方法显著优于基线,但它确实存在一些需要解决的局限性:

  • 构建CoH可能会导致长序列,尤其是有多个反馈实例时,这会导致训练计算成本增加。
  • 我们的工作在很大程度上依赖于雇佣的人类标签员进行评估,因为与自动化指标相比,他们的可靠性更高。然而,这种方法虽然不独特于我们的方法,但确实产生了巨大的成本。

        在未来的前景方面,我们基于CoH的人类反馈训练开辟了激动人心的可能性,例如整合外部环境反馈如单元测试,并将其适用性扩展到各种领域。此外,我们目前专注于利用预先存在的偏好进行后见之明学习,这为在线偏好学习的探索铺平了道路,使模型能够进行迭代改进。 

 

 

 

 

 

 


 

 

 

 


http://www.ppmy.cn/embedded/136857.html

相关文章

PySimpleGUI 库 和 pymsql 库

PySimpleGUI 库 PySimpleGUI 是一个用于简化 GUI 编程的 Python 包&#xff0c;它封装了多种底层 GUI 框架&#xff08;如 tkinter、Qt、WxPython 等&#xff09;&#xff0c;提供了简单易用的 API。PySimpleGUI 包含了大量的控件&#xff08;也称为小部件或组件&#xff09;&…

AI笔筒操作说明及应用场景

AI笔筒由来&#xff1a; 在快节奏的现代办公环境中&#xff0c;我们一直在寻找既能提升效率、增添便利&#xff0c;又能融入企业文化、展现个人品味的桌面伙伴。为此&#xff0c;我们特推出专为追求卓越、注重细节的您设计的AI笔筒礼品版&#xff0c;它集高科技与实用性于一身…

在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程

在 Jupyter Notebook 中使用 Matplotlib 进行交互式可视化的教程 引言 数据可视化是数据分析的重要组成部分&#xff0c;能够帮助我们更直观地理解数据。Matplotlib 是 Python 中最流行的绘图库之一&#xff0c;而 Jupyter Notebook 则是进行数据分析和可视化的理想环境。本文…

jupyter+pycharm内部直接运行

第一步&#xff1a;终端使用conda&#xff0c;切换到目标环境&#xff0c;在该虚拟环境下 下载jupyter支持包&#xff08;pip install jupyter&#xff09; 第二步&#xff1a;解决root用户不能直接运行的问题 创建配置文件 jupyter notebook --generate-config 修改…

Linux【基础篇】

-- 原生罪 linux的入门安装学习 什么是操作系统&#xff1f; 用户通过操作系统和计算机硬件联系使用。桥梁~ 什么是Linux&#xff1f; 他是一套开放源代码&#xff08;在互联网上找到Linux系统的源代码&#xff0c;C语言写出的软件&#xff09;&#xff0c;可以自由 传播&…

推荐一款功能强大的视频修复软件:Apeaksoft Video Fixer

Apeaksoft Video Fixer是一款功能强大的视频修复软件&#xff0c;专门用于修复损坏、不可播放、卡顿、画面失真、黑屏等视频问题。只需提供一个准确且有效的样本视频作为参考&#xff0c;该软件就能将受损视频修复到与样本视频相同的质量。该软件目前支持MP4、MOV、3GP等格式的…

在Scrapy爬虫中应用Crawlera进行反爬虫策略

在互联网时代&#xff0c;数据成为了企业竞争的关键资源。然而&#xff0c;许多网站为了保护自身数据&#xff0c;会采取各种反爬虫技术来阻止爬虫的访问。Scrapy作为一个强大的爬虫框架&#xff0c;虽然能够高效地抓取网页数据&#xff0c;但在面对复杂的反爬虫机制时&#xf…

使用docker安装zlmediakit服务(zlm)

zlmediakit安装 zlmediakit安装需要依赖环境和系统配置&#xff0c;所以采用docker的方式来安装不容易出错。 docker pull拉取镜像(最新) docker pull zlmediakit/zlmediakit:master然后先运行起来 sudo docker run -d -p 1935:1935 -p 80:80 -p 8554:554 -p 10000:10000 -p …