开卷翻到毒蘑菇?浅谈大模型检索增强(RAG)的鲁棒性

c6fa4f6e79094c8a5f004c6ab311a9cb.gif

©PaperWeekly 原创 · 作者 | 陈思硕

单位 | 北京大学

研究方向 | 自然语言处理

很久没有写论文 notes 了,近期因为参与对检索增强生成(Retrieval-Augmented Generation, RAG)范式鲁棒性的研究,注意到了近两个月来社区中涌现了一小批关于这个话题的工作,简单梳理以飨读者。

c5b66ca0e3a3fa0e43c2fa069328aad5.png

何为检索增强:模型可以开卷考

纯参数化的大语言模型将其在海量语料上学习到的世界知识存储在模型参数中,虽然已经展现出来强大能力并改变整个 NLP 乃至深度学习社区的研究范式,但纯参数化的模型存在诸多不足: 

1. 长尾记忆困难:不能记住所有训练语料中的所有知识,尤其是对低频的长尾知识记忆困难; 

2. 容易过时:参数中的知识容易过时(ChatGPT 和 LLaMa肯定不知道周二国足的比分,硬预测的话应该会预测个比三比零更大的数 x),更新起来很困难(训练代价且容易造成灾难性遗忘); 

3. 参数太多导致计算代价大:训练和推理代价高昂(虽然有 Scaling Law,但参数量上去之后就没什么人训练甚至部署得起了→_→)。 

类似地,人也很难记住所有的知识(除了高考这种几乎纯比拼 memorization 的考试之前),很多长尾的冷知识和新知识需要的时候从外部的消息源现查就好了。

fbda7d0651001711be4bc598da5ebfaf.jpeg

▲ 全都背下来就会像硬吃记忆面包一样痛苦

同样地,语言模型可以是半参数化的,也就是(参数化的)模型可以外挂一个(非参数化的)语料数据库,推理时以从语料库召回的部分数据为参考组织答案(具体的形式可以是作为额外的上文输入,也可以插在中间的 cross attention 或者输出中),这一范式被称为检索增强生成(Retrieval-Augmented Generation,RAG)

检索增强的语言模型(Retrieval-Augmented Language Model,RALM)的正式定义是: 

A language model (LM) that uses an external datastore at test time.

36b32eee9ed4f17b978405ef18509168.png

▲ 以上定义和示意图来自ACL 2023的Tutorial [1]

示意图如上,对用户输入的文本 x,我们构造记为 q 的 query ,从数据库 D 的索引中召回了小一部分相关文档(右侧的小块简报),模型以其为参考生成最后的输出 y。除了缓解以上三个问题(长尾记忆困难、容易过时、参数太多导致计算代价大)之外,还可以起到给模型的回答提供可靠的消息来源、防止模型权重泄露隐私信息等作用,具体的机制和代表性工作可以参见今年 ACL 上陈丹琦老师领衔的 Tutorial [1],此处不详细展开。

9b25ae63f6be40fd73667f6e2f6108a1.png

检索增强是否一定可靠:开卷翻到了毒蘑菇呢?

交代完了 RAG 这一大背景,回到今天想聊的鲁棒性的正题。我们知道,人在翻书找长尾知识或者上网冲浪吃新瓜的时候,如果不加审慎的分辨,很容易以讹传讹:

c8dc368faf217b26bea89fcc634c60a7.jpeg

当然,语言模型也不比人高明,如果检索增强的时候召回的是和输入问题无关的内容(噪声干扰),甚至是反事实的 fake news 或者被篡改的百科,模型就会像吃了毒蘑菇一样胡言乱语。

5b82b5b18be06ba09b8fb728d504c2a3.png

以下是来自论文 [2] 的一个检索回无关内容后输出被影响的例子,原本对“德牧能不能进机场”这样的简单的问题,ChatGPT是高度认可小狗同志作为导盲犬的价值的,果断说 yes,但是检索模块召回了一段“老德牧是一类 balabala 某种狗的争议性名称”的百科介绍作为额外上文输入后,模型突然对小狗变凶了,说出了“机场不许你入内”这样的负心话。

b35ae76ed1db37f86cdaec30c8b31d60.png

以下是来自论文 [3] 的检索到反事实信息造成模型错误输出的例子。对博闻强识的大模型来说,17-18 赛季的欧冠冠军是道简单题,不用检索增强就知道是皇马,但如果有恶意用户某一天编辑了相关的维基百科把答案改成巴萨,模型通过检索模块吃到这样与自身知识冲突的辅助输入就会被忽悠住,人云亦云,复读出错误的答案。

902371bf6cee52d279e08fa66f73c133.png

5e1588a172eacc32c9693164dc7ccd06.png

如何提高检索增强的可靠性:怎么应对毒蘑菇?

综上所述,RAG 范式中,语言模型有可能在翻资料的时候误食毒鸡汤里的毒蘑菇,进而见小人、躺板板,胡言乱语误了大事。还好,笔者注意近两个月来社区中涌现了一小批研究来增强模型翻小抄的时候的鲁棒性,本文接下来的部分将介绍其中的五篇新鲜论文。

SKR: 以自身知识引导检索增强

da8067b7ee048ef606f032674ed3844d.png

论文标题:

Self-Knowledge Guided Retrieval Augmentation for Large Language Models

论文链接:

https://arxiv.org/pdf/2310.05002.pdf

Takeaway: 发现 RAG 召回的辅助信息不总是有用,甚至可能起负作用,因此设计了名为 SKR (Self-Knowledge Guided Retrieval Augmentation)的框架,对模型本身已知的问题直接生成答案,对未知的问题才调用 RAG 模块。 

解读:直接看具体方法:

2d70e5a55ab9c60be7c5abd78837416c.png

1. 自我知识收集:首先要知道自己知道什么,不知道什么(开始绕口令),因此收集一批有标注的训练集,模型可以直接答对的视为 known,检索增强后才能答对的视为 unknown; 

2. 识别是否已知:对输入的测试问题,利用在训练集上构建的分类器识别其是否已知。分类器构建的方式作者试了好几种,可以用大模型本身上下文学习,可以用 RoBERTa 小模型训个分类器,也可以用 SimCSE的 embedding 为嵌入直接 KNN 分类(实验中 KNN 的性能最好); 

3. 自适应式检索增强:只对第二步中识别为 unknown 的输入进行检索增强,其余输入视为 known,直接回答。 

实验是在一些 QA 数据集上做的,LM 是 InstructGPT 和 ChatGPT,似乎没有详细说明预训练 retriever 是什么模型,结果显示 KNN 版本的 SKR 与不带检索增强的 CoT 以及非自适应的 RAG+CoT 类型的基线相比,能取得 3%-4% 的显著提升。

0f391a745d71506969b94a94f5c053ef.png

笔者有一个 concern 是,上述方法的前二步中,识别 known/unknown 的分类器是在和测试样本同分布的训练集上构建的,而且实验中似乎设定是用了完整的训练集(这样一来实际上有信息泄露,与其他的 zero-shot 和 few-shot 方法比较并不公平)。作者也讨论训练集大小的影响,但是有一点避重就轻的感觉,只表示训练集减小到 10% 会导致 2-3 个点的下降,该方法在训练集和测试集不同分布/可用的样本数很少的情况下的有效性还有待确认。

RECALL: 反事实信息危害极大,现有干预方法难以缓解其风险

c612bc69d7b9788f42a99375c1a1aac9.png

论文标题:

RECALL: A Benchmark for LLMs Robustness against External Counterfactual Knowledge

论文链接:

https://arxiv.org/pdf/2311.08147.pdf

Takeaway: 构建了一套名为 RECALL 的 benchmark 来分析大模型对反事实信息输入的鲁棒性,发现现有开源大模型非常容易被反事实的输入误导,prompt engineering 和幻觉缓解领域中的现存方法难以有效解决该问题。 

解读:与另外几篇工作中,non-relevant contexts 是从正常的大语料库中召回(只是可能与问题本身不太相关,对模型造成干扰)的设定不同,本文聚焦是一种更极端的干扰现象,即反事实信息(counterfactual information),也就是检索召回的内容是与事实恰好相反的假消息。理想情况下,一个明辨是非的模型对不同类输入问题和检索召回内容的处理能力应该是这样的: 

1. 对自己的参数中有明确记忆的问题,即使检索模块的召回的内容与之冲突,也应该坚持原有的正确答案; 

2. 对自己不知道答案的问题,有正确的召回内容时可以以其为参考正确回答,如果召回的内容是错就随缘了 x。 

本文首先提出了量化这一能力的一套 benchmark(名为 RECALL),向 EventKG(常识性知识问答)和 UJ(科学性知识问答)这两个阅读理解数据集中注入了反事实信息,在二选一的 QA 和生成式的问答任务上测试了 ChatGLM2、LLaMa2、Vicuna、Baichuan2 等四个 6B-13B 规模的开源大模型,其中 QA 任务分为两个子集呈现指标,即扰动的时候答案部分被修改(QA-A)和未被修改(QA-NA)。 

结果显示,选择题形式的 EventKG QA 任务上,一旦对 context 的反事实扰动涉及到了答案本身(即答案被篡改为错误选项),模型的 accuracy (下图中的 QA-A Acc)会从 90%+ (图中的第一行"original")下降到 20% 以下(第二行"edited"),远低于没有检索机制,模型直接回答时的 60%左右(第三行“no”)。相比之下,QA-NA 和文本生成的指标下降幅度较小。

af93034c9ff11a9f90d79d188fbd7866.png

为了更精细地量化反事实信息带来的影响,作者额外定义了两个指标: 

  • 误导率 M-Rate: 选择式 QA 中,模型在无上下文输入时原本能答对的问题(即模型预训练阶段记忆住的问题),在接收反事实上下文后回答出错的比例; 

  • 错误重复率 R-Rate: 生成任务中,反事实扰动对应的 tokens 在模型的答案中出现的比例。 

结果显示,EventKG 数据集上,四个大模型在 QA-A 设定下的误导率 M-Rate 高达 80% 以上,生成设定下反事实信息被复读的比例 R-Rate 也高达 85-91%,可见 RAG 模块如果召回了包含反事实信息的参考文档,将对模型的可信度造成巨大的危害。

56b38da0cb1ca6d9fdbead7f139fa916.png

本文比较侧重前面的 benchmark 构建与分析部分,本身没有直接提出新方法来增强模型的鲁棒性,而且测试了两种现存方法: 

  • Prompt Engineering: 简单粗暴,直接在 prompt 中告诉模型“忽略上下文中的反事实信息”; 

  • DOLA [7]: 最近受到关注的一种针对模型幻觉的推理时干预方法,概括地讲是用模型(最后一层)输出的分布减去浅层 hidden states 对应的输出分布做解码。 

出于篇幅考虑此处不拉表格,直接搬运结论: 

  • Prompt Engineering:虽然能提升 QA-A 设定下被扰动时的 accuracy,但对 QA-NA 设定下的 accuracy 反而有损害,有时对生成的质量也有损害; 

  • DOLA: 虽然能小幅提升大部分指标,但会导致生成任务中错误复现率 R-Rate 显著上升。 

  • 结论:以上两类方法都不能稳定地提升模型对反事实输入的鲁棒性,亟需有可靠的新方法解决这一问题。

Training Robust RALMs:数据硬怼,端对端提升鲁棒性

833ed817d6772ba055281e003d0adaf9.png

论文标题:

Making Retrieval-Augmented Language Models Robust to Irrelevant Context

论文链接:

https://arxiv.org/pdf/2310.01558.pdf

解读:本文是篇偏实验分析性质的文章,测试了 NLI 过滤召回结果和直接模拟带噪声的召回内容进行训练两类方法。 

首先,直接用 NLI 预训练模型判断召回的文档和问题是否相关来进行过滤,结论是 NLI 模型的过滤虽然能提升召回信息质量低时模型的鲁棒性,但也会伤及无辜(过滤掉有用的信息),在以 Google 搜索 top-1 为召回内容时总体上是掉点的。 

接下来的方法非常直接暴力,既然 RAG 范式中检索来的内容 可能有噪音,大模型预训练的时候又没见过这种鱼龙混杂的上文,干脆发扬 end-to-end 的精神直接训练。坐着构建了一个 1.5k 样本的训练集,其中包含干净的 context 和扰动的 context,希望模型学习到“不论如何都能输出正确答案”的能力。

结果确实显示该数据上微调后的 LLaMa2-13B 模型在各种 QA 任务上,无论是正常的 Google 搜索召回、故意召回排名低的文档(low-rank retrieval),还是随机召回,都能比普通的 RAG 显著提升准确率,在 low-rank 和 random 的设定下基本和不带 RAG 的原模型相当。

有一点缺憾是,本文没有讨论这种微调是否影响了模型在其他领域的通用能力,未来或许可以考虑将这种为 RAG 鲁棒性设计的数据集加到模型的预训练或者 SFT 阶段中。

Chain of Note:适合检索增强的思维链蒸馏

9d1f400a8f386ea39dd285976a245ca1.png

论文标题:

Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models

论文链接:

https://arxiv.org/pdf/2311.09210.pdf

解读:将思维链(CoT)方法用于增强 RAG 的鲁棒性,在中间推理过程中输出每一篇召回文档与输入问题的相关性(即对召回内容的 note)和自身对问题的认知,最后总结输出答案。作者用 ChatGPT 构造了一个这种格式的 CoT 训练集,将此能力蒸馏到了 LLaMa2 上,显著提升了 LLaMa2 带 RAG 时的鲁棒性。 

值得一提的是,另外几篇文章都没有注意 OOD detection 的问题,即当模型本身和召回文档都不掌握回答问题需要的知识时,应该回答 unknown 而不是胡编乱造,本文考虑了此问题(下图第三栏)。

c52e03866a0f5fd853e65168cff382da.png

Self-RAG:自我求助,自我生成,自我反思

cc804d462de0ee6b95de56937d9b6f1f.png

论文标题:

Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection

论文链接:

https://arxiv.org/pdf/2310.11511.pdf

Takeaway: 本文提出了一个叫 Self-RAG 的框架,方法如其名,希望 LM 自主决定对当前输入是否需要召回(而不是像 SKR [2] 那样训练一个额外的分类器或像 [4] 那样借助一个 NLI 模型判断),把召回内容拼接近输入,再生成一段下文,自主判断召回文档是否与输入问题相关、自己借此生成的一段下文是否合理、是否有用,对 topk 召回内容进行排序,把 top-1 加进最后的输入以尽量生成正确答案。框架如下图右栏所示。

5599b343db5b840bc40ff132d6f6922e.png

解读:如上所示,Self-RAG 把要不要进行检索的决定、判断检索召回内容是否与问题相关、检索增强后的输出是否合理有用这几个决定都转化成了 token 预测的形式,文中称为 reflection tokens,整个过程可以用如下算法概括:

d7239e7775ccfb8475ab6bef50ed2ffe.png

第 2 行产生的 Retrieve 决定是否进行检索,如果进行检索的话,各段内容对应的相关程度 IsREL、自我支持程度 IsSUP、有用程度 IsUSE 共同组成排序的分数标准。作者把各个维度分别分了几档做离散的预测,如下表所示:

4389a05a6e38465f334f6e75e96f7be2.png

以上是方法的骨架,接下来的关键在于如何构造包含reflection tokens 的训练数据来训练 Self-RAG。数据构建的流程略复杂,文中没有给出简洁的流程图,笔者概括如下: 

  • GPT-4 收集种子数据:对四种类型的 reflection tokens,各用 GPT-4 标注 4k-20k 个从开源的 QA 和知识问答数据中收集的样本; 

  • 知识蒸馏,训练 critric model: 在第 1 步的训练数据上微调开源大模型,如LLaMa2-7B,称为 critic model; 

  • 为生成模型生成训练数据:使用上述的 critic model联合检索模块,为最后的生成模型构造模拟整个 Self-RAG 推理过程的训练集(两个例子如下图所示),约 150k 大小; 

  • 训练生成模型:在第 3 步生成的训练数据上训练生成模型,文中为 LLaMa2-7B和 13B,最后推理时只需要该模型,不需要 critic model。

4b32663e4640945cda2852aa1796dd38.png

这里笔者存在一个疑问:是否相关、是否自我支持、是否有用这几个客观标准,用 GPT-4 标注是合理的,但是否需要检索增强,也就是上面的 Retreive 这个 reflection token,是和生成模型本身的能力相关的,GPT-4 不需要检索就能回答的问题,可能 LLaMa2 就需要检索,这里这样蒸馏是否合理有待讨论。 

按下该疑问不表,我们来看目前实现版本的效果,可以发现 Self-RAG 在一系列开放域 QA 和生成任务上都能比普通的检索增强 LLaMa2 取得明显提升。

b6750bf3f6ebc55a0850cdcb44605056.png

79e4173f34ec9f58544dab12682f52e0.png

方法论小结

至此,我们已经阐明了大模型检索增强范式的鲁棒性问题,并检视、学习了五篇意图解决该问题的近期工作。整体来看,方法可以分为两类: 

1. 自适应检索和过滤:即在检索前加一个模块判断该问题是不是需要检索增强才能回答或判断检索回的内容是否有用,以避免不必要的检索召回内容被输入模型产生干扰,如 SKR [2] 用模型自身的信号在训练数据上额外构建一个分类器,[4] 直接使用 NLI 模型,Self-RAG [6] 从 GPT-4 蒸馏能力,让语言模型自己以预测 Retrieve token 的形式判断。

实验已证实这类方法能有效地避免无用的召回内容的干扰,坏处是直接删除被判断为无用的内容,可能误伤有用的检索召回内容。 

2. 生成时干预:希望即使无用甚至错误的内容被检索回来、输入模型,模型对这样的增强输入依然能凭借自身知识保持鲁棒,如 RECALL [2] 的 prompt engineering 或者 Dola 干预,[4] 的直接构造相应的训练数据进行训练,Chain of Note [5] 的思维链蒸馏,Self-RAG [6] 的让模型自身判断召回的内容是否有用。其中只有 RECALL [2] 是不需要训练的,但未取得明显收益,另外三类都需要依赖 ChatGPT 或 GPT4 这些强大的闭源模型构造训练信号。 

最后,笔者想讨论的一点零碎思考是,以上的各工作基本假定检索模型是固定的(Google API 或者冻结的预训练召回模型),如果把检索模型和 index 的更新也考虑进来,是否能进一步提升整个 RAG 系统的鲁棒性?期待看到甚至参与新的相关工作。

小文写作于冬日的燕园和万柳,还有许多细节和未来可能的方向未尽讨论,望诸君不吝赐教。

outside_default.png

参考文献

outside_default.png

[1] Asai, Akari, et al. "Retrieval-based language models and applications." Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 6: Tutorial Abstracts). 2023.
[2] Wang, Yile, et al. "Self-Knowledge Guided Retrieval Augmentation for Large Language Models." arXiv preprint arXiv:2310.05002 (2023).
[3] Liu, Yi, et al. "RECALL: A Benchmark for LLMs Robustness against External Counterfactual Knowledge." arXiv preprint arXiv:2311.08147 (2023).
[4] Yoran, Ori, et al. "Making Retrieval-Augmented Language Models Robust to Irrelevant Context." arXiv preprint arXiv:2310.01558 (2023).
[5] Yu, Wenhao, et al. "Chain-of-Note: Enhancing Robustness in Retrieval-Augmented Language Models." arXiv preprint arXiv:2311.09210 (2023).
[6] Asai, Akari, et al. "Self-RAG: Learning to Retrieve, Generate, and Critique through Self-Reflection." arXiv preprint arXiv:2310.11511 (2023).
[7] Chuang, Yung-Sung, et al. "Dola: Decoding by contrasting layers improves factuality in large language models." arXiv preprint arXiv:2309.03883 (2023).

更多阅读

1350b0c10c68b974b892e4eb47bd745a.png

50171e26df67beb0feada3f68464b667.png

17b7cf810d358e66e403ff0545271ae2.png

6f2dbce5d46941f04753de1cee61e973.gif

#投 稿 通 道#

 让你的文字被更多人看到 

如何才能让更多的优质内容以更短路径到达读者群体,缩短读者寻找优质内容的成本呢?答案就是:你不认识的人。

总有一些你不认识的人,知道你想知道的东西。PaperWeekly 或许可以成为一座桥梁,促使不同背景、不同方向的学者和学术灵感相互碰撞,迸发出更多的可能性。 

PaperWeekly 鼓励高校实验室或个人,在我们的平台上分享各类优质内容,可以是最新论文解读,也可以是学术热点剖析科研心得竞赛经验讲解等。我们的目的只有一个,让知识真正流动起来。

📝 稿件基本要求:

• 文章确系个人原创作品,未曾在公开渠道发表,如为其他平台已发表或待发表的文章,请明确标注 

• 稿件建议以 markdown 格式撰写,文中配图以附件形式发送,要求图片清晰,无版权问题

• PaperWeekly 尊重原作者署名权,并将为每篇被采纳的原创首发稿件,提供业内具有竞争力稿酬,具体依据文章阅读量和文章质量阶梯制结算

📬 投稿通道:

• 投稿邮箱:hr@paperweekly.site 

• 来稿请备注即时联系方式(微信),以便我们在稿件选用的第一时间联系作者

• 您也可以直接添加小编微信(pwbot02)快速投稿,备注:姓名-投稿

063d884450de85401397cb8a46d08571.png

△长按添加PaperWeekly小编

🔍

现在,在「知乎」也能找到我们了

进入知乎首页搜索「PaperWeekly」

点击「关注」订阅我们的专栏吧

·

·

921548ea1b86871cbd4b0a24421caa10.jpeg

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

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

相关文章

Java核心知识点整理大全15-笔记

Java核心知识点整理大全-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全2-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全3-笔记_希斯奎的博客-CSDN博客 Java核心知识点整理大全4-笔记-CSDN博客 Java核心知识点整理大全5-笔记-CSDN博客 Java核心知识点整理大全6…

【Kotlin】类与接口

文章目录 类的定义创建类的实例构造函数主构造函数次构造函数init语句块 数据类的定义数据类定义了componentN方法 继承AnyAny:非空类型的根类型Any?:所有类型的根类型 覆盖方法覆盖属性覆盖 抽象类接口:使用interface关键字函数:funUnit:让…

RocketMq 队列(MessageQueue)

RocketMq是阿里出品(基于MetaQ)的开源中间件,已捐赠给Apache基金会并成为Apache的顶级项目。基于java语言实现,十万级数据吞吐量,ms级处理速度,分布式架构,功能强大,扩展性强。 官方…

Kerberos 高可用配置和验证

参考 https://cloud.tencent.com/developer/article/1078314 https://mp.weixin.qq.com/s?__bizMzI4OTY3MTUyNg&mid2247485861&idx1&snbb930a497f63ac5e63ed20c64643eec5 机器准备 Kerberos主 ip-172-31-22-86.ap-southeast-1.compute.internal 7.common2.hado…

【华为数通HCIP | 网络工程师】821-IGP高频题、易错题之OSPF(7)

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

C语言盐水的故事(ZZULIOJ1214:盐水的故事)

题目描述 挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一 下;再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升&…

【brpc学习实践八】bvar及其应用

什么是bvar bvar是多线程环境下的计数器类库,支持单维度bvar和多维度mbvar,方便记录和查看用户程序中的各类数值,它利用了thread local存储减少了cache bouncing,相比UbMonitor(百度内的老计数器库)几乎不会给程序增加性能开销&a…

STM32 SCF文件

文章目录 1 SCF文件2 SCT分散加载文件3 SCF文件编写 1 SCF文件 keil编译器在链接的时候,是根据分散加载(.scf后缀的文件)来确定程序的加载域和运行域的。 加载域就是程序运行前在flash中具体分区情况执行域就是程序运行后,程序在flash和ram中的分区情况…

在Windows系统上安装git-Git的过程记录

01-上git的官网下载git的windows安装版本 下载页面链接: https://git-scm.com/downloads 选择Standalone Installer的版本进行下载: 这里给大家一全git-2.43.0的百度网盘下载链接: https://pan.baidu.com/s/11HwNTCZmtSWj0VG2x60HIA?pwdut…

Linux 基础-常用的命令和搭建 Java 部署环境

文章目录 目录相关查看目录中的内容查看目录当前的完整路径切换目录 文件相关创建文件查看文件内容写文件vim 基础 创建删除创建目录 移动和复制移动(剪切粘贴)复制(复制粘贴) 搭建 Java 部署环境1. 安装 jdk2. 安装 tomcat1). 我们在自己电脑上下好 tomcat2). 从官网下载的 .z…

MySQL的基础知识

目录 关系型数据库 SQL通用语法 数据类型 数值类型 字符串类型 日期类型 SQL分类 DDL 数据库操作 表操作 DML 添加数据 修改数据 删除数据 DQL 基本查询 条件查询 聚合函数 分组查询 排序查询 分页查询 执行顺序 DCL 管理用户 权限控制 函数 字符串…

iar如何全擦芯片内存

Project ->Download -> Erase memory

js逆向-某敏感网站登录参数分析

声明 本文仅供学习参考,如有侵权可私信本人删除,请勿用于其他途径,违者后果自负! 如果觉得文章对你有所帮助,可以给博主点击关注和收藏哦! 前言 目标网站:aHR0cHM6Ly9tZGZnaGcuNXhwb2lqaHRm…

五种多目标优化算法(MSSA、MOAHA、MOPSO、NSGA3、NSGA2)求解微电网多目标优化调度(MATLAB)

一、多目标优化算法简介 (1)多目标鳟海鞘算法MSSA 多目标优化算法:多目标鳟海鞘算法(Multi-objective Salp Swarm Algorithm ,MSSA)-CSDN博客 参考文献: S. Mirjalili, A.H. Gandomi, S.Z. M…

flex布局实战之自动填充剩余

案例目标 文字部分自适应并且居中 图中是一个弹窗&#xff0c;我现在使用flex的布局来实现&#xff0c;标题和关闭按钮。因为是uni-app,所以标签是view 。你可以自行替换为 代码 <view class"popup-box"><view class"title"><view class&…

线程的状态以及状态转移

一. 线程的状态 NEW: 线程刚被创建, 但是并未启动. 还没调用start方法.RUNNABLE: 这里没有区分就绪和运行状态. 因为对于Java对象来说, 只能标记为可运行, 至于什么时候运行, 不是JVM来控制的了, 是OS来进行调度的, 而且时间非常短暂, 因此对于Java对象的状态来说, 无法区分.T…

97、Text2NeRF: Text-Driven 3D Scene Generation with Neural Radiance Fields

简介 论文地址 使用扩散模型来推断文本相关图像作为内容先验&#xff0c;并使用单目深度估计方法来提供几何先验&#xff0c;并引入了一种渐进的场景绘制和更新策略&#xff0c;保证不同视图之间纹理和几何的一致性 实现流程 简单而言&#xff1a; 文本-图片扩散模型生成一…

STM32入门学习(一):STM32 简介与软件安装

参考引用 STM32 入门教程-江科协 1. STM32 简介 1.1 STM32 套件介绍 1.2 STM32 简介 STM32 是 ST 公司基于 ARM Cortex-M 内核开发的 32 位微控制器 应用&#xff1a;嵌入式领域&#xff0c;如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等 1.3 ARM …

go对rabbitmq基本操作

一、安装rabbitmq 1、直接使用docker拉取镜像 docker pull rabbitmq:3.82、启动容器 docker run \-e RABBITMQ_DEFAULT_USERadmin \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name rabbit01 \--hostname rabbit01 --restartalways \-p 15672:15672 \-p 5672:…

《C++PrimePlus》第9章 内存模型和名称空间

9.1 单独编译 Visual Studio中新建头文件和源代码 通过解决方案资源管理器&#xff0c;如图所示&#xff1a; 分成三部分的程序&#xff08;直角坐标转换为极坐标&#xff09; 头文件coordin.h #ifndef __COORDIN_H__ // 如果没有被定义过 #define __COORDIN_H__struct pola…