method-LLM
初始化踩坑
- OSError: Could not find kaggle.json. Make sure it‘s located in /home/user/.kaggle.-CSDN博客
- Api python代码配置 (flowus.cn)
Application
Paitesanshi/LLM-Agent-Survey (github.com)
method
RAG 是 Retrieval Augmented Generation 的缩写,意为检索增强生成。它是一个将大规模语言模型与来自外部知识源的检索相结合的框架,旨在改进问答能力。
- RAG 的工作原理是通过工程化手段解决大语言模型知识更新困难的问题。其核心是利用外挂于语言模型的知识数据库(通常使用向量数据库)存储新数据、领域数据等。在知识问答过程中,RAG 通常分为索引、知识检索和基于内容的问答三个阶段。
- 索引阶段:需要事先将文本数据进行处理,通过词嵌入等向量化技术,将文本映射到低维向量空间,并将向量存储到数据库中,构建起可检索的向量索引。
- 知识检索阶段:当输入一个问题时,RAG 会对知识库进行检索,找到与问题最相关的一批文档。这需要依赖于第一阶段建立的向量索引,根据向量间的相似性进行快速检索。
- 生成答案阶段:RAG 会把输入问题及相应的检索结果文档一起提供给语言模型,让语言模型充分把这些外部知识融入上下文,并生成相应的答案。
- RAG 可以有效扩展大模型的知识库,在问答系统、对话系统等自然语言处理任务中有广泛的应用
微调
- phi3,魔搭SWIFT,LORA
- http://link.zhihu.com/?target=https%3A//github.com/sxontheway/Keep-Learning/blob/master/Research/Big_Models.md
- Significant-Gravitas/AutoGPT: AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters. (github.com)
- 数据集
- 加载分词器和模型
- Tokenize_function 应用于整个数据集,并通过设置 batched=True 以批量方式来处理数据,加速处理过程
- 为了加快训练和测试的速度,我们可以从数据集中选取一部分样本作为训练集和测试集用于微调。使用 shuffle 函数对数据集进行随机打乱,通过 select函数选择训练数据集中的前 1000 个样本进行微调训练,测试数据集中的前 400 个样本进行微调测试。
- 定义微调参数
- 在我设计的这个案例里,使用了 transformers 库提供的 TrainingArguments 类,分别设置了输出目录、训练轮数(epoch)、批次大小(batch size)、学习率预热步数(warmup_steps)、权重衰减系数(weight_decay)以及日志输出的相关参数:
- 初始化 Trainer,将之前准备好的模型、训练参数、训练集、测试集以及分词器全部塞进 Trainer 里,然后调用 train 方法开始微调模型、评估模型,并保存微调后的模型:
- 预测。加载之前微调好的模型,使用 BertTokenizer 和 BertForSequenceClassification 的 from_pretrained 方法,分别加载预训练的分词器和我们自己微调好的模型。 Predict 函数:这个函数共需四个参数:texts(需要预测的文本)、tokenizer(分词器)、model(微调好的模型)以及 device(GPU 或 CPU)。
函数内部首先判断读入的 texts 是单个文本还是文本列表。如果是单个文本,则将其转换为列表。然后,使用分词器对文本进行编码,将其转换为模型可接受的输入格式。这里使用了 padding、truncation 和 max_length 等参数,用于确保输入的一致性。接着将模型设置为评估模式(eval),并使用 torch.no_grad ()上下文管理器来禁用梯度计算,减少内存占用的同时加速推理过程。最后,将编码后的输入传递给模型,获取预测结果。为了看起来更直观,我把预测结果从数字标签转换为对应的文字描述(“负面评价”或“正面评价”),并返回结果列表。
PEFT
- PEFT(Parameter-Efficient Fine-Tuning)是 hugging face 开源的一个参数高效微调大模型的工具,里面集成了4种微调大模型的方法,可以通过微调少量参数就达到接近微调全量参数的效果,使得在 GPU 资源不足的情况下也可以微调大模型。
- 微调可以分为全微调和部分两个方法
- 微调所有层:将预训练模型的所有层都参与微调,以适应新的任务。
- 微调顶层:只微调预训练模型的顶层,以适应新的任务。
- 冻结底层:将预训练模型的底层固定不变,只对顶层进行微调。
- 逐层微调:从底层开始,逐层微调预训练模型,直到所有层都被微调。
- 迁移学习:将预训练模型的知识迁移到新的任务中,以提高模型性能。这种方法通常使用微调顶层或冻结底层的方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 chiblog!
评论