文章目录
- (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、提示词Prompt优化
-
- 本地知识库目标
- 操作步骤
- 问答测试的预设问题
- 原始数据情况
- 数据集优化:预处理,先后准备了三份数据集
- Tip:每次优化重新对话测试时,建议重启模型。本人GPU冒烟了,才重启。
- 创建本地知识库时文件处理参数调整
- 对话时知识库配置参数调整
- Prompt提示词优化
-
- [Round 1](#Round 1)
- [Round 2](#Round 2)
- [Round 3](#Round 3)
- [Round 4](#Round 4)
- 数据集地址
(提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、提示词Prompt优化
本地知识库目标
- 创建"神经内科典型病例目录"数据集,一共3个病例信息,包括基本信息、症状、体格检查、辅助检查、诊断、诊断依据等信息。
- LangChain+ChatGLM3-6B WebUI中加载"神经内科典型病例目录"数据集作为本地知识库。
- 在"对话"中进行神经内科典型病例相关问答。
操作步骤
- 数据集预处理
- 建立本地知识库后,进行问答测试
- 调优:数据集优化、本地知识库问答参数调整、Prompt提示词优化
问答测试的预设问题
- Q:有几个病例?
- Q:输出病例编号、性别、年龄。
- Q:神经内科确诊疾病有哪些,输出名称。
原始数据情况
#神经内科典型病例目录
##病例一
###病史摘要 患者女,78岁。 入院前四小时突然觉得头痛,同时发现左侧肢体乏力,左上肢不能持物,左下肢不能行走,恶心伴呕吐胃内容物数次。无意识丧失,无四肢抽搐,无大小便失禁,即送医院急诊。
体格检查:神清,BP 185/95mmHg,HR
80次/分,律齐,EKG示窦性心律.对答切题,双眼向右凝视,双瞳孔等大等圆,对光反射存在,左鼻唇沟浅,伸舌略偏左。左侧肢体肌张力增高,左侧腱反射略亢进,左侧肌力III0,右侧肢体肌张力正常,肌力V0。左侧巴氏征(+),右侧病理症(-)。颈软,克氏征(-)。
辅助检查:头颅CT示右侧颞叶血肿。
数据集优化:预处理,先后准备了三份数据集
PreData1:极简数据集,txt格式
- 收集资料:原始数据是从网上爬的病例神经内科典型病例,复制、粘贴到的txt文件。只有3个病例。
- 格式处理:统一标点符号,包括换行符号;处理好段落内容逻辑,处理段落内出现的换行情况。
- 删除冗余:删除序号,如1、2、3或a、b、c等。删除多余的空格。
PreData2:按json结构处理的数据集,txt格式
将数据集按json处理
曾经尝试过进行以下这一步的操作,由于没有工具辅助,非常繁琐,尤其是key值的生成。放弃了。
段落内处理:确保段落内是类似于KV结构,如"症状":"头疼"。
处理成了偷懒模式:
{ ["症状:头疼"],
["体格检检:口齿欠清"] ,
["体格检查:神志朦胧"] }
PreData3:整理成文档章节的PDF数据集
从1到3是一个逐步优化数据集的过程
- 从PreData1开始进行对话测试,回答让人一脸黑线,无法沟通交流。
- PreData2能沟通交流,也有惊喜,但是不稳定
"有几个病例"重复问几遍,只回答对过一次。而且基于Json尝试过几种修改方案,繁琐,而且新的json文件导入本地知识库报错(懒,不想正面面对报错的问题),遂放弃了,改用PDF。
- PreData3按照文章章节编辑,插入目录,貌似很顺利
相对来说比较稳定,但是对话测试也是那么完美。这让我想起需要从对话参数、Prompt提示词解决问题。
Tip:每次优化重新对话测试时,建议重启模型。本人GPU冒烟了,才重启。
创建本地知识库时文件处理参数调整
FAISS
bge-large-zh
以下两项默认值需要修改:
段落文本最大长度:250
相邻文本重合长度:50
改成:
段落文本最大长度:50
相邻文本重合长度:5
对话时知识库配置参数调整
以下两项需要调整:
匹配知识条数:3
知识匹配分数阈值:1
修改成:
匹配知识条数:20
知识匹配分数阈值:1
可以先不改,根据回答适当调整到0.8左右,试试效果再决定。
Prompt提示词优化
直接看多轮对话下来,对话是如何有序展开的吧。
Round 1
Round 2
Round 3
Round 4
完毕!
数据集地址
Enjoy!!!