1 LLMs(large language models)
LLM分为基础LLM和指令微调LLM
基础LLM 是 通过提供文本数据,训练深度学习模型,整理、分析、推理文本内容。 指令微调LLM,是该模型已经有大量的文本训练之后,模拟人类思维,使用RLHF(reinforcement learning from human feedback,人类反馈强化学习),通过提供的指令,迭代调整模型反馈。
【1】 参考:ChatGPT|万字长文总结吴恩达prompt-engineering课
Zero-shot/Few-shot Prompt设计
NLP(Natural Language Processing 自然语言处理)两种常见方法。
零样本、少量样本提示
1 Zero-shot Prompting 只输入指令,没有示例,让人工智能模型提供反馈。
依赖模型现有的预训练基础,泛化理解指令。 没有约束,更灵活,相应的准确度低,模型不具有针对性,更普适通用。
2 Few-shot Prompting 提供少量示例,1-3个引导人工智能执行指令。
示例限定了模型反馈具有针对性,代表性。 依赖示例的精准度,示例的数量。通用性受限。
举例: 输入指令:读一首诗歌 Zero-shot Prompting 反馈:唐诗、诗经、宋词,等等 Few-shot Prompting 提供示例,读一首唐代战争题材的诗,七言绝句。 反馈:唐王昌龄的出塞:“秦时明月汉时关,万里长征人未还。但使龙城飞将在,不教胡马度阴山。”
Chain-of-Thought Prompting(CoT) 引导人工智能模型展示推理过程的提示策略。 模型会根据预训练的逻辑关系、语义分析,逐步分析解答。 提高了反馈的解释性。 局限在于 小模型预训练不足时,反馈不准确,无法处理复杂的指令。
【2】 参考:Zero-shot、Few-shot、Chain-of-Thought(CoT)Prompting 解析
大语言模型技术栈由四个主要部分组成:
- 数据预处理流程(data preprocessing pipeline)
- 嵌入端点(embeddings endpoint )+向量存储(vector store)
- LLM 端点(LLM endpoints)
- LLM 编程框架(LLM programming framework)
graph LR
A[Raw Data] --> B[数据预处理]
B --> C[嵌入端点+向量存储]
C --> D[LLM编程框架]
D --> C
D --> E[LLM端点]
E --> D
数据预处理,处理各种数据源(PDF、PPTX、聊天记录、HTML等),清理之后,最终向外部API提供json数据。
【3】 LangChain参考文章
2 RAG(Retrieval-Augmented Generation)
检索增强生成
结合信息检索技术与语言生成模型的人工智能技术。是一种NLP(自然语言处理)技术
通过外部信息检索,形成prompt输入给LLM。
RAG的“检索、增强、生成”,谁增强了谁,谁生成了答案,主语很重要。 是从知识库中检索到的问答对,增强了LLM的提示词(prompt),LLM拿着增强后的Prompt生成了问题答案。
该技术检索的信息增强了prompt,LLM用prompt生成反馈。
可以从文档、网页、数据库中检索信息。
数据分块→向量化→检索→生成
1、数据准备与知识库构建
- 1 收集数据
- 2 数据清洗(去重、去噪)
- 3 知识库构建(文本分割小片段chunks,使用文本嵌入模型将片段转换成向量,并将向量存储在数据库中)
graph TD
A[收集数据] --> B[数据清洗]
B --> C[知识库构建]
C --> C1[文本分割小片段chunks]
C --> C2[将片段转换成向量]
C --> C3[将向量存储在数据库中]
C2 --> D1[由浮点数组成的列表]
D1 --> E1[向量之间距离衡量他们的相关性]
D1 --> E2[距离越小相关性越高]
D1 --> E3[向量距离计算方法]
E3 --> F1[余弦距离越大越相似]
E3 --> F2[欧式距离越小越相似]
应用场景
欧式距离:
适用于需要计算实际距离的场景,如地理信息系统中的距离计算、物品推荐系统中的地理位置推荐等。由于欧式距离关注绝对差异,因此在这些场景中能够提供更准确的结果
余弦相似度:
适用于需要比较向量方向相似性的场景,如文本分析、用户兴趣分析等。由于余弦相似度关注方向差异,因此在处理这类问题时能够更好地反映向量之间的相似性
Embedding 文本嵌入
在机器学习中,向量用于表示数据特征。 文本嵌入:文本是离散数据,将其映射到连续向量空间的方法就是文本嵌入。 并且保留数据之间的语义关系。方便进行机器学习和深度学习任务。
文本嵌入的用途: 用于测量文本字符串的相关性。
整理来源资料 【3】 LangChain参考文章
3 LangChain
LangChain是一个LLMs编程框架
- 数据感知:将语言模型连接到其他数据源
- 自主性:允许语言模型与其环境进行交互
可以连接其他数据,文本、网页、数据库,可以与用户简单交互
【3】 LangChain参考文章
LangChain竞品 在上方链接中可查 LangChain
- 优点:提供标准化内存接口和内存实现,支持自定义大模型的封装。
- 缺点:评估生成模型的性能比较困难。
LangChain 主体分6个模块:
- 1 对大语言模型输入输出的管理
- 2 外部数据接入
- 3 链的概念
- 4 上下文记忆,存储管理
- 5 智能代理
- 6 回调系统
4 FAISS(Facebook AI Similarity Search)
矢量数据库,相似性搜索数据库
【5】 一文读懂 Faiss
FAISS示例代码
import faiss
import numpy as np
# 1. 生成示例数据
# 向量维度
d = 64
# 数据库中向量的数量
nb = 10000
# 查询向量的数量
nq = 10
# 生成随机向量作为数据库向量
np.random.seed(1234)
xb = np.random.random((nb, d)).astype('float32')
# 生成随机向量作为查询向量
xq = np.random.random((nq, d)).astype('float32')
# 2. 创建 Flat 索引
# 使用欧氏距离(L2 距离)的 Flat 索引
index = faiss.IndexFlatL2(d)
# 3. 添加向量到索引
index.add(xb)
# 4. 执行向量检索
# 每个查询向量返回最相似的 4 个向量
k = 4
# 执行搜索,返回距离矩阵 D 和索引矩阵 I
D, I = index.search(xq, k)
# 5. 输出检索结果
print("查询向量与最相似向量的距离矩阵:")
print(D)
print("最相似向量在数据库中的索引矩阵:")
print(I)
查看输出结果
查询向量与最相似向量的距离矩阵:
[[5.0900974 5.670616 5.7184644 5.765298 ]
[6.8587008 6.956443 7.08839 7.1007147]
[5.2772083 5.4527187 5.796511 5.9845557]
[5.809805 6.0942507 6.1004057 6.120061 ]
[5.14467 5.554582 5.785306 5.794692 ]
[5.3999023 5.633311 5.9603777 6.1788116]
[4.6929827 5.4201565 5.5132103 5.5931726]
[5.583033 6.3457537 6.6454535 6.8106904]
[5.8315773 6.053444 6.208401 6.3825483]
[6.103296 6.274061 6.534667 6.587805 ]]
最相似向量在数据库中的索引矩阵:
[[1204 3271 2568 7824]
[8063 2700 919 6738]
[3919 8653 4130 6471]
[4429 230 317 3062]
[9103 199 6044 8418]
[6491 4251 8117 2662]
[7073 901 1930 3568]
[9194 1407 8794 7150]
[2047 8455 1301 2895]
[ 782 4019 4755 9646]]
简单来讲,FastGPT面向B端,Dify面向国际多语言开发,Coze面向C端 FastGPT 提供精确模型定制,注重企业级数据隐私保护,适用于金融、医疗行业 Dify 适合开发者,国际化项目团队,支持多语言API,适用于国际电商,全球开发团队 Coze 用户对话体验较高的场景,智能客服、语音助手,语音识别表现突出
【6】 参考:三大智能体平台对比分析:FastGPT、Dify、Coze 哪个更适合你?
Numpy
【14】 数据分析之Numpy模块详解
5 指令微调
Fine-tuning微调,是指在一个已经训练好的神经网络模型基础上,使用额外数据集和调整超参数,实现特定任务训练。固定大部分参数,只调整特定层参数。提升效率。
我的理解:比如我要一个肉沫茄子菜谱,模型如果full-tuning很低效,那通过调整参数,比如在模型执行prompt前,让模型知道是找菜谱,就会很快得到反馈。
- 1 Adapter Tuning 添加适配器模块解决问题
- 2 Prefix Tuning 在输入序列加特定前缀,引导模型反馈
- 3 Prompt Tuning 设计修改提示文本改善模型性能
- 4 P-Tuning v1 将prompt进行embedding,简单理解将prompt由高维离散数据转换成低维向量数据
- 5 P-Tuning v2 是Prompt Tuning的改进版 输入的prompt编码,自适应动态提示。
- 6 LoRA(Low-Rank Adaptation) 添加低秩矩阵作为参数层微调。
- 7 AdaLoRA(Adaptive Low-Rank Adaptation) LoRA的改进版 自适应的稀疏正交约束,自动确定最佳低秩矩阵参数。
- 8 QLoRA(Quantized LoRA) 定义4位标准浮点数(Normal Float 4-bit,NF4)量化,量化的本质是函数映射,线性量化和非线性量化。显著降低训练大模型时所需的显存资源。
【7】 参考:QLoRA详解
P-Tuning v2 相比于 P-Tuning v1 和 Prompt Tuning,加入了Prompts tokens
P-Tuning v2包含以下关键步骤:
自适应Prompt生成:模型通过Prompt Encoder对输入样本进行编码,结合任务信息生成动态的提示。这样,模型能够根据不同的输入样本自动调整提示,提高了模型的灵活性和泛化能力。
微调:生成的动态提示被输入到模型中,模型在训练过程中根据提示指导进行微调,以适应特定任务的要求。这有助于提高模型在该任务上的性能表现。
高效性:相较于传统的Prompt-Tuning方法,P-Tuning v2减少了对提示文本的手动设计工作,提高了效率。模型能够更快地适应不同任务,并表现出更好的性能。
【8】 参考:LLMs常见的Finetune方式;chatglm3微调实战;大模型微调
以下是针对大型语言模型(LLM)微调方法的系统性整理,包括主流技术分类、优缺点对比、实战项目推荐及学习资源,帮助你快速掌握核心内容并实践。
一、LLM微调方法分类与优缺点
1. 全量微调(Full Fine-Tuning, FFT)
- 原理:更新模型所有参数,适配特定任务。
- 优点:
- 在充足数据和计算资源下,性能最优。
- 适合任务与预训练数据分布差异较大的场景。
- 缺点:
- 显存需求极高(如30B模型需600GB显存)。
- 易发生灾难性遗忘(模型遗忘通用知识)。
- 适用场景:资源充足且需极致性能的任务(如专业领域模型)。
2. 参数高效微调(PEFT)
通过调整少量参数实现任务适配,显著降低资源需求。以下是主流PEFT方法:
(1) LoRA(低秩适应)
- 原理:在模型权重矩阵旁添加低秩矩阵(如ΔW=BA),仅训练低秩部分。
- 优点:
- 显存占用低(训练参数仅为原模型的0.1%-1%)。
- 无推理延迟,适合多任务部署。
- 缺点:需手动选择注入层(通常为Q、V矩阵)。
- 工具:Hugging Face的
peft
库。
(2) QLoRA(量化LoRA)
- 原理:结合模型量化(4-bit)与LoRA,进一步降低显存需求。
- 优点:可在单卡(如24GB显存)上微调10B级模型。
- 缺点:量化可能轻微降低模型精度。
(3) Prompt Tuning系列
- Prefix Tuning:在每层Transformer前添加可学习前缀向量。
- P-Tuning v2:多层引入连续提示,适配复杂任务(如序列标注)。
- 优点:
- 参数量极少(0.1%-3%)。
- 在低数据量下表现优于全量微调。
- 缺点:提示初始化敏感,需精细调参。
(4) Adapter Tuning
- 原理:在Transformer层间插入小型网络模块(降维→激活→升维)。
- 优点:模块化设计,易于多任务扩展。
- 缺点:增加推理延迟(约10%-20%)。
二、实战项目推荐
项目1:基于LoRA的医疗问答微调
- 模型:选择ChatGLM3-6B或Mistral 7B。
- 数据:使用公开医疗QA数据集(如MedMCQA)或合成数据(GPT生成)。
- 工具:Axolotl框架(简化训练流程)。
- 步骤:
- 数据格式化为Alpaca模板(输入-输出对)。
- 配置LoRA参数(
rank=8, alpha=16
)并启动训练。 - 评估模型在验证集上的准确率及通用能力保留情况。
项目2:使用QLoRA微调客服助手
- 模型:Llama 2-7B或Falcon-7B。
- 数据:从企业聊天记录提取对话(需脱敏),格式化为多轮对话。
- 工具:Hugging Face
transformers
+bitsandbytes
(4-bit量化)。 - 优化技巧:
- 对历史对话进行摘要或截断,避免显存溢出。
- 学习率设为
2e-5
以下,防止灾难性遗忘。
三、学习资源与工具
1. 开源库与框架
- PEFT库:支持LoRA、Prefix Tuning等,集成于Hugging Face生态。
- Axolotl:一站式微调工具,支持多种模型和数据格式。
- QLoRA代码示例:参考Hugging Face官方博客。
2. 教程与案例
- 入门指南:CSDN《LLM微调通俗易懂总结》。
- 进阶实战:华为云社区《LLM微调六大方法对比》。
- 中文模型微调:ChatGLM3官方GitHub仓库及微调示例。
3. 数据集
- 通用指令数据:Alpaca、BELLE。
- 领域数据:PubMed医学论文、法律文书等。
四、总结与建议
- 方法选择:资源有限时优先LoRA/QLoRA;需高性能且数据充足时考虑FFT;低数据场景用Prompt Tuning。
- 避坑指南:
- 数据清洗是关键,去除噪声和敏感信息。
- 监控验证集损失,避免过拟合。
- 学习路径:从LoRA实战入手,逐步扩展到复杂方法,结合官方文档和社区案例调试。
通过以上内容,你可以快速掌握LLM微调的核心技术,并通过实战项目巩固知识。建议从简单的医疗问答项目起步,逐步挑战多任务和复杂场景的微调需求。
6 PyTorch
开源,深度学习框架,兼容Python 应用于计算机视觉、自然语言处理、语音识别
精髓:张量tensor来处理数据,轻松应对大规模数据集
张量(Tensor)是 PyTorch 中的核心数据结构,用于存储和操作多维数组。
张量可以视为一个多维数组,支持加速计算的操作。
在 PyTorch 中,张量的概念类似于 NumPy 中的数组,但是 PyTorch 的张量可以运行在不同的设备上,比如 CPU 和 GPU,这使得它们非常适合于进行大规模并行计算,特别是在深度学习领域。
-
维度(Dimensionality):张量的维度指的是数据的多维数组结构。例如,一个标量(0维张量)是一个单独的数字,一个向量(1维张量)是一个一维数组,一个矩阵(2维张量)是一个二维数组,以此类推。
-
形状(Shape):张量的形状是指每个维度上的大小。例如,一个形状为(3, 4)的张量意味着它有3行4列。
-
数据类型(Dtype):张量中的数据类型定义了存储每个元素所需的内存大小和解释方式。PyTorch支持多种数据类型,包括整数型(如torch.int8、torch.int32)、浮点型(如torch.float32、torch.float64)和布尔型(torch.bool)。
【9】 什么是PyTorch 【10】 从零开始安装pytorch 【13】 菜鸟教程
训练过程:
前向传播(Forward Propagation): 在前向传播阶段,输入数据通过网络层传递,每层应用权重和激活函数,直到产生输出。
计算损失(Calculate Loss): 根据网络的输出和真实标签,计算损失函数的值。
反向传播(Backpropagation): 反向传播利用自动求导技术计算损失函数关于每个参数的梯度。
参数更新(Parameter Update): 使用优化器根据梯度更新网络的权重和偏置。
迭代(Iteration): 重复上述过程,直到模型在训练数据上的性能达到满意的水平。
损失函数:损失函数(loss function)或代价函数(cost function)是将随机事件或其有关随机变量的取值映射为非负实数以表示该随机事件的“风险”或“损失”的函数。
PyTorch 是一个开源的机器学习库,广泛用于深度学习和神经网络的研究与开发。以下是对 PyTorch 的详细介绍:
1. PyTorch 的定义与特点
PyTorch 是由 Facebook 人工智能研究院(FAIR)于 2017 年推出的一个基于 Python 的深度学习框架。它具有以下特点:
- 动态计算图:允许开发者以动态方式构建和修改计算图,适合研究和原型开发。
- 灵活性和易用性:提供简洁的 API,适合快速实验和开发。
- 强大的 GPU 加速:支持高效的张量计算,适合大规模深度学习任务。
- 自动求导系统:简化了梯度计算,便于神经网络模型的训练和优化。
2. PyTorch 的使用场景
PyTorch 在多个领域都有广泛应用,主要包括:
- 计算机视觉:
- 图像分类(如 CIFAR-10、ImageNet)。
- 目标检测(如人脸识别、车辆检测)。
- 图像分割(如语义分割、实例分割)。
- 生成对抗网络(GANs)。
- 自然语言处理(NLP):
- 语言模型训练(如 BERT、GPT 系列)。
- 文本分类、情感分析。
- 机器翻译和问答系统。
- 语音处理:
- 语音识别(如 Whisper 模型)。
- 语音合成(如 Tacotron 模型)。
- 强化学习:
- 游戏AI(如训练模型玩 Atari 游戏)。
- 自动驾驶决策优化。
- 其他领域:
- 工业制造中的质量控制、预测维护。
- 推荐系统开发。
3. PyTorch 的基本使用方法
以下是使用 PyTorch 的基本步骤:
(1)安装 PyTorch
- 可通过官方网站或使用 conda 进行安装。具体安装步骤请参考PyTorch 官方文档。
(2)导入库
在 Python 代码中导入 PyTorch 库:
import torch
import torch.nn as nn
import torch.optim as optim
(3)定义模型
使用 torch.nn
模块定义神经网络模型。例如,一个简单的线性回归模型:
class LinearRegression(nn.Module):
def __init__(self, input_size, output_size):
super(LinearRegression, self).__init__()
self.linear = nn.Linear(input_size, output_size)
def forward(self, x):
return self.linear(x)
(4)准备数据
使用 PyTorch 提供的数据加载器和工具准备训练和测试数据:
# 示例数据
x_train = torch.randn(100, 1)
y_train = torch.randn(100, 1)
(5)定义损失函数和优化器
选择合适的损失函数和优化器:
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.01)
(6)训练模型
通过训练循环进行前向传播、反向传播和参数更新:
for epoch in range(1000):
optimizer.zero_grad()
output = model(x_train)
loss = criterion(output, y_train)
loss.backward()
optimizer.step()
(7)测试模型
使用测试数据集评估模型性能:
with torch.no_grad():
test_output = model(x_test)
test_loss = criterion(test_output, y_test)
print(f'Test Loss: {test_loss.item()}')
4. 学习资源与进一步探索
- 官方文档:PyTorch 官方文档
- 入门教程:PyTorch 基础教程 - 菜鸟教程
- 应用案例:PyTorch 在不同领域的应用案例 通过以上介绍,您可以快速了解 PyTorch 的核心概念、使用场景和基本操作。如果需要更深入的学习,可以参考上述资源。
PyTorch:像Python一样灵活,适合创造(研究、快速迭代)
TensorFlow:像C++一样严谨,适合建造(生产、稳定部署)
Transformer
Transformer是一种深度学习模型架构,主要用于自然语言处理(NLP)任务。 Transformer模型的核心特点是引入了自注意力机制,这使得它能够在生成输出时权衡输入序列中不同位置的重要性,从而更好地处理长距离依赖关系
-
Transformer的基本组成和工作原理 Transformer模型主要由以下几个部分组成:
- 编码器(Encoder):负责处理输入数据,将其转换为中间表示。
- 解码器(Decoder):负责将中间表示生成最终的输出。
- 自注意力机制:这是Transformer的核心, 通过计算输入序列中所有元素之间的注意力权重,来决定每个元素对当前元素的影响程度。
- 位置编码:由于自注意力机制不考虑元素的位置信息,位置编码被添加到输入中,以保留序列的顺序信息。
-
Transformer的应用场景和最新研究进展 Transformer模型在自然语言处理领域取得了显著的成功,特别是在机器翻译、文本摘要和问答系统中。近年来,研究人员不断探索如何优化Transformer架构,以提高其性能和效率。例如,有研究通过去除归一化层来简化模型结构,同时保持甚至提升模型的性能。 具体来说,研究者发现了一种称为 Dynamic Tanh 的方法,可以替代归一化层,这种方法通过缩放的 tanh 函数来实现类似归一化层的效果, 从而在不使用归一化层的情况下达到相同或更好的性能。
BERT(Bidirectional Encoder Representation from Transformers)
BERT包含两个预训练任务:
- Masked LM 带mask的语言模型训练
- Next Sentence Prediction 下一句话预测任务
Transformers 的双向编码表象
【12】 BERT模型架构详解
OCR场景主要集中在处理扫描文档和图像中的文本提取,尤其是在以下几种情境下表现出色:
-
处理扫描的PDF文档和图像文件:
- 多种OCR引擎支持: 支持集成多种OCR引擎,例如EasyOCR、Tesseract、PaddleOCR 以及苹果的Vision框架 (ocrmac)
- 用户可以根据实际需求和文档特点选择合适的引擎,以获得最佳的识别效果。
- 图像文本提取: OCR功能不仅限于PDF文档,还可以从嵌入在页面中的位图图像中提取文本内容。 这意味着即使文档中部分内容是以图片形式存在,也能通过OCR技术将其转换为可编辑的文本。
-
复杂版式文档的处理:
-
准确识别复杂排版: 即使是包含复杂排版的PDF文档,例如学术论文中常见的图表、分栏内容等,也能准确地识别和处理这些元素,包括图表和分栏内容中的文字。
-
表格结构重建:能够精确地重建表格结构,完整保留表格中的行与列关系。这对于处理包含大量数据表格的文档至关重要,确保表格数据在提取后仍然结构清晰,方便后续分析和使用。
-
-
历史文献和纸质档案数字化: 扫描文档处理: 对于历史文献、纸质档案等扫描文档,OCR功能可以发挥重要作用。这些文档通常以图像形式存在,难以直接编辑和分析。OCR技术可以将这些图像中的文字准确提取出来,使得这些原本难以处理的文档能够转化为可编辑和分析的文本格式,方便进行数字化管理和知识挖掘。
-
文档格式转换与内容提取:
-
OCR辅助内容解析: 在将文档解析并导出为HTML、Markdown 和 JSON等格式的过程中, 对于扫描的PDF文档,会启用OCR功能,提取文档中的文本内容,确保转换后的文档包含完整的文本信息。
-
多种性能模式:考虑到不同场景下的性能需求,提供了多种性能模式。 用户可以根据处理文档的类型和对速度、精度的要求,灵活选择合适的性能模式,以优化OCR处理效率。
-