论文阅读_检索增强生成 RAG 综述

news2024/9/22 5:28:40
英文名称: Retrieval-Augmented Generation for Large Language Models: A Survey
中文名称: 大型语言模型的检索增强生成:一项调查
链接: http://arxiv.org/abs/2312.10997v5
作者: Yunfan Gaoa, Yun Xiongb, Xinyu Gaob, Kangxiang Jiab, Jinliu Panb, Yuxi Bic, Yi Daia, Jiawei Suna, Meng Wangc, and Haofen Wang a,c
机构: 上海智能自主系统研究所, 同济大学, 上海数据科学重点实验室, 复旦大学, 创意设计学院, 同济大学
日期: 2023-12-18
引用:499

1 摘要

  • 目标:探讨检索增强生成(RAG)作为解决大型语言模型(LLMs)遇到的挑战的有效方法,以提高生成的准确性和可信度,特别是对于知识密集型任务
  • 方法:综合评述了 RAG 范式的发展,包括单纯 RAG,先进 RAG 和模块化 RAG,并详细审查了 RAG 框架的三方基础:检索、生成和增强技术
  • 结论:介绍了嵌入在每个关键组件中的最新技术,深入了解了 RAG 系统的发展。还引入了最新的评估框架和基准,并指出了当前面临的挑战以及未来研究和发展的方向。

2 读后感

文章正文约有 16 页,其中约 13 页为文字内容,不算很长。

首先,论文提出了 RAG 的三个阶段:单纯 RAG、高级 RAG 和模块化 RAG。我觉得,发展到后面模块化 RAG 和 Agent 感觉有点像,RAG 与 Agent 日趋一致可能成为一种趋势,最终可能演变成一个半自主的机器人,能够自动收集信息并进行判断总结,而不仅仅是一个升级版的搜索工具。在完全实现 AGI(通用人工智能)之前,对于不同任务的 RAG 做法也不尽相同。构建 RAG 对于工程师来说就像在炒菜,这篇文章则是列出了很多可用的“食材”和操作注意事项。

论文的优势在于其工作量大,基于 100 多个工具和论文进行了抽象化处理,因此具有整体感和宏观视角。对于不太熟悉 RAG 的读者,可以通过本文构建整体结构并理解一些概念术语;对于已有一定经验的读者,可以查缺补漏。文章还介绍了一些优化方法,可以从中找到适用于自己项目的方法。有些内容很有启发性,比如索引优化章节,它不仅针对 RAG,对我们个人的信息管理也有启发。

本文仍然以导读方式呈现,列出了我认为重要的内容,然后划重点,总结。针对问题进行三层抽象:原文(论文)-> 抽取(本文)-> 提炼(标注黑体斜体)-> 感受(读后感)。

1 引言

RAG 需要解决的问题主要包括:幻觉、过时的知识以及不透明且无法追踪的推理过程。它将 LLMs 的内在知识与外部数据库的庞大动态存储库相结合。

图 1:RAG 研究的技术树。涉及 RAG 的阶段主要包括预训练、微调和推理。对 RAG 的研究最初主要集中在推理阶段,之后到融入微调 LLMs,并一直在探索在预训练阶段增强语言模型的方法。

2 概述

论文提出了 RAG 的三个阶段:单纯 RAG、高级 RAG 和模块化 RAG。

图 3:RAG 的三种范式之间的比较。(左)Naive RAG 主要由三个部分组成:索引、检索和生成。(中)Advanced RAG 围绕 pre-retrieval 和 post-retrieval 提出了多种优化策略,其过程类似于 Naive RAG,仍然遵循链状结构。(右)模块化 RAG 继承并发展自以前的范式,总体上表现出更大的灵活性。整个过程不限于顺序检索和生成; 它包括迭代检索和自适应检索等方法。

2.1 Naive RAG

Naive RAG 遵循包括索引、检索和生成在内的传统过程。

  • 索引:从清理和提取各种格式的原始数据开始,将其转换为统一的纯文本格式。这些文本被分割成更小、更易于理解的块。然后,使用嵌入模型将这些块编码为向量表示,并存储在向量数据库中。这对于在后续检索阶段实现高效的相似性搜索至关重要。
  • 检索:收到用户查询后,RAG 系统使用与索引阶段相同的编码模型,将查询转换为向量表示。然后计算查询向量与索引语料库中的块向量之间的相似性分数。系统确定优先级,并检索与查询最相似的前 K 个数据块。这些块随后用作 prompt 中的扩展上下文。
  • 生成:提出查询和所选文档被合成到一个连贯的提示中,然后由一个大型语言模型生成响应。

图 2:RAG 流程的代表性实例应用于问答。它主要包括 3 个步骤。1)索引:文档被拆分为块,编码为向量,并存储在向量数据库中。2)检索:根据语义相似性检索与问题最相关的前 k 个块。3)生成:将原始问题和检索到的 chunk 一起输入到 LLM 以生成最终答案。

其缺点在于:

  • 检索挑战:在检索阶段,通常难以实现精度和召回率。这可能导致选择错位或不相关的块,以及丢失关键信息。
  • 生成困难:模型可能会面临幻觉问题,从而降低响应的质量和可靠性。
  • 增强障碍:检索到的信息可能与不同的任务不匹配或冗余。面对复杂的问题,基于原始查询的单次检索可能不足以获取足够的上下文信息。

鉴于以上问题,很多时候人们可能更关注检索的结果,而不是模型生成的回答。

2.2 高级 RAG

高级 RAG 旨在克服 Naive RAG 的局限性,专注于提高检索质量,采用检索前和检索后策略。

  • 预检索过程:优化索引结构和原始查询。涉及的策略有:增强数据粒度、优化索引结构、添加元数据、对齐优化和混合检索。
  • 检索后过程:选择基本信息、强调关键部分并缩短要处理的上下文。主要方法包括重新排序块(rerank chunks)和上下文压缩(context compressing)。

(检索优化的具体方法详见下一章)

2.3 模块化 RAG

模块化 RAG 架构提供了增强的适应性和多功能性。它结合了多种策略来改进各个组件,例如添加用于相似性搜索的搜索模块,并通过微调来优化检索器。

2.3.1 新模块

Modular RAG 框架引入了新组件以提升检索和处理能力,如图所示:

  • Search 模块适应特定场景,使用 LLM 生成的代码和查询语言,直接搜索各类数据源,如搜索引擎和数据库。
  • RAGFusion 通过多重查询策略并行搜索和智能重新排序,解决传统搜索的局限性,发现更多知识。
  • Memory 模块利用 LLM 的记忆创建一个无限的记忆池,通过自我增强优化文本与数据的匹配。
  • Routing 模块根据查询选择最佳路径,如摘要、数据库搜索或信息合并。
  • Predict 模块通过直接生成上下文减少冗余,确保信息相关性。
  • Task Adapter 模块为不同任务定制 RAG,自动化提示检索并通过少量示例生成任务专用检索器。
2.3.2 新模式

允许模块替换或重新配置以解决特定挑战,提供卓越的适应性。这超越了之前的固定结构。模块化 RAG 通过集成新模块或调整现有模块之间的交互流程,扩展了这种灵活性,从而增强其在不同任务中的适用性。

RAG 系统的灵活架构使其更易于与其他技术集成,如微调或强化学习。可以针对更好的检索结果微调检索器,或者通过协同微调优化输出。

2.4 RAG 与微调

在 LLMs 中,RAG 经常与 Fine-tuning(FT)和提示工程进行比较。每种方法都有其独特的特性。提示工程利用模型的固有功能,对外部知识和模型适应的需求最小。RAG 可以提供量身定制的信息检索,非常适合精确的信息检索任务。FT 则相当于学生随着时间的推移内化知识,适用于需要复制特定结构、风格或格式的场景。

RAG 和 FT 并不相互排斥,可以相互补充,从而在不同层面增强模型的能力。在某些情况下,它们的结合使用可能会带来最佳性能。优化 RAG 和 FT 的过程可能需要多次迭代才能获得令人满意的结果。

3 检索

检索的几个关键问题包括:检索来源、检索粒度、检索的预处理,以及嵌入模型的选择。

3.1 检索源

3.1.1 数据的结构

最初,文本是主流的检索来源。随后,检索源扩展到包括半结构化数据(PDF)和结构化数据(知识图谱 KG)以进行增强。最近的研究越来越倾向于利用大语言模型(LLMs)进行检索和增强。

非结构化数据:文本是使用最广泛的检索源。除了百科全书式数据外,常见的非结构化数据还包括跨语言文本和特定领域的数据(如医学和法律)。

半结构化数据:通常指包含文本和表格信息组合的数据,例如 PDF。在处理半结构化数据时,一种方法是利用 LLMs 对数据库内的表格进行分析。或者,可以使用基于文本的方法将表格转换为文本格式,以便进一步分析。

结构化数据:例如知识图谱(KG),需要额外的工作来构建、验证和维护。

LLMs 生成的内容:利用 LLMs 的内部知识,有时生成的上下文包含更准确的答案,因为它与因果语言建模预训练目标更加一致。这可能需要将问题分类为已知或未知,并有选择地利用外部数据。

3.1.2 检索粒度

粗粒度检索单元可以为问题提供更相关的信息,但它们也可能包含冗余内容,可能会分散下游任务中的检索器和语言模型的注意力。细粒度检索单元增加了检索的负担,并且不能保证语义完整性和满足所需的知识。

在文本中,检索粒度范围从精细到粗略,包括 Token、Phrase、Sentence、Proposition、Chunks 和 Document。在知识图谱(KG)上,检索粒度包括 Entity、Triplet 和 sub-Graph。

请注意检索的粒度需要适应下游任务

3.2 索引优化

在索引阶段,文档会被处理、分割,并转换为 Embeddings 存储在矢量数据库中。

3.2.1 分块策略

最常见的方法是将文档拆分为固定数量的标记块。这可能会导致句子被截断。通过使用优化的递归分割和滑动窗口方法,可以在多个检索过程中合并全局相关信息,从而实现分层检索。例如,Small2Big 方法将句子(small)作为检索单元,并将前后句子(big)作为上下文提供给 LLMs。

3.2.2 附加元数据

可以使用元数据信息(如页码、文件名、作者、类别时间戳)来丰富块的信息。通过这些元数据可以进行筛选和检索,从而限制检索范围,确保知识的时效性并避免过时信息的干扰。

除了从原始文档中提取元数据外,还可以人工构建元数据。例如:添加段落的摘要,以及引入假设性问题。这种方法也称为反向 HyDE。具体做法是,使用 LLM 生成文档可以回答的问题,然后在检索时计算原始问题与假设问题之间的相似度,以减少问题与答案之间的语义差距。

3.2.3 结构索引

增强信息检索的一种有效方法是为文档建立层次结构。RAG 系统可以加快相关数据的检索和处理。

分层索引结构:文件以父子关系排列,并有块链接到它们。数据摘要存储在每个节点上,有助于快速遍历数据并帮助 RAG 系统确定要提取的块。这种方法还可以减轻区块提取问题引起的错觉。

知识图谱索引:利用知识图谱 (KG) 构建文档的层次结构有助于保持一致性。它描绘了不同概念和实体之间的联系,显著减少了幻觉。为了捕捉文档内容和结构之间的逻辑关系,KGP 提出了一种使用 KG 在多个文档之间构建索引的方法。此 KG 由节点(表示文档中的段落或结构)和边缘(表示段落或关系之间的语义/词汇相似性)组成,有效地解决了多文档环境中的知识检索和推理问题。

3.3 查询优化

制定一个精确而清晰的问题是困难的,尤其对于复杂问题来说。语言的复杂性和歧义性使得这一过程更加具有挑战性。语言模型在处理专业词汇、多义词或模糊缩写时,经常会遇到困难。

3.3.1 查询扩展

将单个查询扩展为多个查询可以丰富查询的内容。

  • 多查询:使用提示工程扩展查询,并通过大语言模型来处理,这些查询常可同时执行。
  • 子查询:子问题规划的过程是生成必要的子问题来提供上下文和完整回答原始问题。这类似于查询扩展。具体来说,复杂问题可以通过从最少到最多提示法分解成一系列简单的子问题。
  • 验证链:经过 LLM 验证后的扩展查询可以减少虚假信息。验证后的扩展查询通常更可靠。
3.3.2 查询转换

基于转换后的查询而不是用户的原始查询来检索数据块。

查询重写:提示 LLM 重写查询。除了使用 LLM 进行查询重写外,还可以使用专门的小型语言模型。

另一种查询转换方法是使用提示工程,让 LLM 在原始查询的基础上生成一个高级概念问题,以便后续检索。使用 Step-back Prompting 方法,将原始查询抽象出来,生成一个更高层次的问题。

3.3.3 查询路由

基于不同的查询,路由到不同的 RAG 管道,适用于多功能 RAG 系统,旨在适应不同的场景。

元数据路由器/过滤器:第一步涉及从查询中提取关键字(entity),然后根据块中的关键字和元数据进行筛选,以缩小搜索范围。语义路由器是一种利用查询语义信息的路由方法。

3.4 嵌入

在 RAG 中,检索是通过计算问题块和文档块嵌入之间的相似性来实现的。嵌入模型的语义表示能力在这一过程中起着关键作用。这主要包括一个稀疏编码器(BM25)和一个密集检索器(基于 BERT 架构的预训练语言模型)()

Hugging Face 有 MTEB 和 C-MTEB 排行榜。关于“使用哪种嵌入模型”,没有万能答案。不过,某些特定模型更适合特定用例。

3.4.1 混合/混合检索

稀疏和密集嵌入方法可以捕获不同的相关性特征,并且通过利用互补的相关性信息,相互受益。 例如,稀疏检索模型可用于为训练密集检索模型提供初始搜索结果。此外,可以使用预训练语言模型(PLM)来学习术语权重,以增强稀疏检索。这还证明了稀疏检索模型可以增强密集检索模型的零样本检索能力,帮助密集检索器处理包含稀有实体的查询,从而提高鲁棒性。

3.4.2 微调嵌入模型

在上下文明显偏离预训练语料库的情况下,尤其是在充满专有术语的高度专业化学科中,在自己的领域数据集上微调嵌入模型变得至关重要。这不仅能补充领域知识,还能对齐 retriever 和 generator。

3.5 适配器

为了避免对整个模型进行完全的微调(fine-tuning),可以使用一个轻量的适配器模块来帮助模型适应新的任务或功能需求。例如,轻量级的提示检索器能够从预先构建的提示池中自动检索出适合给定任务输入的提示,从而优化多任务能力。

4 生成

4.1 情境管理

冗余信息和过长的上下文会干扰 LLM。LLM 往往只关注长文本的开头和结尾,而忘记了中间部分。

4.1.1 重新排序

Reranking 从根本上重新排序文档块,既是增强器又是过滤器。可以使用基于规则的方法进行重新排序,这些方法依赖于预定义的指标,如多样性、相关性和 MRR,或者使用基于模型的方法,如 BERT 系列的编码器 - 解码器模型,以及通用的大型语言模型。

4.1.2 上下文选择/压缩

在 RAG 流程中,一个常见的误解是认为检索尽可能多的相关文档并将它们连接起来以形成冗长的检索提示是有益的

LLMLingua 通过小型语言模型压缩提示内容,保留重要信息,减少不必要的词语,同时保持语言的完整性。PRCA 和 RECOMP 采用类似的方法,分别训练信息提取器和信息浓缩器,通过对比学习提高模型效率。

除了压缩上下文之外,减少文档数量还有助于提高模型答案的准确性。一种简单有效的方法是让 LLM 在生成最终答案之前评估检索到的内容相关性。

4.2 LLM 微调

当 LLM 在特定领域缺乏数据时,可以通过微调使其更好地适应场景和数据特征。微调的另一个好处是能够调整模型的输入和输出,使 LLM 适应特定的数据格式,如结构化数据的检索任务。

通过强化学习将 LLM 的输出与人类或检索器的偏好对齐是一种有效的方法。这可以通过人工标注和反馈来实现。此外,还可以通过蒸馏更强大的模型以及协调 LLM 与检索器的微调来进一步优化对齐效果。

5 RAG 中的 增强过程

在 RAG 领域,标准实践通常包括一个单一的检索步骤,然后是生成。这种方法可能效率低下,特别是在处理需要多步骤推理的复杂问题时,通常显得不足。

图 5:除了最常见的一次检索外,RAG 还包括三种类型的检索增强过程。(左)迭代检索(中)递归检索涉(右)自适应检索

5.1 迭代检索

根据初始查询和当前生成的文本,对知识库进行重复搜索的过程已被证明有效。通过多次检索迭代,能够提供更多上下文引用,从而增强后续答案生成的准确性。然而,这一过程可能会受到语义不连续和不相关信息积累的影响。

5.2 递归检索

根据先前搜索结果迭代优化查询。递归检索通过反馈循环逐渐找到最相关的信息,从而增强搜索体验。特别是在用户需求不明确或所寻信息高度专业化和复杂的情况下,它非常有用。

5.3 ### 自适应检索

使 RAG 系统能够自主确定是否需要外部知识检索以及何时停止检索和生成。例如,Flare 通过监控生成过程的置信度来自动进行检索。这简化了使用检索机制的决策过程,并提高了模型生成准确响应的自主判断能力。

6 任务与评价

6.1 下游任务

RAG 的核心任务仍然是问答(QA),包括传统的单跳/多跳 QA、多项选择、特定领域的 QA 以及适合 RAG 的长格式场景。除了 QA,RAG 还不断扩展到多个下游任务,例如信息提取(IE)、对话生成、代码搜索等。表 2 总结了 RAG 的主要下游任务及其相应的数据集。

(图表中的模型序号需要连接到引文,请见正文)

6.2 评估目标

从历史看,RAG 模型的评估主要集中在它们在特定下游任务中的表现。专门用于评估 RAG 模型独特特征的研究明显缺乏。主要评估目标包括:检索质量(命中率、MRR 和 NDCG)以及生成质量(忠实度、相关性、无害性和准确性)。

6.3 评估维度

RAG 模型的当代评估实践强调三个主要质量分数和四个基本能力,它们共同为 RAG 模型的两个主要目标的评估提供信息:检索和生成。

6.3.1 质量分数

质量分数包括上下文相关性、答案忠实度和答案相关性。

6.3.2 所需能力

四种能力:噪声鲁棒性、负抑制、信息集成和反事实鲁棒性。

  • 噪声鲁棒性:评价模型在处理包含噪声(与问题相关但缺乏实质信息的文档)时的表现。
  • 负面拒绝:评估模型能否在检索到的文档不包含回答问题所需知识时,正确选择不作答。
  • 信息整合:评估模型从多个文档中整合信息以回答复杂问题的能力。
  • 反事实鲁棒性:测试模型识别并忽略文档中已知错误信息的能力,即使被告知可能存在错误。

6.4 评估基准和工具

7 讨论与未来展望

阅读这部分时,摘录了一些比较触动我的内容:

  • 目前,LLMs 可以轻松管理超过 200,000 个令牌的上下文。然而,RAG 仍然不可替代。一方面是长上下文模型的受推理速度的影响,另一方面,基于 RAG 的生成可以快速定位数据,以帮助用户验证生成的答案。
  • 错误信息可能比完全没有信息更糟糕。因此,反事实输入能力是衡量 RAG 关键性能指标之一。
  • RAG 与微调相结合正成为领先策略。
  • 在工程化方面,需要提高检索效率、增加大型知识库中的文档调用率,并确保数据安全。
  • 多模态 RAG,包括图像、音视频和代码 RAG,越来越受到重视。

RAG 生态系统总结如下图:

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

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

相关文章

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑燃料电池和电解槽虚拟惯量支撑的电力系统优化调度方法》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【基础算法总结】滑动窗口

目录 一,滑动窗口介绍二,算法原理和代码实现209.长度最小的子数组3.无重复字符的最长子串1004.最大连续1的个数III1658.将x减到0的最小操作数904.水果成篮438.找到字符串中所有字母异位词30.串联所有单词的子串76.最小覆盖子串 三,算法总结 一…

【Python知识宝库】错误与异常处理:编写健壮的Python代码

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、错误与异常的定义1. 语法错误2. 异常 二、异常处理1. try块2. except块3. finally块 三、异常处理的最佳实践…

数字IC前端:负的建立时间和保持时间

相关阅读数字IC前端https://blog.csdn.net/weixin_45791458/category_12173698.html?spm1001.2014.3001.5482 建立时间和保持时间是触发器的两个重要的时序参数:建立时间(setup time)指的是在有效时钟沿前,数据必须到达并稳定的时间;保持时间…

力扣416-分割等和子集(Java详细题解)

题目链接:416. 分割等和子集 - 力扣(LeetCode) 前情提要: 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包,所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话…

zabbix6.4连接邮箱发出警告

添加告警媒介 默认接收人: 故障级别:{TRIGGER.STATUS}。 服务器:【{HOSTNAME1} 】 发生:{TRIGGER.NAME} 故障! 注:默认接收人:相当于邮件的主题 默认信息:邮件的主题 告警主机:{HOSTNAME1} 告警时间:{EVENT.DATE} {EVENT.TIME} 告警等级:{TRIGGER.SEVERITY} 告警信息:{TRIGGER.…

HTML5中canvas绘图基础详解

第7章 HTML5绘图基础 H5中新增了重要元素canvas,通过绘制任意图形,借助自带API,通过编写js可以控制各种图形,制作动画效果,对web具有划时代意义。 7.1 画布的基础知识 绘图三步骤: 步骤一:使用canvas创…

FreeRTOS学习笔记(五)任务进阶篇

文章目录 前言一、列表和列表项1.1 xList 和 xLIST_ITEM1.2 相关API函数1.3 任务就绪列表 二、任务调度器的启动过程2.1 PendSV 和 SysTick 寄存器2.2 prvStartFirstTask( )2.3 xPortStartScheduler( )2.4 vTaskStartScheduler( ) 的整体流程 三、任务切换3.1基于 SysTick 中断…

一名优秀的工程师应该学会在工作中提升自己,面试篇

xxx 进行 xxx 操作,为什么不行?有人知道吗? 此时,[黑人脸问好号.jpg]。 这里大家可以阅读下《提问的艺术》这本书,这是一本教你如何通过富有技巧性的提问来提高沟通效率并提升自身影响力的书。 Github 上一些开源项目…

zabbix6.4连接钉钉发出警告

zabbix6.4配置钉钉告警 注册钉钉 建一个内部群 添加自定义机器人 配置zabbix服务端 打开脚本告警的配置 # vim /etc/zabbix/zabbix_server.conf AlertScriptsPath/usr/lib/zabbix/alertscripts 准备脚本 安装一个依赖包 # dnf -y install python3-requests # vim /usr/li…

希尔排序/选择排序

前言: 本篇主要对常见的排序算法进行简要分析,代码中均以数组 arr[] { 5, 3, 9, 6, 2, 4, 7, 1, 8 } 为例,进行升序排列。 常见的排序算法有如下: 选择排序中,直接选择排序没有任何实际与教育意义,而堆排…

PopupInner源码分析 -- ant-design-vue系列

PopupInner源码分析 – ant-design-vue系列 1 综述 上一篇讲解了vc-align的工作原理,也就是对齐是如何完成的。这一篇主要讲述包裹 Align的组件:PopupInner组件是如何工作的。 PopupInner主要是对动画状态的管理,比如打开弹窗的时候&#…

【Hot100】LeetCode—763. 划分字母区间

目录 1- 思路哈希表 双指针 2- 实现⭐763. 划分字母区间——题解思路 3- ACM 实现 原题链接:763. 划分字母区间 1- 思路 哈希表 双指针 ① 找到元素最远的出现位置:哈希表② 根据最远出现位置,判断区间的分界线:双指针 实现 …

Java类和对象(详解)

前言: Java中类和对象是比较重要的一章,这一章可以让我们深刻认识到Java语言的"精妙之处",它不像C语言那么"细",也不想其他语言封装的那么"保守"。 游刃有余的解决一系列面向对象问题。 面向对象的…

数据集 视线估计-unityeyes-合成数据 >> DataBall

视线估计-合成数据-三维建模-人工智能unityeyes 人眼视线估计仿真合成数据集 inproceedings{wood2016_etra, title {Learning an Appearance-Based Gaze Estimator from One Million Synthesised Images}, author {Wood, Erroll and Baltru{\v{s}}aitis, Tadas and Morency,…

如何使div居中?CSS居中终极指南

前言 长期以来,如何在父元素中居中对齐一个元素,一直是一个让人头疼的问题,随着 CSS 的发展,越来越多的工具可以用来解决这个难题,五花八门的招式一大堆,这篇博客,旨在帮助你理解不同的居中方法…

【电子通识】半导体工艺——保护晶圆表面的氧化工艺

在文章【电子通识】半导体工艺——晶圆制造中我们讲到晶圆的一些基础术语和晶圆制造主要步骤:制造锭(Ingot)、锭切割(Wafer Slicing)、晶圆表面抛光(Lapping&Polishing)。 那么其实当晶圆暴露在大气中或化学物质中的氧气时就会形成氧化膜。这与铁(Fe)暴露在大气…

MySQL record 02 part

查看已建数据库的基本信息: show CREATE DATABASE mydb; 注意,是DATABASE 不是 DATABASEs, 命令成功执行后,回显的信息有: CREATE DATABASE mydb /*!40100 DEFAULT CHARACTER SET utf8mb3 / /!80016 DEFAULT ENCRYPTIO…

基于Python+大数据爬虫+数据可视化大屏的耳机信息的爬取与分析平台设计和实现(2025最新优质项目-系统+源码+部署文档)

博主介绍:✌全网粉丝50W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围:SpringBoot、Vue、SSM、HLM…

新手入门Python:Python类中自带的装饰器详解与应用

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 文章内容 📒📝 什么是装饰器?📝 常用装饰器详解📝 高级装饰器📝 综合应用示例⚓️ 相关链接 ⚓️📖 介绍 📖 在Python编程中,有一类特别的工具,它们可以改变或增强函数和方法的行为。这些工具被称为装饰器。对…