RAG-Milvus
配置文件,
文档处理模块
日志书写
原始子块,txt
sparse vector
parent content
source
timestamp
检索精准。
分块检索,
父块
子块
子块的文档切分器
父类的文档切分器
基于父块,切
文档的处理模块
创建并加载集合
转换成向量并存储
trainer.train()
model
args
帮助简化训练流程。
处理数据(※)
帮助跟随节奏:
敲注释,敲print信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| 检查模型路径是否存在 加载预训练模型 将模型移到指定设备 记录加载成功的日志
初始化新模型 num labels=4;就是多分类 default:就是2 将模型移到指定设备 记录初始化模型的日志
保存模型(save_model)
创建dataset对象
训练bert分类模型 # 加载数据集 with open万能读取方式 json.loads(value) for value in f.readlines()
print: texts[:2] labels[:2] len(train_texts) len(val_texts) #预处理 ##数据预处理 truncation=True, padding= 'max_length' max_length = 128 return_tensors='pt' print(encoding) print(encoding['input_ids'].shape) ## def create_dataset(self,encodings,labels) class dataset(torch.utils.data.dataset) def __init__(self,encoding,labels) super().__init__() len(train_dataset) train_dataset[1]
main query classifer = QueryClassifier() data_file query_classify.train_model()
|
上午回顾
realize rag_prompt method
provide a context
let model answer the question based on context
normally, input with json format
defined sayed question
retrievel context with query
target :
coplicate into simple
simplize
there is prompt template class in langchain pack
write queryclassifier
normal common
or professional query
made up by LLM
giving a prompt mudule
splite 5000 into serveral batch
warning:farmat warong
at leaset
simplize script
load_model加载模型
保存模型
create dataset类
实例化对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| 数据划分 预处理 创建数据集 设置训练参数 取出train dataset的一个样本呢数据 train dataset字典格式 **等价于变量赋值。
train_args=TrainingArguments( 输出路径 训练轮数=3 GPU的批次大小
学习率预热(线性学习率预热,从0预热到指定的步长的这个值) 预热就是为学习率准备的 权重衰减系数(adam),会有默认值 log文件夹 每个variable值打印一次 “epoch”,每一轮都去验证一下模型的指标 “epoch”每一轮都去保存一下;梯度检查点(会有epoch=3个模型) 总结每轮都会检查一次,并保存一次
最后加载最优的模型 只保存一个检查点(save total limit=1)就是对每轮的模型参数进行覆写。最后只会留下最后一个模型,约束检查点的个数,最终只保留一个。 metric_for best-model=“eval-loss“看最终的损失值 fp16=false 禁用混合精度 ) # 初始化 trainner 有一个参数computer metrics = self。compute-metrics compute_metrics(self,eval_pred): logits,labels = eval_pred logits:[8,2]模型预测的结果 labels:[8] # 初始化trainer(书写代码) """ 如果是自己定义的模型 torch.save(model.state_dict(),'path') model.load_state_dict(torch.load('pth')) ***看视频面试,操作一次,copy一次,看视频一次。***
""" 打印结果分析: loss:查看loss是否能够正常下降 grad-norm:梯度裁剪(防止梯度爆炸) learning-rate:学习率 epoch 338;338/8 *轮数3 = 147=迭代的部署 每隔10步打印一次日志;
evaluate-model(对训练好的模型进行评估) encoding 输入的数据必须先分词 pytorch 张量 底层是数组 predict——category 检查模型是否加载 encoding是字典, 对查询进行编码
encoding = {k:v。to(self。device) for k,v in } logits
|
知识串讲
1 2 3 4 5 6 7 8
| 流程图:意图识别;通用知识则大模型直接回答。是专业知识,则调用rag qa系统。 将上下文和模版做一个凭借。 查询分类 意图识别的模型(2分类) 写一个提示词(规则)让大模型生成样本。 套用预训练模型 trainer方法实现训练脚本 将模型重新加载然后预测
|