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

通过检索增强生成(RAG)和重排序提升大语言模型(LLM)的准确性

探索大语言模型(LLM)结合有效信息检索机制的优势。实现重排序方法,并将其整合到您自己的LLM流程中。

想象一下,一个大语言模型(LLM)不仅能提供相关答案,还能根据您的具体需求进行精细筛选、优先级排序和优化。尽管LLM已经彻底改变了人工智能领域,但它们并非没有局限性。例如,幻觉问题和数据过时可能会影响其输出的准确性和相关性。这时,检索增强生成(RAG)和重排序技术应运而生,它们通过将LLM与动态、最新的信息检索流程相结合,显著提升了模型的表现。想了解具体实现步骤吗?请继续阅读。

为什么使用RAG增强LLM?

LLM已经彻底改变了人工智能领域,并拓展了AI的应用边界。它们成为几乎所有领域寻求多功能自然语言处理(NLP)解决方案的首选工具,能够处理各种自然语言理解和生成任务,如下图所示。

A taxonomy of solvable language tasks by LLMs

尽管LLM能力强大,但在某些场景下仍存在局限性。根据具体用例和训练数据的范围,LLM有时无法生成连贯、相关或上下文适宜的文本。甚至在某些情况下,当缺乏真实数据来回答用户查询时,它们可能会生成看似正确实则错误的荒谬信息。这种现象被称为“幻觉”。

例如,对于问题:“流感的常见症状有哪些?”

一个标准的LLM可能会基于通用知识生成答案,列出如发烧、咳嗽和身体疼痛等症状。然而,除非模型接受过特定领域的流感病毒数据训练,否则它可能无法考虑症状严重程度的变化或区分不同流感毒株,从而为不同用户提供千篇一律的“自动化”回答。

此外,如果模型的训练数据截至2023年12月,而2024年1月出现了一种新型流感毒株并迅速传播,那么独立的LLM将无法提供准确回答,因为它缺乏最新的领域知识。这种“数据过时”问题被称为知识截止

在某些情况下,解决方案可能是频繁地重新训练和微调LLM以纳入最新信息。但这是最佳选择吗?

众所周知,LLM的训练过程复杂且计算成本高昂。它们需要数百万到数十亿的文本数据实例,通常还需要数千个特定领域的文本进行微调(如下图所示)。

Pre-training and fine-tuning an LLM

这时,RAG(检索增强生成) 便派上了用场!

RAG是一种信息检索流程,通过优化LLM的输出,使其不仅依赖于训练数据的知识,还能从外部知识库中检索信息。通过结合这两种方法,RAG可以提升LLM生成答案的质量、用户相关性、连贯性和真实性,从而大大减少为适应新场景而频繁重新训练LLM的需求。

简化的RAG系统工作流程如下:

  1. 查询:LLM收集用户查询或提示。

  2. 检索:在运行时,LLM通过检索组件访问文本语料库,并识别与用户查询最匹配的前K个文档。

  3. 生成:LLM结合原始用户输入和检索到的文档,基于最大似然原则生成回答。

回到流感示例,通过RAG,模型可以从医学数据库或最新文章中检索到最新、相关的信息,从而为患者或医生提供更细致、准确的答案。它能够结合当前流感毒株、症状的地区差异或新出现的模式,生成更符合用户需求的回答。

什么是重排序?

重排序是一种信息检索流程,通过对初始检索结果重新排序,以提升其与用户查询、需求和上下文的相关性,从而优化整体输出质量。其工作原理如下:

  1. 首先,检索器进行初步文档检索,获取K个相关文档。常用方法包括TF-IDF、向量空间模型等。

  2. 随后,排序器介入,这是一种比初始检索器更复杂或更专业的机制。排序器基于额外标准(如用户偏好、上下文或更复杂的算法)重新评估检索结果,以提升结果的针对性。

以下图表展示了重排序流程:

Reranking process

需要明确的是,重排序是基于多种标准(如用户偏好)对检索文档重新排序。但重排序不同于推荐引擎,后者是根据用户长期交互和偏好主动生成个性化建议,而重排序则用于实时响应用户查询的搜索场景。

以流感为例,假设一位医疗专业人员搜索“流感症状的最佳治疗方法”。初始检索系统可能返回一系列文档,包括通用流感信息、治疗指南和研究文章。而重排序模型可以结合患者特定数据和上下文信息,将这些文档重新排序,优先显示最相关、最新的治疗协议和同行评审研究,从而直接命中问题核心。

为什么重排序对结合RAG的LLM有用?

重排序对于结合检索增强生成(RAG)的大语言模型(LLM)尤为有用。RAG通过将LLM与外部文档检索相结合,提供更准确和全面的回答。在初始检索完成后,重排序可以进一步优化文档选择,确保LLM处理的是最相关和高质量的信息。这一流程显著提升了LLM的整体表现,尤其在需要精确信息的专业领域。

重排序器的类型

实现重排序器的方法多种多样,以下是几种常见类型:

  • 多向量重排序器:为文档和用户查询分配多个向量表示,通过向量相似性对结果重新排序。

  • 学习排序(LTR):广泛应用于推荐算法,通过机器学习原理和训练数据预测最优结果排序。

  • 基于BERT的重排序器:利用BERT模型理解检索文档的语义细微差别,并优化其排序。

  • 强化学习重排序器:基于持续的用户交互数据,通过长期奖励函数(如用户满意度)优化排序。

  • 混合重排序器:结合多种重排序策略,例如将LTR与多种机器学习或深度学习模型结合。

构建带重排序的RAG流程

现在,我们已经了解了将RAG整合到LLM中的优势,以及知识检索中的重排序机制。接下来,我们将通过一个示例展示如何将这些元素整合并实际应用。

本示例使用Langchain库(社区版)构建一个简单的带重排序的RAG流程。

代码已在Google Colab笔记本中实现。

版本1 - 不带重排序

pip install -U langchain-community

首先,我们在笔记本中安装langchain-community

接下来,导入必要的包、类和函数。

import osfrom langchain.vectorstores import FAISSfrom langchain.embeddings import OpenAIEmbeddingsfrom langchain.llms import OpenAIfrom langchain.prompts import PromptTemplatefrom langchain.text_splitter import CharacterTextSplitterfrom langchain.schema import Documentfrom langchain.chains.qa_with_sources import load_qa_with_sources_chainfrom sklearn.metrics.pairwise import cosine_similarityimport numpy as np

以下函数用于从本地目录加载文档(.txt文件),这些文档将被检索并用于增强LLM的输出:

# 从目录加载文档的函数def load_documents_from_directory(directory_path):    documents = []    for filename in os.listdir(directory_path):        if filename.endswith(".txt"):            with open(os.path.join(directory_path, filename), 'r') as file:                documents.append(file.read())    return documents
# 从指定目录加载文档directory_path = "./sample_data"documents = load_documents_from_directory(directory_path)

为了优化文本文档的嵌入表示性能,我们将其大小限制为1000个字符,并使用CharacterTextSplitter将较长的文档分割为小块。chunk_overlap参数设置为0,以避免文本块之间的重叠。

# 将文档分割为小块以优化嵌入性能text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)docs = text_splitter.split_documents(documents)

我们使用OpenAI嵌入构建嵌入向量存储。根据运行环境,可能需要从OpenAI获取验证密钥并定义在OPENAI_API_KEY中。

# 初始化OpenAI嵌入embeddings = OpenAIEmbeddings()
# 基于文档块嵌入构建FAISS向量存储vector_store = FAISS.from_documents(docs, embeddings)
# 加载并初始化OpenAI LLMllm = OpenAI(model="text-davinci-003", temperature=0.7)

FAISS通过from_documents()函数从嵌入创建向量存储。我们需要传递两个参数:文档块和通过OpenAIEmbeddings初始化的嵌入实例。接下来,我们引入主角之一:LLM!这里使用OpenAI加载text-davinci-003模型,并将温度设置为0.7,以允许一定程度的文本生成原创性。

继续以下步骤:

# 定义LLM的提示模板prompt_template = PromptTemplate(template="Answer the question based on the context: {context}\n\nQuestion: {question}\nAnswer:")
# 使用QA链定义带检索的RAG流程qa_chain = load_qa_with_sources_chain(llm, prompt_template=prompt_template, retriever=vector_store.as_retriever())
# 示例问题question = "What are the common symptoms of the flu and how can it be treated?"
# 使用QA链生成答案response = qa_chain(question=question)print(response)

上述代码首先定义了一个问答提示模板,然后调用load_qa_with_sources_chain()函数创建问答流程(在Langchain中称为“链”)。其retriever参数允许将检索组件整合到LLM流程中,从而实现RAG。最后,我们提出问题并运行定义的流程qa_chain。完成!

以下是输出(具体内容取决于读取的文档):

"流感的常见症状包括发烧、咳嗽、喉咙痛、流鼻涕或鼻塞、身体疼痛、头痛、发冷和疲劳。有些人可能会出现呕吐和腹泻,尤其是儿童。流感可以通过抗病毒药物治疗,这些药物可以减轻症状并缩短病程。抗病毒药物还可以预防肺炎等严重并发症。建议病情严重或并发症高风险人群及时治疗。"

版本2 - 带重排序

之前的示例看起来不错,但缺少重排序环节。修改代码以加入重排序相对简单。

导入列表与之前相同,因为我们已经为重排序环节导入了所有必要的包(尽管之前并未使用部分包):

# 之前的代码...# 定义LLM的提示模板prompt_template = PromptTemplate(template="Answer the question based on the context: {context}\n\nQuestion: {question}\nAnswer:")
# 重排序函数def rerank_documents(question, retrieved_docs, top_n=5):    question_embedding = embeddings.embed_text(question)    doc_embeddings = [doc.embedding for doc in retrieved_docs]    similarities = cosine_similarity([question_embedding], doc_embeddings)[0]    ranked_indices = np.argsort(similarities)[::-1]  # 按相似度降序排序    ranked_docs = [retrieved_docs[i] for i in ranked_indices[:top_n]]    return ranked_docs

如上所示,我们首先定义了一个rerank_documents函数,该函数使用嵌入的余弦相似度来计算问题嵌入与文档嵌入之间的相似性,并返回排名前n的文档。

# 自定义带重排序的QA链class CustomQAWithReranking:    def __init__(self, llm, retriever, prompt_template, top_n=5):        self.llm = llm        self.retriever = retriever        self.prompt_template = prompt_template        self.top_n = top_n
    def __call__(self, question):        retrieved_docs = self.retriever.retrieve_documents(question)        ranked_docs = rerank_documents(question, retrieved_docs, self.top_n)        context = "\n".join([doc.page_content for doc in ranked_docs])        prompt = self.prompt_template.format(context=context, question=question)        return self.llm(prompt)

CustomQAWithReranking类将检索和重排序步骤整合到LLM流程中,通过调用该类的__call__函数实现。

# 定义带重排序的自定义QA链qa_chain = CustomQAWithReranking(llm, vector_store.as_retriever(), prompt_template)
# 示例问题question = "What are the benefits of using multi-vector rerankers?"
# 使用自定义QA链生成答案response = qa_chain(question)

剩下的就是再次实例化qa_chain。这次我们通过定义刚刚创建的类的对象来实现,该类封装了之前版本的大部分逻辑以及我们的自定义重排序机制。最后,我们提出问题并调用链以获取回答。

了解更多关于AI的内容

在LLM和AI领域,RAG无疑已成为一项重要技术。通过让LLM在生成回答时访问和检索外部知识源,RAG已成为频繁重新训练和微调LLM的广泛替代方案。

本文讨论了重排序作为一种有效的信息检索方法,可以整合到LLM流程中。它详细介绍了重排序的工作原理、不同类型的重排序器,以及一个使用Langchain和OpenAI API的实际示例。

相关文章:

通过检索增强生成(RAG)和重排序提升大语言模型(LLM)的准确性

探索大语言模型(LLM)结合有效信息检索机制的优势。实现重排序方法,并将其整合到您自己的LLM流程中。 想象一下,一个大语言模型(LLM)不仅能提供相关答案,还能根据您的具体需求进行精细筛选、优先…...

IDEA202403常用快捷键【持续更新】

文章目录 一、全局搜索二、美化格式三、替换四、Git提交五、代码移动六、调试运行 在使用IDEA进行程序开发,快捷键会让这个过程更加酸爽,下面记录各种快捷键的功能。 一、全局搜索 快捷键功能说明Shift Shift全局搜索Ctrl N搜索Java类 二、美化格式 …...

硬件元件三极管:从基础到进阶的电子探秘

一、基础理论 1. PN结(二极管) PN 结是采用不同的掺杂工艺,将 P 型半导体与 N 型半导体紧密接触而形成的一个界面区域。也就是我们常说的二极管。(P型带正电、N型带负电,电流由P流向N) 形成过程&#xff1…...

4. k8s核心概念 pod deployment service

以下是 Kubernetes 的核心概念详解,涵盖 Pod、Service、Deployment 和 Node,以及它们之间的关系和实际应用场景: 1. Pod 定义与作用 • 最小部署单元:Pod 是 Kubernetes 中可创建和管理的最小计算单元,包含一个或多个…...

12.第二阶段x64游戏实战-远程调试

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 本次游戏没法给 内容参考于:微尘网络安全 上一个内容:11.第二阶段x64游戏实战-框架代码细节优化 本次写的内容是关于调试、排错相关的…...

自然语言处理的进化:BERT模型深度剖析

自然语言处理(NLP)领域近年来取得了跨越式的发展,尤其是随着深度学习技术的应用,不少新兴模型应运而生。其中,BERT(Bidirectional Encoder Representations from Transformers)作为一种革命性的…...

鸿蒙学习笔记(5)-HTTP请求数据

一、Http请求数据 http模块是鸿蒙内置的一个模块,提供了网络请求的能力。不需要再写比较原始的AJAS代码。 ps:在项目中如果要访问网络资源,不管是图片文件还是网络请求,必须给项目开放权限。 (1)网络连接方式 HTTP数…...

Golang 的 GMP 协程模型详解

Golang 的 GMP 协程模型详解 Golang 的并发模型基于 GMP(Goroutine-M-Processor) 机制,是其高并发能力的核心支撑。以下从原理、机制、优势、缺点和设计理念展开分析: 一、GMP 的组成与运作原理 Goroutine(G&#xff…...

ReportLab 导出 PDF(页面布局)

ReportLab 导出 PDF(文档创建) ReportLab 导出 PDF(页面布局) ReportLab 导出 PDF(图文表格) PLATYPUS - 页面布局和排版 1. 设计目标2. 开始3. Flowables3.1. Flowable.draw()3.2. Flowable.drawOn(canvas,x,y)3.3. F…...

Ubuntu 安装与配置 Docker

Ubuntu 安装与配置 Docker Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包在一个轻量级、可移植的容器中。它可以帮助开发者和运维人员快速构建、部署和管理应用程序,提升开发和运维效率。本文将介绍如何在 Ubuntu 系统上安装和配置…...

【数据结构与算法】LeetCode每日一题

此题跟27.移除数组中的指定值 类似,都是移除且双指针玩法,只不过判断条件发生了变化...

【HDFS入门】数据存储原理全解,从分块到复制的完整流程剖析

目录 1 HDFS架构概览 2 文件分块机制 2.1 为什么需要分块? 2.2 块大小配置 3 数据写入流程 4 数据复制机制 4.1 副本放置策略 4.2 复制流程 5 数据读取流程 6 一致性模型 7 容错机制 7.1 数据节点故障处理 7.2 校验和验证 8 总结 在大数据时代&#x…...

力扣热题100——普通数组(不普通)

普通数组但一点不普通! 最大子数组和合并区间轮转数组除自身以外数组的乘积缺失的第一个正数 最大子数组和 这道题是非常经典的适用动态规划解决题目,但同时这里给出两种解法 动态规划、分治法 那么动态规划方法大家可以在我的另外一篇博客总结中看到&am…...

Ubuntu中snap

通过Snap可以安装众多的软件包。需要注意的是,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了应用程序之间的依赖问题,使应用程序之…...

uniapp(Vue)开发微信小程序 之 保存图片到本地

一、保存图片到本地(要拿到图片的 src): 查看隐私条约是否加上相册(仅写入)权限: 微信公众平台 -》 左下角头像 -》账号设置 -》 用户隐私保护指引 -》去完善 -》 相册(仅写入)权限 …...

TailwindCss快速上手

什么是Tailwind Css? 一个实用优先的 CSS 框架,可以直接在标记中组合以构建任何设计。 开始使用Tailwind Css 如何安装 下面是使用vite构建工具的方法 ①安装 Tailwind CSS: tailwindcss通过tailwindcss/vitenpm安装。 npm install tailwindcss tailwindcss…...

Gladinet CentreStack Triofox 远程RCE漏洞(CVE-2025-30406)

免责声明 本文档所述漏洞详情及复现方法仅限用于合法授权的安全研究和学术教育用途。任何个人或组织不得利用本文内容从事未经许可的渗透测试、网络攻击或其他违法行为。使用者应确保其行为符合相关法律法规,并取得目标系统的明确授权。 对于因不当使用本文信息而造成的任何直…...

ASP.NET WEB 手动推送 URL 到百度站长工具实例

下面是一个完整的 ASP.NET Web 应用程序示例,演示如何手动推送 URL 到百度站长工具。 1. 创建推送页面 (PushToBaidu.aspx) <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PushToBaidu.aspx.cs" Inherits="BaiduPushEx…...

【Ragflow】18.更好的推理框架:vLLM的docker部署方式

概述 看到不少人说“Ollama就图一乐,生产环境还得用vLLM”。 本文决定使用docker对vLLM进行部署,并解决模型配置中,IP地址的硬编码问题。 Ollama与vLLM风评比较 查询相关资料,Ollama与vLLM主要特点及对比情况如下[1]: Ollama:轻量级本地大模型部署工具,面向个人用户…...

智能 GitHub Copilot 副驾驶® 更新升级!

智能 GitHub Copilot 副驾驶 迎来重大升级&#xff01;现在&#xff0c;所有 VS Code 用户都能体验支持 Multi-Context Protocol&#xff08;MCP&#xff09;的全新 Agent Mode。此外&#xff0c;微软还推出了智能 GitHub Copilot 副驾驶 Pro 订阅计划&#xff0c;提供更强大的…...

什么是高防服务器

高防服务器是具备高强度防御能力、专门应对网络攻击(如DDoS、 CC攻击)的服务器类 型&#xff0c;通过流量清洗、多层防护等技术保障业务稳定运行。具备高强度防御能力和智能攻击识别技术&#xff0c;可保障业务在极端网络环境下稳定运行。其核心特点及技术原理如下&#xff1a…...

纷析云开源财务软件:企业财务数字化转型的灵活解决方案

纷析云是一家专注于开源财务软件研发的公司&#xff0c;自2018年成立以来&#xff0c;始终以“开源开放”为核心理念&#xff0c;致力于通过技术创新助力企业实现财务管理的数字化与智能化转型。其开源财务软件凭借高扩展性、灵活部署和全面的功能模块&#xff0c;成为众多企业…...

open webui 介绍 是一个可扩展、功能丰富且用户友好的本地部署 AI 平台,支持完全离线运行。

AI MCP 系列 AgentGPT-01-入门介绍 Browser-use 是连接你的AI代理与浏览器的最简单方式 AI MCP(大模型上下文)-01-入门介绍 AI MCP(大模型上下文)-02-awesome-mcp-servers 精选的 MCP 服务器 AI MCP(大模型上下文)-03-open webui 介绍 是一个可扩展、功能丰富且用户友好的…...

Spring缓存抽象机制

一、核心架构图解 #mermaid-svg-pUShmqsPanYTNVBI {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pUShmqsPanYTNVBI .error-icon{fill:#552222;}#mermaid-svg-pUShmqsPanYTNVBI .error-text{fill:#552222;stroke:#5…...

[Jenkins]pnpm install ‘pnpm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

这个错误提示再次说明&#xff1a;你的系统&#xff08;CMD 或 Jenkins 环境&#xff09;找不到 pnpm 命令的位置。虽然你可能已经用 npm install -g pnpm 安装过&#xff0c;但系统不知道它装在哪里&#xff0c;也就无法执行 pnpm 命令。 ✅ 快速解决方法&#xff1a;直接用完…...

如何用AI辅助数据分析及工具推荐

以下是针对数据分析的 AI辅助工具推荐&#xff0c;结合国内外主流工具的功能特点、优劣势及适用场景分析&#xff0c;并标注是否为国内软件及付费情况&#xff1a; 一、国内工具推荐 1. WPS AI 特点&#xff1a;集成于WPS Office套件&#xff0c;支持智能数据分析、自动生成可…...

使用KeilAssistant代替keil的UI界面

目录 一、keil Assistant的优势和缺点 二、使用方法 &#xff08;1&#xff09;配置keil的路径 &#xff08;2&#xff09;导入并使用工程 &#xff08;3&#xff09;默认使用keil自带的ARM编译器而非GUN工具链 一、keil Assistant的优势和缺点 在日常学…...

spark-SQL数据加载和保存

数据加载与保存 通用方式&#xff1a; 通过 spark.read.load 和 df.write.save 实现数据加载与保存。可利用 format 指定数据格式&#xff0c;如 csv 、 jdbc 等&#xff1b; option 用于设置特定参数&#xff0c;像 jdbc 格式下的数据库连接信息&#xff1b; load 和 save 则…...

strings.Replace 使用详解

目录 1. 官方包 2. 支持版本 3. 官方说明 4. 作用 5. 实现原理 6. 推荐使用场景和不推荐使用场景 推荐场景 不推荐场景 7. 使用场景示例 示例1&#xff1a;官方示例 示例2&#xff1a;模板变量替换 示例3&#xff1a;敏感信息脱敏&#xff08;隐藏手机号中间四位&a…...

K8S微服务部署及模拟故障观测

概述 本文介绍了如何在 Kubernetes (K8S) 集群中部署微服务&#xff0c;并模拟常见的故障场景&#xff08;如 Pod 故障、节点故障、网络故障&#xff09;以测试系统的容错能力。通过本实验&#xff0c;了解 Kubernetes 的自动恢复机制以及如何通过监控和日志分析快速定位和解决…...

3.k8s是如何工作的

Kubernetes 是一个复杂的分布式系统&#xff0c;其核心设计理念是 声明式管理 和 自动化控制。以下是 Kubernetes 的工作机制详解&#xff0c;从用户提交应用到容器运行的全流程&#xff1a; 1. 核心架构&#xff1a;控制平面&#xff08;Control Plane&#xff09;与工作节点&…...

打通任督二脉 - Device Plugin 让 k8s “看见” GPU

打通任督二脉 - Device Plugin 让 k8s “看见” GPU 上一篇咱们聊了为啥要把 GPU 这个“计算猛兽”拉进 Kubernetes (k8s) 这个“智能调度中心”。目标很美好:提高效率、简化管理、弹性伸缩。但现实是,k8s 天生并不认识 GPU 这位“新朋友”。就像你的电脑操作系统,默认只认…...

锚定“体验驱动”,锐捷EDN让园区网络“以人为本”

作者 | 曾响铃 文 | 响铃说 传统的网络升级路径&#xff0c;一如巴别塔的建造思路一般——工程师们按技术蓝图逐层堆砌&#xff0c;却常与地面用户的实际需求渐行渐远&#xff0c;从而带来了诸多体验痛点&#xff0c;如手工配置效率低下、关键业务用网无法保障、网络架构趋于…...

Flutter的自动化测试 python flutter编程

Flutter应用开发入门指南 第一步&#xff1a;创建Flutter应用 创建一个默认的Flutter应用后&#xff0c;将以下代码复制到 lib/main.dart 中&#xff1a; import package:flutter/material.dart;//运行Flutter应用,创建了一个自己实现的Widget对象 void main() > runApp(…...

Day09【基于jieba分词和RNN实现的简单中文分词】

基于jieba分词和RNN实现的中文分词 目标数据准备主程序预测效果 目标 本文基于给定的中文词表&#xff0c;将输入的文本基于jieba分词分割为若干个词&#xff0c;词的末尾对应的标签为1&#xff0c;中间部分对应的标签为0&#xff0c;同时将分词后的单词基于中文词表做初步序列…...

机器学习 | 神经网络介绍 | 概念向

文章目录 &#x1f4da;从生物神经元到人工神经元&#x1f4da;神经网络初识&#x1f407;激活函数——让神经元“动起来”&#x1f407;权重与偏置——调整信息的重要性&#x1f407;训练神经网络——学习的过程&#x1f407;过拟合与正则化——避免“死记硬背” &#x1f440…...

使用cursor进行原型图设计

1.下载cursor 2.模式设置&#xff1a; 模型使用claude-3.7-sonnet的think模式 3.引导词模板&#xff1a; 我想要开发一个中高考英语口语考试的模拟考试系统&#xff0c;我需要将上面的这个应用输出成高保真的原型图设计。请考虑以下的规范&#xff1a; 用户体验&#xff1…...

Vue el-from的el-form-item v-for循环表单如何校验rules(二)

在上一篇文章中&#xff0c;通过校验规则写成内联循环去校验from表单项&#xff0c;在之前的代码基础上&#xff0c;进行校验规则的二次封装&#xff0c;使代码更加简洁&#xff0c;灵活高效、 参考上一篇&#xff1a;Vue el-from的el-form-item v-for循环表单如何校验rules&a…...

Spark-SQL3

Spark-SQL 一.Spark-SQL核心编程&#xff08;四&#xff09; 1.数据加载与保存&#xff1a; 1&#xff09;通用方式&#xff1a; SparkSQL 提供了通用的保存数据和数据加载的方式。这里的通用指的是使用相同的API&#xff0c;根据不同的参数读取和保存不同格式的数据&#…...

Redis字符串类型实战:解锁五大高频应用场景

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Redis的字符串&#xff08;String&#xff09;类型是最基础的数据结构&#xff0c;但其灵活性和原子性操作使其成为解决高并发场景问题的利器。本文通过真实项…...

通信算法之266: 无人机信号带宽计算

pwelch 通常返回功率谱密度&#xff08;PSD&#xff09;和对应的频率向量。带宽的计算可能涉及到找到 PSD 的有效频率范围&#xff0c;比如半功率点&#xff08;-3dB&#xff09;或者根据信号的能量集中区域。 pwelch 的参数设置&#xff0c;比如窗函数、重叠、FFT 点数&#x…...

【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引

最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…...

【C++游戏引擎开发】第16篇:ImGui指南

ImGui官方Github ImGUI(即时模式图形用户界面)是一种颠覆传统GUI开发范式的界面系统,由Casey Muratori于2005年提出概念,后经Omar Cornut开发为Dear ImGui开源库。其核心设计理念彻底改变了开发者构建交互式工具的方式。 一、vcpkg安装与特点介绍 1.1 安装 vcpkg install…...

分享一下这几天在公司学到的东西

这几天我学到了很多东西 &#xff08;1&#xff09;我自己原来写项目&#xff0c;前后端联调用的都是postman&#xff0c;然后直接测试接口&#xff0c;然后连一下就完了。这几天我接触到了apifox的Mock这个东西&#xff01;我知道了一个前端工程师进行前后端链条的时候&#…...

C# 将Excel格式文件导入到界面中,用datagridview显示

界面按钮不做介绍。 主要代码: //用于获取从上一个页面传过来datagridview标题 public DataTable GetHeader { get; set; } private void UI_EXPINFO_Load(object sender, EventArgs e) { //页面加载显示listbox1中可…...

Shell编程之正则表达式与文本

目录 一 正则表达式 1 正则表达式的定义 2 正则表达式用途 二 正则表达式类型 1 基础正则表达式示例 &#xff08;1&#xff09;查找特定字符 &#xff08;2&#xff09;利用中括号” [] “来查找集合字符 &#xff08;3&#xff09;查找行首” ^ “与行尾字符”$“ &…...

Spring JDBC 与数据访问:从性能优化到事务协同

在高并发场景&#xff08;如电商、金融等行业&#xff09;&#xff0c;数据库访问的性能和事务一致性是系统稳定性的关键。 Spring JDBC通过模板化操作和事务管理机制&#xff0c;大幅简化了传统 JDBC 繁琐的 API 处理&#xff0c;使数据库操作更加高效、安全、可维护。 一、…...

Markdown 编辑器的使用

欢迎使用 Markdown 编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&…...

自动化浏览器环境与 Node.js 环境的逆向分析:完整教程

在当今的 Web 开发中&#xff0c;了解浏览器环境与 Node.js 环境之间的差异是非常重要的&#xff0c;特别是当你希望进行自动化操作、逆向工程或进行跨平台开发时。在这篇教程中&#xff0c;我们将探讨如何通过 JavaScript 在浏览器中自动化环境检测、分析并对比 Node.js 和浏览…...

脉冲编码调制(PCM)在三角形信号中的应用

基于MATLAB平台&#xff0c;详细阐述脉冲编码调制&#xff08;PCM&#xff09;在三角形信号处理中的全流程实现。我这里将变量名更改为具有辨识度的Dogness_、Lhuu_&#xff0c;包括信号生成、均匀量化、编码、解码及解量化过程&#xff0c;为数字信号处理提供实践参考。 Dogne…...