RAG喂饭教程:微调deepseek+Langchain打造本地知识库

在这里插入图片描述

1.前言

最近一直想用deepseek搞点事情,索性来构建一个RAG吧。构建一个个性化知识库,听起来很高级,实际可能或许有点高级吧。于是,我就用RTX4090在带推理过程的知乎问答数据集上对deepseek-r1的14B蒸馏模型狠狠微调了8个小时,作为RAG的生成模型。

好啦,为了防止有小伙伴不知道为啥要构建RAG,在这里简单说一下。在知识密集型任务中,传统的生成模型往往受限于训练数据的覆盖范围,而RAG(检索增强生成)通过结合检索和生成技术,能够从外部知识库中动态获取信息并生成答案。本文将详细剖析我实现的一个RAG系统,包括(知识库)智能文档处理、混合检索和生成优化三大模块,代码基于LangChain和Sentence-Transformers等常见工具工具。

2.本RAG工作流

2.1工作流程总览

这张图有点大,你忍一下(doge)。

img

本RAG工作流程

不要担心,这图虽大,但我们细细品尝。 。

2.2第一部分-知识库处理

我们先来讲第一部分,即知识库处理部分。

img

知识只有被吃进脑子里,才叫知识,不然只是一堆字符的堆砌,对于RAG也是如此,我们得把手里的知识变为RAG“爱吃”的知识。

我们得先把知识加载进来,并且根据不同的文件类型对文件进行解析

待知识加载到计算机后,计算机一看,这些动辄几百页的pdf你叫我一口吞啊!我堂堂计算机只吃细糠,哼 。没办法啦,我们得把知识拆分一下,进行语义分块,根据语义,将原始文档拆分成具有语义完整性的较小单元,具体的工作流程是系统会逐步扫描文档内容,通过比较相邻文本段的语义向量,检测两段之间是否存在显著的语义转变,如果语义转变比较显著(超过了我们设定的阈值),我们就认为在此处存在自然的语义断裂,适合进行分块。

举个例子,如下是一个知识文档:

全世界CS从业者水平下降一万倍,而你不变,此时你是一只正在秋招的鼠鼠,学历一般,实习一般,八股也背得一般。更惨的是,你还选择了JAVA开发这条赛道,奇卷无比。痛定思痛,打开leetcode,已经过了0点,今天的每日一题是买卖股票的最佳时机,你自信打开ide,写完提交,在评论区留下一句,dp秒了,安享完美睡眠,顺便粘贴代码。可是你没有注意到的是,这一题的题解,竟然是光秃秃的0。在你睡后,评论区掀起轩然大波“哪位acm大佬来炸鱼了?”“动态规划,不是图灵奖得出才会的吗?”**( 分割点 )**过年啦,恭喜恭喜你呀,你发现你没有女朋友,又爱干饭,嘴里叼着辣条。

显然,分割点前面是真实发生的,分割点后面突然就过年了,转变了语义,净说假话,这时候,我们根据分割点就把文档分成了两块。当然,一般的文档是很长的,分个几百上千上万块比比皆是。

于是我们得到了文档分块,对这些分块,我们得进行**二次动态分块,**根据分块内容的类型进一步细分,如果是代码片段,采用较小的分块尺寸(256个字符,重叠64个字符)。如果是表格内容:采用适中的分块尺寸(384个字符,重叠96个字符)。如果是普通文本:默认情况,采用较大分块尺寸(512个字符,重叠128个字符)。

于是我们得到了更精细化的分块,对每一个分块添加元数据,这个词很高大上,实际就是给每个分块赋予一个id,并标记内容类型(如代码、表格等)。

通过上述步骤,文档被转化为具有良好语义单元和标注信息的“分块”(chunks),为混合检索模块提供高质量的基础数据。

2.3步骤二,搭建混合检索系统

img

检索模块流程图

到目前为止,我们获得的分块还是活生生的字,我们得把他映射为向量,随后将它存入专门的数据库中-向量数据库,这玩意专门用于存储高维向量(通常由神经网络生成的嵌入),这些向量可以表示文本、图像、音频等非结构化数据的语义信息。并针对相似性搜索进行了优化,能够高效地处理大规模向量数据。为啥不用别的数据库,说白了,就是效率,人家是专门对这类任务优化过的。如果你不注重效率,用Excel当数据库都行(doge)。

把分块映射为向量装入数据库后,我们就可以检索了,我们不采用单一检索方式,而是采用混合检索,一种是向量检索,另一种是BM25关键词检索,简单说说这两种检索方式。

检索方式基本原理优势劣势
向量检索将文本转换为高维向量,通过余弦相似度等度量文本间的语义相似性。可匹配表达不同但含义相似的文本1.计算开销较大 2.可能召回语义上“相似”但实际不相关的文档
BM25 检索基于词频(TF)和逆文档频率(IDF),利用 BM25 公式对关键词匹配进行加权计算,衡量查询和文档之间的相关性。1.计算速度快 2.精准匹配关键词1.仅依赖关键词,难以捕捉语义信息 2.对同义词、近义词的匹配较差

简单来说,向量检索让我们获取语义上相似的内容,而 BM25 检索则确保关键字相关的内容不被遗漏。两者强强联合,对两个检索方式给予不一样的权重来检索文档,这就是混合检索。

但是单靠这两个方法结合起来检索仍有缺陷,我们可能会检索出一些有关键词且语义相似,但不相关的内容,举个例子:

假设用户查询是:

“请讲讲苹果的生态系统”

这个查询可能存在歧义,既可能指代 苹果公司 的产品生态系统,也可能指 苹果果树 周围的自然生态。混合检索(向量检索 + BM25)会尽量召回所有包含“苹果”和“生态系统”关键词的文档,比如:

  • 文档 A:
    讨论苹果公司的产品整合、操作系统、硬件与软件之间的协同效应,描述了苹果如何构建一个闭环的生态系统。

  • 文档 B:
    介绍苹果果树园中的生态平衡,如传粉昆虫、土壤养分循环等,详细说明果园中的自然生态。

  • 文档 C:
    一篇评论文章,既谈论了苹果公司在市场上的生态战略,又顺带提及了一些生物多样性的讨论。

    查询本身存在歧义时,向量检索可能会捕捉到多个相关的语义方向,从而同时召回多个相关解释的候选文档,而BM25 重视关键词匹配,文档 B 中频繁出现“苹果”、“生态”、“自然”等词,可能被误认为与查询相关,文档B就顺理成章地成为评分最高的文档了;这样就造成了“相似但不相关问题”。

    我们得解决一下啊!我们就引入Cross-Encoder 重排序方法,利用联合编码深入理解查询和文档之间的语境关系,对候选文档进行精细排序,将最符合用户隐含语境的文档排在最前面。重排序后文档 A 和可能的文档 C会被排在前列,而文档 B 则会被降到后面。于是,“相似但不相关问题”,就告一段落了。检索系统已经搭建完毕了。

2.4系统集成:RAG!合体!

知识库处理模块组成大脑!检索系统组成躯干!

先将知识库处理模型塞进来,再将检索模块初始化,紧接着我们得将学到的知识讲出来呀。生成模型组成屁股!将知识组织好,拉出来给大伙瞧瞧!(doge)

加载生成模型这一步有一些需要注意的点。在RAG中,我们给模型的Prompt是不一样的,我们会根据检索到的上下文构造最终用于生成回答的 Prompt。

每个检索结果会被格式化为:

[来源:{doc.metadata['source']},类型:{doc.metadata['content_type']}]
{doc.page_content}

将上下文和问题拼接为 Prompt 后,扔给大模型,让大模型生成内容。自此,整个过程就结束了,RAG就搭建好了。注意哦,这个生成模型是随便选的,我选了DeepSeek-R1-Distill-Qwen-14B,使用RTX4090在知乎问答数据集上微调了8小时。

下面给大家分享一份2025最新版的大模型学习路线,帮助新人小白更系统、更快速的学习大模型! 有需要完整版学习路线,可以微信扫描下方二维码,立即免费领取!

在这里插入图片描述

2.5总结

整个系统的工作流程如下:

1.文档预处理

    • 加载文档 → 初步语义分块 → 动态二次分块(根据内容类型区分代码、表格与普通文本) → 添加元数据

2.混合检索

    • 构建向量与 BM25 检索器 → 混合(Ensemble)检索 → 重排序(CrossEncoder 重评分)

3.生成模块

    • 检索相关上下文 → 构造增强 Prompt(含上下文来源、类型等信息) → 利用生成模型输出回答

3.逐段代码讲解

3.1下载并导入相关的库

!pip install langchain unstructured[pdf] chromadb sentence-transformers pypdf langchain_experimental rank_bm25
!pip install --upgrade langchain

from langchain_experimental.text_splitter import SemanticChunker
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import Chroma
from langchain.retrievers import BM25Retriever, EnsembleRetriever
from langchain.document_loaders import DirectoryLoader,PyPDFLoader,TextLoader
from sentence_transformers import CrossEncoder
from langchain.text_splitter import RecursiveCharacterTextSplitter  
from unsloth import FastLanguageModel
import torch
import re

以下是一些主要库的版本,跑不通的话,多半是库版本问题。

langchain :0.3.19
langchain_experimental:0.3.4
sentence_transformers: 3.4.1
chromadb:0.6.3
pypdf:5.3.0
unstructured[pdf]:0.16.23
torch:2.6.0+cu124

3.2配置hugging face镜像站点(可选)

如果你在本地有代理或者在colab上运行,就不用配置镜像站点了(前两行)。注意嗷,记得去hugging face官网申请一个token,用来登录hugging face拉取模型。

import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'   #可选
from huggingface_hub import login
hf_token = "XXX"  #去hugging face官网免费申请一个token
login(hf_token)

3.3智能分块与数据预处理模块

在进行语义分块时,我们使用BAAI/bge-small-zh-v1.5嵌入模型,捕捉句子间的语义。

注意,你需要在当前目录创建名为knowledge_base的文件夹,并把书本扔进去。

# ----------------------
# 1. 智能分块预处理
# ----------------------
class SmartDocumentProcessor:
    def __init__(self):
        # 初始化嵌入模型,使用HuggingFace的BAAI/bge-small-zh-v1.5模型-这个模型专为RAG而生
        self.embed_model = HuggingFaceEmbeddings(
            model_name="BAAI/bge-small-zh-v1.5",
            model_kwargs={"device": "cuda"},
            encode_kwargs={"batch_size": 16}
        )
        
    def _detect_content_type(self, text):
        """动态内容类型检测"""
        # 如果文本包含代码相关模式(如def、import、print或代码示例)标记为代码
        if re.search(r'def |import |print\(|代码示例', text):
            return "code"
        elif re.search(r'\|.+\|', text) and '%' in text:  # 如果文本包含表格相关模式(如|和百分比),标记为表格
            return "table"
        return "normal"   # 如果不满足上述条件,标记为普通文本

    def process_documents(self):
        # 加载文档
        # 创建加载器列表,处理知识库中的PDF和文本文件
        loaders = [
            DirectoryLoader("./knowledge_base", glob="**/*.pdf", loader_cls=PyPDFLoader),
            DirectoryLoader("./knowledge_base", glob="**/*.txt", loader_cls=TextLoader)
        ]
        # 初始化空列表,用于存储加载的所有文档
        documents = []
        # 遍历每个加载器,加载文档并添加到documents列表
        for loader in loaders:
            documents.extend(loader.load())

        # 创建语义分块器,使用嵌入模型进行语义分块
        chunker = SemanticChunker(
            embeddings=self.embed_model, #使用我们的嵌入模型
            breakpoint_threshold_amount=82,  # 设置断点阈值
            add_start_index=True   # 启用添加起始索引功能
        )
        base_chunks = chunker.split_documents(documents)  # 使用语义分块器将文档分割为基本块

        # 二次动态分块
        # 初始化最终分块列表,用于存储二次分块结果
        final_chunks = []
        # 遍历每个基本块,进行二次动态分块
        for chunk in base_chunks:
            content_type = self._detect_content_type(chunk.page_content)
            if content_type == "code":
                # 如果是代码,设置较小的块大小和重叠,用于保持上下文
                splitter = RecursiveCharacterTextSplitter(
                    chunk_size=256, chunk_overlap=64)
            elif content_type == "table":
                # 如果是表格,设置中等块大小和重叠
                splitter = RecursiveCharacterTextSplitter(
                    chunk_size=384, chunk_overlap=96)
            else:
                splitter = RecursiveCharacterTextSplitter(
                    chunk_size=512, chunk_overlap=128)
                # 如果是普通文本,设置较大的块大小和重叠
            final_chunks.extend(splitter.split_documents([chunk]))
            # 使用适当的分割器将块分割为最终块,并添加到列表
        # 遍历最终块列表,为每个块添加元数据
        for i, chunk in enumerate(final_chunks):
            chunk.metadata.update({
                "chunk_id": f"chunk_{i}",
                "content_type": self._detect_content_type(chunk.page_content)
            })   # 更新块的元数据,添加唯一ID和内容类型
            
        return final_chunks

3.4混合检索模块

在创建向量数据库时,我们使用嵌入模型BAAI/bge-large-zh-v1.5将文档块映射为向量。

# ----------------------
# 2. 混合检索系统
# ----------------------
class HybridRetriever:
    def __init__(self, chunks):
        # 创建向量数据库,使用Chroma存储文档块,嵌入模型为BAAI/bge-large-zh-v1.5
        self.vector_db = Chroma.from_documents(
            chunks,
            embedding=HuggingFaceEmbeddings(model_name="BAAI/bge-large-zh-v1.5"),
            persist_directory="./vector_db"
        )
        
        # 创建BM25检索器,从文档块中初始化,初始检索数量为5
        self.bm25_retriever = BM25Retriever.from_documents(
            chunks, 
            k=5  # 初始检索数量多于最终需要
        )
        
        # 创建混合检索器,结合向量和BM25检索,权重分别为0.6和0.4
        self.ensemble_retriever = EnsembleRetriever(
            retrievers=[
                self.vector_db.as_retriever(search_kwargs={"k": 5}),
                self.bm25_retriever
            ],
            weights=[0.6, 0.4]  
        )
        
        # 初始化重排序模型,使用BAAI/bge-reranker-large
        self.reranker = CrossEncoder(
            "BAAI/bge-reranker-large", 
            device="cuda" if torch.has_cuda else "cpu"
        )

    def retrieve(self, query, top_k=3):
        # 第一阶段:使用混合检索器获取相关文档
        docs = self.ensemble_retriever.get_relevant_documents(query)
        
        # 第二阶段:为查询和每个文档创建配对,用于重排序
        pairs = [[query, doc.page_content] for doc in docs]
        scores = self.reranker.predict(pairs)
        # 使用重排序模型预测配对的分数
        ranked_docs = sorted(zip(docs, scores), key=lambda x: x[1], reverse=True)
        
        # 返回top_k结果
        return [doc for doc, _ in ranked_docs[:top_k]]

3.5RAG系统集成

注意:我将已经微调好的模型保存到了:./fine-tune_by_zihu

本文章的代码不包含微调过程,如果你不想微调,想使用现成的模型,按照以下方法修改

在下面EnhancedRAG类里面,在__init__里面,找到

self.model, self.tokenizer = FastLanguageModel.from_pretrained(
            "./fine-tune_by_zihu",
            max_seq_length=4096
        )

修改为

self.model, self.tokenizer = FastLanguageModel.from_pretrained(
            "unsloth/DeepSeek-R1-Distill-Qwen-14B",
            max_seq_length=4096
        )

RAG系统集成代码

# ----------------------
# 3. RAG系统集成
# ----------------------
class EnhancedRAG:
    def __init__(self):
        # 文档处理
        processor = SmartDocumentProcessor()
        chunks = processor.process_documents() #整合检索和生成功能
        
        # 初始化混合检索器,使用处理后的分块
        self.retriever = HybridRetriever(chunks)
        
        # 加载微调后的语言模型,用于生成回答
        #我使用DeepSeek-R1-Distill-Qwen-14B在知乎推理数据集上进行微调
        self.model, self.tokenizer = FastLanguageModel.from_pretrained(
            "./fine-tune_by_zihu",
            max_seq_length=4096
        )
        
        # 设置随机种子
        torch.manual_seed(666)
        
        # 将模型设置为推理模式
        FastLanguageModel.for_inference(self.model)
        
    def generate_prompt(self, question, contexts):
        # 格式化上下文,包含来源和类型信息
        context_str = "\n\n".join([
            f"[来源:{doc.metadata['source']},类型:{doc.metadata['content_type']}]\n{doc.page_content}"
            for doc in contexts
        ])
        # 创建提示模板,要求基于上下文回答问题
        return f"""你是一个专业助手,请严格根据以下带来源的上下文:
        {context_str}
        
        按步骤思考并回答:{question}
        如果上下文信息不足,请明确指出缺失的信息。最后用中文给出结构化答案。"""

    def ask(self, question):
        # 使用检索器获取与问题相关的上下文
        contexts = self.retriever.retrieve(question)
        
        # 根据问题和上下文生成提示
        prompt = self.generate_prompt(question, contexts)
        
        inputs = self.tokenizer(prompt, return_tensors="pt").to(self.model.device)
        # 使用语言模型生成回答
        generated_ids = self.model.generate(
            inputs["input_ids"],
            max_new_tokens=2048,
            temperature=0.3,
            top_p=0.9,
            
            do_sample=True
        )
        generated_text = self.tokenizer.decode(generated_ids[0], skip_special_tokens=True)
        response = {'choices': [{'text': generated_text}]}
        return response['choices'][0]['text']

3.6 RAG启动!

rag = EnhancedRAG()

3.7提问测试

complex_question = "我现在正在学习卷积神经网络,请你讲讲卷积神经网络的应用"
answer = rag.ask(complex_question)
print(f"问题:{complex_question}")
print("答案:")
print(answer)

注意,在知识库里面我上传了一个txt文件,是有关卷积神经网络的百度百科。

卷积神经网络baike.baidu.com/item/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/17541100img

RAG输出为如下所示,请诸位看看效果

问题:我现在正在学习卷积神经网络,请你讲讲卷积神经网络的应用
答案:
你是一个专业助手,请严格根据以下带来源的上下文:
        [来源:knowledge_base/卷积神经网络.txt,类型:normal]
遥感科学
卷积神经网络在遥感科学,尤其是卫星遥感中有得到应用,并被认为在解析遥感图像的几何、纹理和空间分布特征时,有计算效率和分类准确度方面的优势 [125]。依据遥感图像的来源和目的,卷积神经网络被用于下垫面使用和类型改变(land use/land cover change) 研究 [67] [126]以及物理量,例如海冰覆盖率(sea-ice concentration)的遥感反演 [127]。此外卷积神经网络被用于遥感图像的物体识别 [128]和图像语义分割 [129],后两者是直接的计算机视觉问题,这里不再赘述。
大气科学
在大气科学中,卷积神经网络被用于数值模式格点输出的后处理问题,包括统计降尺度(Statistical Downscaling, SD)、预报校准、极端天气检测等。

[来源:knowledge_base/卷积神经网络.txt,类型:normal]
包含卷积神经网络的编程模块
现代主流的机器学习库和界面,包括TensorFlow、Keras、Thenao、Microsoft-CNTK等都可以运行卷积神经网络算法。此外一些商用数值计算软件,例如MATLAB也有卷积神经网络的构建工具可用 [135]。
科研应用
播报
编辑
2024年10月消息,中国科研人员利用一种结合GPU相位折叠和卷积神经网络的深度学习算法,在开普勒太空望远镜的恒星测光数据中发现5颗超短周期行星。 [137]

[来源:knowledge_base/卷积神经网络.txt,类型:normal]
其它
物理学
卷积神经网络在包含大数据问题的物理学研究中有得到关注。在高能物理学中,卷积神经网络被用于粒子对撞机(particle colliders)输出的喷流图(jet image)的分析和特征学习,有关研究包括夸克(quark)/胶子(gluon)分类 [120]、W玻色子(W boson)识别 [119]和中微子相互作用(neutrino interaction)研究 [121]等。卷积神经网络在天体物理学中也有应用,有研究使用卷积神经网络对天文望远镜图像进行星系形态学(galaxy morphology)分析 [122]和提取星系模型(galactic model)参数 [123]。利用迁移学习技术,预训练的卷积神经网络可以对LIGO(Laser Interferometer Gravitational-wave Observatory)数据中的噪声(glitch)进行检测,为数据的预处理提供帮助 [124]。
遥感科学
        
        按步骤思考并回答:我现在正在学习卷积神经网络,请你讲讲卷积神经网络的应用
        如果上下文信息不足,请明确指出缺失的信息。最后用中文给出结构化答案。

<think>
好的,我现在需要回答用户关于卷积神经网络(CNN)的应用的问题。用户已经提供了一些资料,我需要仔细分析这些内容,确保覆盖所有提到的应用领域,并且结构清晰。

首先,我需要回顾用户提供的资料,看看有哪些主要的应用领域。资料中提到了遥感科学、大气科学、物理学,以及科研应用中的具体例子。每个领域下还有更细分的应用,比如遥感中的下垫面变化、海冰覆盖率,大气科学中的统计降尺度等。

接下来,我需要将这些信息组织成一个结构化的回答。通常,这样的回答可以分为几个主要部分,每个部分对应一个应用领域,然后在每个领域下列出具体的子应用。此外,用户提到的科研应用中的例子,比如超短周期行星的发现,也应该包含进去。

在整理过程中,要注意每个应用的描述是否准确,是否有重复或遗漏。例如,在遥感科学部分,提到了下垫面变化、海冰覆盖率、物体识别和语义分割,但后两者属于计算机视觉,用户提到不需要赘述,所以可能需要简要提及但不展开。大气科学中的统计降尺度、预报校准、极端天气检测,这些都需要简要说明。

物理学部分包括高能物理中的喷流分析、夸克/胶子分类,天体物理中的星系形态学和模型参数提取,以及LIGO的噪声检测。这些都需要详细说明每个应用的具体内容。

另外,用户提供的资料中有一个科研应用的例子,2024年10月中国科研人员利用CNN发现超短周期行星,这个例子应该放在“科研应用”部分,可能需要单独列出。

在组织结构时,可能需要将资料中的内容分为几个大类:遥感科学、大气科学、物理学,以及科研应用中的其他例子。每个大类下再细分具体应用,并给出对应的参考文献编号,但用户可能不需要具体的文献信息,而是应用的名称和领域。

需要注意的是,用户可能希望了解CNN在不同领域的具体应用场景,而不仅仅是列举名称。因此,在每个应用点下,需要简要说明CNN如何被应用,以及其优势,比如计算效率、分类准确度等。

最后,确保回答逻辑清晰,层次分明,每个部分有明确的标题,并且使用适当的术语,但保持易懂。可能还需要检查是否有遗漏的信息,比如大气科学中的统计降尺度是否需要进一步解释,或者物理学中的迁移学习在LIGO中的应用是否需要强调。

总结来说,回答的结构应该是:

1. 遥感科学
   - 下垫面变化
   - 海冰覆盖率反演
   - 物体识别(简要提及)
   - 语义分割(简要提及)

2. 大气科学
   - 统计降尺度
   - 预报校准
   - 极端天气检测

3. 物理学
   - 高能物理
     - 喷流分析
     - 夸克/胶子分类
     - W玻色子识别
     - 中微子相互作用
   - 天体物理
     - 星系形态学
     - 模型参数提取
   - LIGO噪声检测

4. 科研应用
   - 开普勒望远镜的超短周期行星发现

每个部分需要简要说明CNN的应用及其优势,可能需要合并或调整部分信息,确保流畅和准确。
</think>

卷积神经网络(CNN)在多个科学领域展现了强大的应用能力,以下是其主要应用场景及优势分析:

---

### **1. 遥感科学**
- **下垫面变化监测**  
  CNN通过分析遥感图像的几何、纹理和空间分布特征,高效识别土地利用/覆盖变化(如城市扩张、森林砍伐),显著提升分类精度。
- **物理量反演**  
  用于海冰覆盖率、云层高度等物理量的遥感反演,结合深度学习处理多光谱数据的复杂性。
- **计算机视觉延伸**  
  - **物体识别**:自动检测卫星图像中的特定地物(如建筑物、车辆)。  
  - **语义分割**:精细标注图像像素,划分不同地表类型。

---

### **2. 大气科学**
- **统计降尺度(SD)**  
  将全球气候模型的低分辨率数据转换为局地气候预测,CNN通过时空特征提取优化降尺度精度。
- **极端天气检测**  
  识别卫星或雷达图像中的台风、冰雹等极端天气特征,辅助灾害预警。
- **数值预报校准**  
  修正气象模型输出的温度、风速等变量,减少预测偏差。

---

### **3. 物理学**
- **高能物理**  
  - **喷流分析**:解析粒子对撞机产生的喷流图像,学习夸克/胶子、W玻色子等粒子特征。  
  - **中微子相互作用**:通过LArTPC探测器的三维图像,识别中微子与原子核的相互作用类型。  
- **天体物理**  
  - **星系形态学**:分类星系形状(螺旋/椭圆),提取旋臂等结构特征。  
  - **模型参数提取**:从望远镜数据中反演星系质量、旋转速度等参数。  
- **LIGO噪声检测**  
  利用预训练CNN识别引力波探测器中的噪声(glitch),过滤数据噪声,提升信号识别率。

---

### **4. 科研应用实例**
- **开普勒望远镜的超短周期行星发现**  
  2024年,中国团队结合GPU相位折叠和CNN算法,在开普勒数据中发现5颗超短周期行星,展示了深度学习在天体测光数据分析中的潜力。

---

### **CNN优势总结**
- **特征自动提取**:无需手动设计特征,直接从数据学习有效表征。  
- **高效计算**:通过卷积操作减少参数量,适合大规模图像处理。  
- **迁移学习**:预训练模型(如ResNet、VGG)可快速应用于新任务。

CNN的应用边界仍在扩展,尤其在多模态数据融合(如遥感+气象)和跨学科问题(如气候变化-生态影响)中展现出独特价值。

整个回答的数据结构是

上下文<think>思考</think>回答

4.总结与展望

本文构建了一个RAG,并对RAG做了3点很普通的优化。

①二次语义分块:动态适配代码、表格和文本,提升分块质量。

混合检索:向量和BM25互补,重排序确保高相关性。

生成增强:微调模型+优化提示,回答更专业、更可控。

这只是本项目的初始阶段功能尚未完善,在下一阶段,我可能有以下改进:

1️⃣支持连续对话

2️⃣优化pdf文件解析

2024年,中国团队结合GPU相位折叠和CNN算法,在开普勒数据中发现5颗超短周期行星,展示了深度学习在天体测光数据分析中的潜力。


CNN优势总结

  • 特征自动提取:无需手动设计特征,直接从数据学习有效表征。
  • 高效计算:通过卷积操作减少参数量,适合大规模图像处理。
  • 迁移学习:预训练模型(如ResNet、VGG)可快速应用于新任务。

CNN的应用边界仍在扩展,尤其在多模态数据融合(如遥感+气象)和跨学科问题(如气候变化-生态影响)中展现出独特价值。


   整个回答的数据结构是

```text
上下文<think>思考</think>回答

4.总结与展望

本文构建了一个RAG,并对RAG做了3点很普通的优化。

①二次语义分块:动态适配代码、表格和文本,提升分块质量。

混合检索:向量和BM25互补,重排序确保高相关性。

生成增强:微调模型+优化提示,回答更专业、更可控。

这只是本项目的初始阶段功能尚未完善,在下一阶段,我可能有以下改进:

1️⃣支持连续对话

2️⃣优化pdf文件解析

3️⃣符合理工男审美的优美前端页面

如何系统学习掌握AI大模型?

AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。

学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。

这里给大家精心整理了一份全面的AI大模型学习资源,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享!

有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》*

1.学习路线图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
如果大家想领取完整的学习路线及大模型学习资料包,可以扫下方二维码获取
在这里插入图片描述

👉2.大模型配套视频👈

很多朋友都不喜欢晦涩的文字,我也为大家准备了视频教程,每个章节都是当前板块的精华浓缩。(篇幅有限,仅展示部分)

img

👉3.大模型经典学习电子书👈

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。(篇幅有限,仅展示部分,公众号内领取)

img

👉4.大模型面试题&答案👈

截至目前大模型已经超过200个,在大模型纵横的时代,不仅大模型技术越来越卷,就连大模型相关的岗位和面试也开始越来越卷了。为了让大家更容易上车大模型算法赛道,我总结了大模型常考的面试题。(篇幅有限,仅展示部分,公众号内领取)

img

大模型面试

**因篇幅有限,仅展示部分资料,**有需要的小伙伴,可以点击下方链接免费领取【保证100%免费

点击领取 《AI大模型&人工智能&入门进阶学习资源包》

**或扫描下方二维码领取 **

在这里插入图片描述

### 使用 DeepSeekLangChain 处理电子病历 #### 结合 DeepSeek 的优势提升电子病历处理效率 DeepSeek 提供了一套完整的工具链来优化电子病历的创建和管理过程。医生可以通过语音输入患者的信息,DeepSeek 则能够迅速将其转换成结构化的电子病历文档[^1]。这种自动化方式不仅提升了工作效率,也降低了由于手动记录可能带来的错误。 为了进一步提高数据的质量,在病历数据进入系统之前会经历一系列预处理操作,包括但不限于文本解析、信息抽取以及标准化映射等步骤。这一步骤由 `preprocess` 函数完成,它接收原始 EMR 数据作为参数并返回经过质量标记后的结果[^2]: ```python def preprocess(emr_data): # 解析非结构化文本 parsed = deepseek.nlp.parse(emr_data) # 抽取实体信息 entities = deepseek.ner(parsed) # 映射到标准格式 standardized = emr_mapper(entities) # 添加质量标签 return quality_tagging(standardized) ``` #### 整合 LangChain 实现更强大的功能 LangChain 是一种基于检索增强生成 (Retrieval-Augmented Generation, RAG) 方法构建的应用框架,允许开发者轻松集成各种 NLP 模型和服务。当与 DeepSeek 协同工作时,可以为用户提供更加智能化的服务体验。例如,通过结合两者的能力,可以从海量的历史病例中找到相似案例,并据此给出诊疗建议;是针对特定病症查询最新的研究成果和技术进展[^3]。 具体来说,如果想要开发这样一个应用程序,则需要先定义好如何获取及准备训练语料库,接着选择合适的模型架构来进行微调,最后部署服务接口以便其他应用调用。以下是简化版的工作流示意代码片段: ```python from langchain import LangChainModel import deepseek as ds # 初始化 LangChain 模型实例 model = LangChainModel() # 加载已有的医学文献资料集 corpus = load_medical_corpus() # 对新录入的病历执行预处理 processed_emr = preprocess(new_patient_record) # 查询最相关的几个历史案例 similar_cases = model.search_similar_cases(corpus, processed_emr) for case in similar_cases[:5]: print(f"Case ID:{case['id']}, Similarity Score={case['score']:.4f}") ``` 上述例子展示了怎样利用这两个平台的优势共同解决实际问题——即从现有资源里挖掘有价值的知识辅助临床决策制定过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一粟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值