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

一文读懂 RAG:LLM 借助检索打开思路

在这里插入图片描述

一、引言

在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,大型语言模型(LLMs)展现出了强大的语言理解和生成能力。然而,LLMs也存在一些局限性,如容易产生幻觉、知识更新不及时等问题。检索增强生成(Retrieval-Augmented Generation,RAG)技术的出现,为解决这些问题提供了新的思路。RAG通过将外部知识数据库与LLMs相结合,使得模型在生成文本时能够参考外部的真实信息,从而提高生成内容的准确性和可靠性。本文将全面综述RAG技术,涵盖其技术原理、关键组件、训练策略以及应用场景等方面。

在这里插入图片描述

二、RAG技术原理

2.1 基本概念

RAG的核心思想是在文本生成过程中引入外部知识检索机制。当用户输入一个查询时,RAG系统首先从外部知识数据库中检索与查询相关的信息,然后将这些检索到的信息与查询一起输入到语言模型中,模型根据这些信息生成最终的回答。这种方式使得语言模型能够利用外部知识,避免凭空生成可能不准确的内容。

2.2 系统架构

RAG系统主要由三个关键组件组成:检索器(Retriever)、生成器(Generator)和检索融合模块(Retrieval Fusions)。检索器负责从外部知识库中检索与输入相关的信息;生成器基于输入和检索到的信息生成文本;检索融合模块则负责将检索到的知识有效地整合到生成模型中,以提高生成性能。

三、关键组件技术

3.1 检索器(Retriever)

3.1.1 构建阶段
  • 分块语料库(Chunking Corpus)
    • 固定长度分块:通过设定长度参数顺序地分割文档。例如,将一篇文档按照每512个字符为一块进行分割,这种方式简单直接,但可能会在语义边界处截断文本。
    • 基于语义的分块:根据语义标志(如句号、新行字符等)切割文档。这样可以确保每个分块在语义上相对完整,比如将一篇新闻文章按照段落进行分割,每个段落作为一个分块,更有利于后续的语义理解和检索。
    • 基于内容的分块:根据文档的结构特征(如电子病历的章节、编程代码的功能块等)进行分割。以电子病历为例,将病历中的症状描述、检查结果、诊断意见等不同部分分别作为独立的分块,便于针对不同内容进行精准检索。
  • 编码块(Encoding Chunks)
    • BERT及其变体:如RoBERTa、DistilBERT、ELECTRA等,它们能够生成密集的语义嵌入。以BERT为例,它通过多层Transformer架构对文本进行编码,将每个词转化为一个固定维度的向量表示,这些向量能够捕捉词与词之间的语义关系,从而为后续的检索提供语义基础。
    • Siamese Encoders:设计用于学习输入之间相似性的神经网络,如DPR(Dense Passage Retrieval)、SimCSE。DPR通过分别对查询和文档进行编码,然后计算它们之间的相似度,能够有效地从大量文档中检索出与查询相关的内容。
    • LLM - based Encoders:利用大型语言模型的表示能力,如text - embedding - ada - 002、bge - embedding。这些基于LLM的编码器能够更好地理解文本的上下文和语义,生成更具表现力的嵌入向量。
    • 稀疏编码:如词袋模型(BoW)、TF - IDF,通过高维向量表示文本,其中大部分元素为零。例如,BoW模型将文本中的每个词作为一个维度,词在文本中出现的次数作为该维度的值,这样就可以将文本转化为一个向量,但这种表示方式忽略了词的顺序和语义关系。
    • 密集编码:使用深度神经网络模型生成向量,每个维度都可以捕捉语义特征。与稀疏编码不同,密集编码通过复杂的神经网络结构,如Transformer,学习文本的语义表示,使得向量中的每个维度都蕴含着丰富的语义信息。
  • 索引构建(Building the Index)
    • 选择相似性度量(Choice of Similarity Metrics):常用的相似性度量有余弦相似度、欧几里得相似度、曼哈顿距离、雅卡尔相似度等,用于衡量查询嵌入和块嵌入之间的相关性。例如,余弦相似度通过计算两个向量之间的夹角余弦值来衡量它们的相似程度,值越接近1表示越相似。
    • 降维(Dimension Reduction on Embeddings)
      • 主成分分析(PCA):一种统计技术,用于将原始数据转换为新坐标系,同时保留最重要的特征。例如,将一个高维的文本向量通过PCA转换为低维向量,去除数据中的噪声和冗余信息,提高检索效率。
      • 局部敏感哈希(LSH):通过将数据映射到桶中来显著降低维度,同时保留原始输入数据的相似性。LSH将相似的向量映射到同一个桶中,在检索时只需在同一桶内进行相似度计算,大大减少了计算量。
      • 乘积量化(PQ):将高维空间划分为更小的、独立量化的子空间。PQ通过将高维向量分解为多个低维向量,并对每个低维向量进行量化,从而实现降维和快速检索。
    • 高级ANN索引(Advanced ANN Indexing)
      • IVFPQ:结合倒排文件系统和乘积量化,用于高效和可扩展的ANN搜索。IVFPQ首先通过倒排文件系统快速定位到可能包含相似向量的聚类,然后在聚类内使用乘积量化进行精确搜索,提高了搜索的效率和准确性。
      • HNSW:使用分层图结构在高维空间中高效执行ANN搜索。HNSW通过构建一个分层的图结构,将相似的向量连接在一起,在搜索时可以沿着图的边快速找到最相似的向量。
      • 基于树的索引:如KD - Trees、Ball Trees和VP - Trees,用于组织高维向量。KD - Trees通过不断地将空间划分为两个子空间,将向量组织成树形结构,在检索时可以通过树形结构快速定位到可能包含相似向量的区域,减少搜索范围。
    • 构建数据存储(Building the Datastore with Key - Value Pairs):使用专门的数据库(如LMDB或RocksDB)存储和管理数据,以支持高效的检索和数据持久性。最近的一些工作提出了各种最先进的向量数据库,包括索引和数据存储,例如Milvus、FAISS、LlamaIndex等。这些向量数据库针对向量的存储和检索进行了优化,能够快速地存储和查询大规模的向量数据。
3.1.2 查询阶段
  • 编码查询(Encoding Queries):使用与构建检索器时相同的编码器对查询进行编码,确保查询嵌入与检索器的嵌入空间一致。例如,如果在构建检索器时使用了BERT模型对文档进行编码,那么在查询阶段也使用BERT模型对用户输入的查询进行编码,这样才能保证查询和文档的向量表示在同一语义空间中,从而进行有效的相似度计算。
  • 近似最近邻搜索(ANN Search):利用预构建的索引和数据存储执行近似最近邻搜索,找到与查询最相似的数据。搜索过程涉及比较查询嵌入与聚类嵌入,选择候选聚类,然后在每个聚类内执行产品量化,找到最近邻。例如,在使用IVFPQ索引时,首先通过倒排文件系统找到与查询向量最相似的聚类,然后在该聚类内使用乘积量化找到最接近的向量。
  • 索引搜索(Indexing Search):搜索预构建的索引,找到k个最近邻,并返回这些最近邻的唯一标识符。例如,在使用HNSW索引时,通过分层图结构快速找到与查询向量最相似的k个节点,这些节点的标识符就是最近邻的唯一标识符。
  • 数据存储检索(Datastore Retrieval):根据最近邻的唯一标识符从数据存储中获取相应的值。例如,在使用Milvus向量数据库时,通过查询到的唯一标识符可以从数据库中快速获取对应的文档内容。
  • 后处理(Post - Processing)
    • 重排序(Reranking):根据任务特定的目标重新排序检索到的知识,以提高相关性。例如,在信息检索任务中,可以使用学习到的排序模型对检索到的文档进行重新排序,将与用户查询最相关的文档排在前面。
    • 重要性加权(Importance Weighting):为检索到的知识分配重要性权重,过滤掉不太相关的上下文。例如,根据文档与查询的相似度、文档的权威性等因素为每个检索到的文档分配一个权重,只保留权重较高的文档作为后续生成的输入。

3.2 检索融合(Retrieval Fusions)

检索融合是将检索到的知识整合到生成模型中的关键环节,根据融合方式的不同,可以分为以下几类:

3.2.1 基于查询的融合(Query - based Fusion)
  • 文本连接(Text Concatenation):将检索到的文本与查询文本直接连接。例如,当用户查询“苹果公司的最新产品是什么”时,检索到相关的新闻报道,将报道内容与查询直接拼接在一起,然后输入到生成模型中,模型根据拼接后的文本生成回答。
  • 特征连接(Feature Concatenation):将检索到的文本编码成特征向量后与查询特征向量合并。首先使用编码器将检索到的文本和查询分别编码成特征向量,然后将这两个向量在维度上进行拼接,形成一个新的特征向量,作为生成模型的输入。
  • FID:一种特征融合方法,将检索到的文本编码为稀疏或密集表示,并将连接的特征作为输入。FID通过特定的编码方式将检索到的文本转化为特征表示,然后与查询特征进行连接,为生成模型提供更丰富的信息。
3.2.2 潜在融合(Latent Fusion)
  • 基于注意力的融合(Attention - based Fusion):使用交叉注意力机制将检索到的知识嵌入到模型的隐藏状态中。例如,在Transformer架构中,通过引入交叉注意力模块,使得模型在生成文本时能够关注检索到的知识,将其有效地融入到生成过程中。
  • RETRO:一种使用检索增强的预训练语言模型,引入了一个新的交叉注意力模块。RETRO通过在预训练阶段就考虑检索到的知识,使得模型在生成时能够更好地利用外部信息,提高生成的准确性和连贯性。
  • 加权添加(Weighted Addition):通过学习权重将检索到的知识嵌入以加权的方式添加到模型的隐藏状态中。模型会根据任务的需求和检索到的知识的相关性,自动学习每个知识嵌入的权重,然后将它们加权添加到隐藏状态中,以调整模型的表示。
3.2.3 基于对数的融合(Logits - based Fusion)
  • 集成融合(Ensemble - based Fusion):将检索到的知识的对数与模型输出的对数结合起来,作为集成预测的一部分。例如,在语言模型生成文本时,将检索到的知识对应的对数概率与模型自身生成的对数概率进行融合,通过加权平均等方式得到最终的预测结果。
  • kNN - LM和kNN - MT:利用最近邻模型的对数进行语言模型和机器翻译的增强。kNN - LM通过在训练数据中找到与当前输入最相似的邻居,并利用这些邻居的对数概率来调整语言模型的输出,从而提高语言模型的性能;kNN - MT则将这种方法应用于机器翻译任务中,通过参考最近邻的翻译结果来改进当前的翻译。
  • 校准融合(Calibration - based Fusion):使用检索到的知识的对数对模型的预测进行校准或调整。例如,根据检索到的知识的可信度,对模型生成的预测结果进行调整,使得结果更加准确和可靠。

3.3 生成器(Generator)

3.3.1 生成器类型
  • 默认生成器(Default Generators):包括大多数预训练/微调的大型语言模型,如GPT系列、Mistral模型和Gemini系列模型。这些模型在大规模的语料上进行预训练,学习到了丰富的语言知识和语义表示,能够根据输入生成自然流畅的文本。
  • 检索增强生成器(Retrieval - Augmented (RA) Generators):这些是包含融合检索信息模块的预训练/微调生成器,例如RETRO和EncDec。RETRO通过引入检索增强机制,在生成文本时能够参考外部知识,减少幻觉问题;EncDec则通过将检索到的信息与编码器和解码器进行有效融合,提高了生成文本的质量和准确性。
3.3.2 生成器的功能与架构

生成器负责生成响应或进行预测,它们通常基于输入和相应的检索结果来生成文本。生成器通常采用或修改基于Transformer的架构,专注于解码器模块,包括注意力模块和前馈网络模块。在Transformer架构中,解码器通过自注意力机制关注输入文本的不同部分,同时通过交叉注意力机制关注检索到的知识,然后通过前馈网络对这些信息进行处理,最终生成输出文本。例如,GPT - 3模型就是基于Transformer架构的生成器,它在生成文本时,通过多层的解码器和注意力机制,能够根据输入的提示生成连贯、有逻辑的文本。

四、RAG训练策略

4.1 不更新数据存储的RAG训练

在这种训练策略下,只更新RAG中每个模块的可训练参数,数据存储中的知识保持不变。例如,在训练一个基于BERT检索器和GPT - 2生成器的RAG系统时,通过在特定的任务数据集上进行训练,调整BERT检索器的参数以提高检索的准确性,同时调整GPT - 2生成器的参数,使其能够更好地利用检索到的信息生成合适的回答。在这个过程中,数据存储中的文档和索引不会被更新,这样可以保证训练的稳定性和可重复性。

4.2 更新数据存储的RAG训练

这种训练策略允许在训练过程中更新数据存储。当有新的数据加入时,需要重新对数据进行分块、编码、构建索引等操作,并将新的数据存储到数据存储中。同时,模型的参数也需要根据新的数据进行调整。例如,在一个实时新闻问答系统中,随着新的新闻文章不断发布,需要将这些新文章加入到数据存储中,并重新训练RAG系统,使得模型能够根据最新的新闻信息回答用户的问题。这种训练策略能够使RAG系统适应不断变化的数据,但也增加了训练的复杂性和计算成本。

五、RAG的应用场景

5.1 信息检索与问答系统

在信息检索和问答系统中,RAG可以显著提高回答的准确性和可靠性。例如,在智能客服系统中,当用户提出问题时,RAG系统可以从知识库中检索相关的解答信息,并结合这些信息生成回答,避免了客服人员手动查找答案的繁琐过程,同时也提高了回答的质量和效率。又如,在学术问答系统中,RAG可以从学术文献数据库中检索相关的研究成果,为用户提供准确的学术知识解答。

5.2 文档生成与摘要

在文档生成和摘要任务中,RAG可以利用外部知识生成更丰富、更准确的内容。例如,在新闻报道生成中,RAG可以从多个新闻源中检索相关的事件信息,然后生成一篇完整的新闻报道,包括事件的背景、经过和影响等方面。在文档摘要任务中,RAG可以根据文档的内容和检索到的相关信息,提取出文档的关键要点,生成简洁明了的摘要。

5.3 智能写作辅助

RAG可以作为智能写作辅助工具,帮助用户生成高质量的文本。例如,在论文写作中,RAG可以检索相关的研究文献,为用户提供参考资料和引用建议,同时还可以根据用户输入的内容生成段落大纲和具体的文字表述,提高论文写作的效率和质量。在商业文案写作中,RAG可以根据产品信息和市场需求,生成吸引人的广告文案和宣传语。

5.4 知识图谱补全与推理

RAG可以与知识图谱相结合,用于知识图谱的补全和推理。通过从文本数据中检索相关信息,并将这些信息与知识图谱中的现有知识进行融合,可以发现知识图谱中缺失的关系和实体,从而实现知识图谱的补全。同时,RAG还可以利用知识图谱中的知识和检索到的文本信息进行推理,回答一些复杂的问题,例如在医疗领域,根据患者的症状、病史和医学知识图谱,结合相关的医学文献检索结果,进行疾病诊断和治疗方案推荐。

六、挑战与展望

6.1 挑战

  • 检索效率与准确性的平衡:在大规模数据场景下,如何在保证检索效率的同时提高检索的准确性是一个关键挑战。随着数据量的增加,检索的计算成本会急剧上升,而过于追求效率可能会导致检索结果的准确性下降。

  • 知识融合的有效性:如何将检索到的知识有效地融合到生成模型中,以提高生成文本的质量和可靠性,仍然是一个有待解决的问题。不同的融合方法在不同的任务和数据上表现各异,需要进一步研究和优化。

  • 数据质量与更新:RAG系统依赖于高质量的数据,数据的噪声、错误和不完整性会影响检索和生成的效果。同时,如何及时更新数据以保证系统的时效性也是一大难题。新的数据需要经过处理和整合才能融入到现有系统中,这一过程需要耗费大量的时间和资源,并且可能会引入新的问题,如数据冲突和版本不一致等。

  • 模型的可解释性:尽管 RAG 技术在性能上有一定提升,但模型的可解释性仍然较差。在实际应用中,用户往往难以理解模型为什么会生成特定的回答,这对于一些需要透明度和可靠性的应用场景(如医疗和法律)来说是一个重要的限制因素。

6.2 展望

  • 多模态融合:未来的 RAG 技术有望融合多模态信息,如图像、音频和视频等,进一步丰富模型的输入和知识来源。例如,在教育领域,结合图像和视频资料的检索与文本生成,可以为学生提供更加生动和全面的学习体验;在智能设计领域,融合图像和文本信息可以辅助设计师更高效地完成创意和设计工作。
  • 强化学习与自适应学习:利用强化学习技术,使 RAG 系统能够根据用户反馈和任务表现自动调整检索和生成策略,实现自适应学习。通过不断优化模型的行为,提高系统在不同任务和场景下的性能,更好地满足用户的需求。例如,在智能对话系统中,根据用户对回答的满意度来动态调整检索和生成的参数,从而提供更符合用户期望的回答。
  • 模型压缩与高效计算:研究更加高效的模型压缩技术和计算方法,降低 RAG 系统的计算成本和资源需求。这将有助于推动 RAG 技术在资源受限的设备和环境中的应用,如移动设备和边缘计算场景。例如,开发轻量化的检索器和生成器模型,或者采用分布式计算和云计算技术,实现 RAG 系统的高效运行。
  • 跨领域应用拓展:随着 RAG 技术的不断发展,其应用领域将进一步拓展到更多的行业和领域。除了目前已经取得一定成果的信息检索、写作辅助和问答系统等领域外,在金融、医疗、制造等行业也将发挥更大的作用。例如,在金融领域,用于市场分析和投资决策;在医疗领域,辅助疾病诊断和治疗方案制定;在制造领域,优化生产流程和产品设计。

七、结论

检索增强生成(RAG)技术作为自然语言处理领域的重要创新,为解决大型语言模型的固有局限性提供了有效的途径。通过整合外部知识检索和生成模型,RAG 在提高文本生成的准确性、可靠性和知识更新能力方面展现出了巨大的潜力。

相关文章:

一文读懂 RAG:LLM 借助检索打开思路

一、引言 在自然语言处理(NLP)领域,随着深度学习技术的飞速发展,大型语言模型(LLMs)展现出了强大的语言理解和生成能力。然而,LLMs也存在一些局限性,如容易产生幻觉、知识更新不及时…...

使用istio实现权重路由

istio概述 **概述:**Istio 是一个开源的 服务网格(Service Mesh)解决方案,主要用于管理、保护和监控微服务架构中的服务通信。它为微服务提供了基础设施层的控制功能,不需要更改应用程序的代码,从而解决服…...

DeepSeek发布新模型,遭遇大规模攻击,梁文锋回应证实为假,吴恩达盛赞DeepSeek!AI Weekly 1.27-2.2

📢本周AI快讯 | 1分钟速览🚀 1️⃣ 🖼️Janus-Pro-7B:DeepSeek发布7B开源多模态模型,视觉理解&生成能力超越DALL-E 3! 2️⃣ 🚨DeepSeek遭遇大规模攻击:DDoS暴力破解&#xff…...

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪

20250202在Ubuntu22.04下使用Guvcview录像的时候降噪 2025/2/2 21:25 声卡:笔记本电脑的摄像头自带的【USB接口的】麦克风。没有外接3.5mm接口的耳机。 缘起:在安装Ubuntu18.04/20.04系统的笔记本电脑中直接使用Guvcview录像的时候底噪很大! …...

直方图:摄影中的视觉数据指南

目录 一、直方图基础:揭开它的神秘面纱 二、解读直方图类型:亮度与色彩的密码 (一)亮度直方图 (二)RGB 直方图 三、拍摄中巧用直方图:优化曝光与效果 (一)精准判断曝…...

OpenGL学习笔记(七):Camera 摄像机(视图变换、LookAt矩阵、Camera类的实现)

文章目录 摄像机/观察空间/视图变换LookAt矩阵移动相机(处理键盘输入)移动速度欧拉角移动视角(处理鼠标输入)缩放场景(处理滚轮输入)Camera类 摄像机/观察空间/视图变换 在上一节变换中,我们讨…...

冲刺一区!挑战7天完成一篇趋势性分析GBD DAY1-7

Day1. 公开数据库的挖掘太火热了,其中GBD数据库的挖掘又十分的火爆.那我就来挑战一篇GBD、一篇关于趋势性分析的GBD! GBD数据库挖掘是目前的四大刊常客,经常出现在顶级期刊上面。这个数据库亮点就是:可视化,统计学简单、而数据可…...

解锁数据结构密码:层次树与自引用树的设计艺术与API实践

1. 引言:为什么选择层次树和自引用树? 数据结构是编程中的基石之一,尤其是在处理复杂关系和层次化数据时,树形结构常常是最佳选择。层次树(Hierarchical Tree)和自引用树(Self-referencing Tree…...

【AudioClassificationModelZoo-Pytorch】基于Pytorch的声音事件检测分类系统

源码:https://github.com/Shybert-AI/AudioClassificationModelZoo-Pytorch 模型测试表 模型网络结构batch_sizeFLOPs(G)Params(M)特征提取方式数据集类别数量模型验证集性能EcapaTdnn1280.486.1melUrbanSound8K10accuracy0.974, precision0.972 recall0.967, F1-s…...

ARM嵌入式学习--第十二天(WDOG,RTC)

--WDOG -介绍 WatchDog是为了能够防止程序跑飞而使用的一种硬件模块,如果你的程序没有跑飞,那么你的程序会定时的去喂看门狗;如果你的程序跑飞了,那么就不会再去喂狗了,如果超过了喂狗时间,那么狗就会自己…...

自动化构建-make/Makefile 【Linux基础开发工具】

文章目录 一、背景二、Makefile编译过程三、变量四、变量赋值1、""是最普通的等号2、“:” 表示直接赋值3、“?” 表示如果该变量没有被赋值,4、""和写代码是一样的, 五、预定义变量六、函数**通配符** 七、伪目标 .PHONY八、其他常…...

三天急速通关JavaWeb基础知识:Day 2 前端基础知识(计划有变,前端工程化部分暂时搁置)

三天急速通关JavaWeb基础知识:Day 2 前端基础知识 0 文章说明1 HTML1.1 介绍1.2 基本结构及语法1.3 常见标签2 CSS2.1 介绍2.2 引入方式2.3 选择器2.4 浮动 定位 盒子模型 3 JavaScript3.1 介绍3.2 组成3.3 基础语法 4 Ajax4.1 介绍4.2 示例 未完待续,前…...

Chapter2 Amplifiers, Source followers Cascodes

Chapter2 Amplifiers, Source followers & Cascodes MOS单管根据输入输出, 可分为CS放大器, source follower和cascode 三种结构. Single-transistor amplifiers 这一章学习模拟电路基本单元-单管放大器 单管运放由Common-Source加上DC电流源组成. Avgm*Rds, gm和rds和…...

14-9-3C++STL的set容器

set容器的pair对组——set容器set.equal range(elem) 1.返回容器中与elem相等的上下限的两个迭代器&#xff1b;上限是闭区间&#xff0c;下限是开区间&#xff0c;如[beg, end) 2.函数返回两个迭代器&#xff0c;而这两个迭代器被封装在pair中 pair< set<int>::ite…...

用Impala对存储在HDFS中的大规模数据集进行快速、实时的交互式SQL查询的具体步骤和关键代码

AWS EMR&#xff08;Elastic MapReduce&#xff09;中应用Impala的典型案例&#xff0c;主要体现在大型企业和数据密集型组织如何利用Impala对存储在Hadoop分布式文件系统&#xff08;HDFS&#xff09;中的大规模数据集进行快速、实时的交互式SQL查询。以下是一个具体的案例说明…...

如何确认Linux嵌入式系统的触摸屏对应的是哪个设备文件(/dev/input/event1)?如何查看系统中所有的输入设备?输入设备的设备文件有什么特点?

Linux嵌入式系统的输入设备的设备文件有什么特点&#xff1f; 在 Linux 中&#xff0c;所有的输入设备&#xff08;如键盘、鼠标、触摸屏等&#xff09;都会被内核识别为 输入事件设备&#xff0c;并在 /dev/input/ 目录下创建相应的 设备文件&#xff0c;通常是&#xff1a; …...

C++泛型编程指南08 auto decltype

文章目录 [TOC]第3章&#xff1a;auto占位符&#xff08;C11&#xff5e;C17&#xff09;3.1 auto关键字的重新定义3.2 类型推导规则 3.3 何时使用auto3.4 返回类型推导3.5 在Lambda表达式中使用auto3.6 非类型模板参数占位符 总结第4章 decltype说明符&#xff08;C11&#xf…...

php的使用及 phpstorm环境部署

php语法 环境搭建&#xff1a;在小皮中新建网站&#xff0c;注意先填写域名再点击选择根目录。 成功创建网站后&#xff0c;打开发现forbidden&#xff0c;因为新建的网站里是空的&#xff0c;需要新建index.php文件----> 在Phpstorm中左上角打开文件&#xff0c;打开那个文…...

人工智能学习(五)之机器学习逻辑回归算法

深入剖析机器学习逻辑回归算法 一、引言 在机器学习领域&#xff0c;逻辑回归是一种极为经典且应用广泛的算法。虽说名字里带有 “回归”&#xff0c;但它主要用于解决分类问题&#xff0c;在医学、金融、互联网等多个领域都发挥着关键作用。例如&#xff0c;在医学上辅助判断…...

Kubernetes学习之包管理工具(Helm)

一、基础知识 1.如果我们需要开发微服务架构的应用&#xff0c;组成应用的服务可能很多&#xff0c;使用原始的组织和管理方式就会非常臃肿和繁琐以及较难管理&#xff0c;此时我们需要一个更高层次的工具将这些配置组织起来。 2.helm架构&#xff1a; chart:一个应用的信息集合…...

数据结构课程设计(四)校园导航

4 校园导航 4.1 需求规格说明 【问题描述】 一个学校平面图&#xff0c;至少包括10个以上的场所&#xff0c;每个场所带有编号、坐标、名称、类别等信息&#xff0c;两个场所间可以有路径相通&#xff0c;路长&#xff08;耗时&#xff09;各有不同。要求读取该校园平面图&a…...

(done) MIT6.S081 2023 学习笔记 (Day7: LAB6 Multithreading)

网页&#xff1a;https://pdos.csail.mit.edu/6.S081/2023/labs/thread.html (任务1教会了你如何用 C 语言调用汇编&#xff0c;编译后链接即可) 任务1&#xff1a;Uthread: switching between threads (完成) 在这个练习中&#xff0c;你将设计一个用户级线程系统中的上下文切…...

大年初六,风很大

北京的风在立春附近的几天突然大了&#xff0c;正在盘算着这个冬天可能就这样平庸的去了&#xff0c;没成想风来了。走在风中&#xff0c;穿着本应该是三九天穿的冬装&#xff0c;紧闭着嘴&#xff0c;缩着身子&#xff0c;感受着这冬天该有的低温。这是冬天该有的样子&#xf…...

【算法】回溯算法专题③ ——排列型回溯 python

目录 前置小试牛刀回归经典举一反三总结 前置 【算法】回溯算法专题① ——子集型回溯 python 【算法】回溯算法专题② ——组合型回溯 剪枝 python 小试牛刀 全排列 https://leetcode.cn/problems/permutations/description/ 给定一个不含重复数字的数组 nums &#xff0c;返…...

利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek

利用DeepSeek参与软件测试&#xff0c;可以考虑以下基本架构和接入环节&#xff1a; ### 基本架构 - **数据层** - **测试数据存储**&#xff1a;用于存放各种测试数据&#xff0c;包括正常输入数据、边界值数据、异常数据等&#xff0c;这些数据可以作为DeepSeek的输入&…...

99.20 金融难点通俗解释:中药配方比喻马科维茨资产组合模型(MPT)

目录 0. 承前1. 核心知识点拆解2. 中药搭配比喻方案分析2.1 比喻的合理性 3. 通俗易懂的解释3.1 以中药房为例3.2 配方原理 4. 实际应用举例4.1 基础配方示例4.2 效果说明 5. 注意事项5.1 个性化配置5.2 定期调整 6. 总结7. 代码实现 0. 承前 本文主旨&#xff1a; 本文通过中…...

为AI聊天工具添加一个知识系统 之79 详细设计之20 正则表达式 之7

本文要点 要点 “正则表达式” 本来是计算机科学计算机科学的一个概念。本项目将它推广&#xff08;扩张&#xff09;到认知科学的“认知范畴”概念&#xff0c; 聚合&#xff08;收敛&#xff09;到 神经科学 的“神经元”概念。 做法是&#xff1a;用reg 来系统化定义认知…...

[ Spring ] Spring Boot Mybatis++ 2025

文章目录 StructureMyBatis Controller AbilitiesConfigure Plugins and RepositoriesApply Plugins and Add DependenciesMyBatis Spring PropertiesMyBatis ApplicationMyBatis BeansMyBatis MapperMyBatis Query Builder Structure this blog introduce 3 ways using mybat…...

虚幻基础17:动画层接口

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 animation layer interface animation layer interface 动画层接口&#xff1a;动画图表的集。仅有名字。 添加到动画蓝图中&#xff0c;由动画蓝图实现动画图表。...

前缀和算法

文章目录 算法总览题目1371.每个元音包含偶数次的最长子字符串 算法总览 题目 1371.每个元音包含偶数次的最长子字符串 1371.每个元音包含偶数次的最长子字符串 参考博主的讲解 思路分析&#xff1a;就是得使用前缀和记录情况&#xff0c;dp[i][j]表示s[0] 到s[i] 中&…...

稀疏混合专家架构语言模型(MoE)

注&#xff1a;本文为 “稀疏混合专家架构语言模型&#xff08;MoE&#xff09;” 相关文章合辑。 手把手教你&#xff0c;从零开始实现一个稀疏混合专家架构语言模型&#xff08;MoE&#xff09; 机器之心 2024年02月11日 12:21 河南 选自huggingface 机器之心编译 机器之心…...

深入理解 `box-sizing: border-box;`:CSS 布局的利器

深入理解 box-sizing: border-box;&#xff1a;CSS 布局的利器 默认行为示例代码 使用 box-sizing: border-box;示例代码 全局应用 box-sizing: border-box;示例代码 实际应用场景1. 表单布局2. 网格布局 总结 在 CSS 中&#xff0c;box-sizing 属性决定了元素的总宽度和高度是…...

MySQL不适合创建索引的11种情况

文章目录 前言1. **数据量小的表**2. **频繁更新的列**3. **低选择性的列**4. **频繁插入和删除的表**5. **查询中很少使用的列**6. **大文本或BLOB列**7. **复合索引中未使用的前导列**8. **频繁进行批量插入的表**9. **查询返回大部分数据的表**10. **临时表**11. **列值频繁…...

shell呈现数据——在脚本中重定向

重定向输出 只需简单地重定向相应的文件描述符&#xff0c;就可以在脚本中用文件描述符STDOUT和STDERR在多个位置生成输出。在脚本中重定向输出的方法有两种。 临时重定向每一行。永久重定向脚本中的所有命令。 下面将具体展示这两种方法的工作原理。 1.临时重定向 如果你…...

vector容器(详解)

本文最后是模拟实现全部讲解&#xff0c;文章穿插有彩色字体&#xff0c;是我总结的技巧和关键 1.vector的介绍及使用 1.1 vector的介绍 https://cplusplus.com/reference/vector/vector/&#xff08;vector的介绍&#xff09; 了解 1. vector是表示可变大小数组的序列容器。…...

【初/高中生讲机器学习】0. 本专栏 “食用” 指南——写在一周年之际⭐

创建时间&#xff1a;2025-01-27 首发时间&#xff1a;2025-01-29 最后编辑时间&#xff1a;2025-01-29 作者&#xff1a;Geeker_LStar 你好呀~这里是 Geeker_LStar 的人工智能学习专栏&#xff0c;很高兴遇见你~ 我是 Geeker_LStar&#xff0c;一名高一学生&#xff0c;热爱计…...

SAP SD学习笔记28 - 请求计划(开票计划)之2 - Milestone请求(里程碑开票)

上一章讲了请求计划&#xff08;开票计划&#xff09;中的 定期请求。 SAP SD学习笔记27 - 请求计划(开票计划)之1 - 定期请求-CSDN博客 本章继续来讲请求计划&#xff08;开票计划&#xff09;的其他内容&#xff1a; Milestone请求(里程碑请求)。 目录 1&#xff0c;Miles…...

【PyTorch介绍】

PyTorch 是什么&#xff1f; PyTorch 是一个开源的深度学习框架&#xff0c;由 Facebook 的人工智能研究实验室&#xff08;FAIR&#xff09;开发和维护。它是一个基于 Python 的库&#xff0c;专为深度学习和人工智能研究设计&#xff0c;支持动态计算图&#xff08;dynamic …...

语言月赛 202412【正在联系教练退赛】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 正在联系教练退赛 题目背景 在本题中&#xff0c;我们称一个字符串 y y y 是一个字符串 x x x 的子串&#xff0c;当且仅当从 x x x 的开头和结尾删去若干个&#xff08;可以为 0 0 0 个&#xff09;字符后剩余的字…...

【C++】B2122 单词翻转

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 &#x1f4af;一、我的做法代码实现&#xff1a;代码解析思路分析 &#x1f4af;二、老师的第一种做法代码实现&a…...

redis基本数据结构

基本数据结构 String String是Redis中最常见的数据存储类型&#xff1a; 其基本编码方式是RAW&#xff0c;基于简单动态字符串&#xff08;SDS&#xff09;实现&#xff0c;存储上限为512mb。 如果存储的SDS长度小于44字节&#xff0c;则会采用EMBSTR编码&#xff0c;此时ob…...

基于STM32景区环境监测系统的设计与实现(论文+源码)

1系统方案设计 根据系统功能的设计要求&#xff0c;展开基于STM32景区环境监测系统设计。如图2.1所示为系统总体设计框图。系统以STM32单片机作为系统主控模块&#xff0c;通过DHT11传感器、MQ传感器、声音传感器实时监测景区环境中的温湿度、空气质量以及噪音数据。系统监测环…...

使用冒泡排序模拟实现qsort函数

1.冒泡排序 #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int arr[] { 0,2,5,3,4,8,9,7,6,1 };int sz sizeof(arr) / sizeof(arr[0]);//冒泡排序一共排序 sz-1 趟for (int i 0; i < sz - 1; i){//标志位&#xff0c;如果有序&#xff0c;直接…...

探秘Linux IO虚拟化:virtio的奇幻之旅

在当今数字化时代&#xff0c;虚拟化技术早已成为推动计算机领域发展的重要力量。想象一下&#xff0c;一台物理主机上能同时运行多个相互隔离的虚拟机&#xff0c;每个虚拟机都仿佛拥有自己独立的硬件资源&#xff0c;这一切是如何实现的呢&#xff1f;今天&#xff0c;就让我…...

在React中使用redux

一、首先安装两个插件 1.Redux Toolkit 2.react-redux 第一步&#xff1a;创建模块counterStore 第二步&#xff1a;在store的入口文件进行子模块的导入组合 第三步&#xff1a;在index.js中进行store的全局注入 第四步&#xff1a;在组件中进行使用 第五步&#xff1a;在组件中…...

从 C 到 C++:理解结构体中字符串的存储与操作

对于刚入门 C/C 的程序员来说&#xff0c;字符串的存储和操作可能是个容易混淆的知识点。在 C 中&#xff0c;std::string 提供了非常友好的接口&#xff0c;我们可以轻松地在结构体中使用字符串类型&#xff0c;无需关注底层细节。然而&#xff0c;在 C 语言中&#xff0c;字符…...

2.3学习总结

图&#xff1a; 1.图的基本概念 2.图的存储和遍历 3.最小生成树 4.最短路径 5.拓扑排序和关键路径 一、图的基本概念 图的定义&#xff1a;不允许没有顶点&#xff0c;但边集可以为空 {无向图 {有向图&#xff1a;边弧&#xff0c;弧头&#xff08;有箭头&#xff09;…...

wordpress代码结构解析

WordPress 是一个基于 PHP 和 MySQL 的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;广泛用于构建网站和博客。要解析 WordPress 代码&#xff0c;首先需要了解其核心结构、主要文件和常用的函数。以下是 WordPress 代码解析的基本指南&#xff1a; --- ### 1. *…...

使用 Numpy 自定义数据集,使用pytorch框架实现逻辑回归并保存模型,然后保存模型后再加载模型进行预测,对预测结果计算精确度和召回率及F1分数

1. 导入必要的库 首先&#xff0c;导入我们需要的库&#xff1a;Numpy、Pytorch 和相关工具包。 import numpy as np import torch import torch.nn as nn import torch.optim as optim from sklearn.metrics import accuracy_score, recall_score, f1_score2. 自定义数据集 …...

FPGA|例化生成的PLL功能IP核

1、例化上一篇文章中调用的IP核&#xff0c;新建文件PLL_test.v 2、代码如图 timescale 1ns / 1ps module PLL_test(input clk,input rst_n,output clkout0,output clkout1,output clkout2,output clkout3,output clkout4);wire locked;PLL pll_inst(.inclk0(clk),.c0(clkout0)…...