Skip to content

[作业01-NLP] SZ2508011 任浩栋 - 中华历史RAG问答系统#3

Open
renhaodong1011 wants to merge 10 commits intoCAI-testbooks:mainfrom
renhaodong1011:main
Open

[作业01-NLP] SZ2508011 任浩栋 - 中华历史RAG问答系统#3
renhaodong1011 wants to merge 10 commits intoCAI-testbooks:mainfrom
renhaodong1011:main

Conversation

@renhaodong1011
Copy link
Copy Markdown

项目的独立仓库地址:https://github.com/renhaodong1011/chinese-history-rag-qwen
本次为目前第一版内容,实现的内容如下:1.编写了脚本model_download.py 用于下载Qwen-2.5-7B-Instruct模型到AutoDL本地;2.在文件夹data_extract中,编写脚本spider.py用于在中华上下五千年网站中爬取所有文本数据,共282个txt文 件;3.在文件夹data_extract中,编写脚本generate_QA_data.py,使用QWen4-8B模型,智能从爬取的所有数据中生成QA对,用于后续的Lora微调,共计提取QA对9978条,保存在相应文件夹下的chinese_history_qa.json文件中;4.在RAG.py文件中通过streamlit实现了一个完全本地化的中国历史领域 RAG(Retrieval-Augmented Generation)Web问答系统,支持流式输出。 且该第一版项目已经在AutoDL,A100-PCIE-40GB(40GB)单卡下部署成功。并将一些项目过程中的输出以截图的方式展示在了img文件夹中,包括数据浏览,QA对生成,RAG问答截图等。 后续的迭代,将以Lora微调模型为主线展开

@renhaodong1011 renhaodong1011 changed the title 添加了第一版迭代的说明文件 [作业01-NLP] SZ2508011 任浩栋 - 中华历史RAG问答系统 Dec 21, 2025
Copy link
Copy Markdown
Author

@renhaodong1011 renhaodong1011 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

迭代2: 1.新增Lora_tran.py 文件对Qwen-2.5-7B-Instruct模型进行Lora微调;2.新增merge_model.py 文件对微调后的模型进行合并; 3.将RAG中的模型替换为微调后的模型。 对搜集的9978条QA对进行微调在A100-PCIE-40GB(40GB)单卡模型下耗时2.5小时,一共训练了3个epoch, batch_size为4,结果显示Traning loss 和 Evaluation loss 曲线总体上呈现持续下降,Traning loss从一开始的2.9左右持续下降到0.5,Evaluation loss 从1.5左右持续下降到了0.3。最终在测试时,微调后RAG系统回答的更加精准以及简洁。

新增对微调前后的Qwen模型进行评估,评估指标为Precision、F1和幻觉率。
1.data_extract/generate_test_data.py: 使用Qwen-3-8B模型生成测试集数据保存在data_extract/chinese_history_test.json文件中 
2. evaluation.py:对微调前面的模型进行评估。 
3.eval/precision_F1_eval.py : 编写函数读取微调前后的模型,对测试集问题进行推理,并使用bret_score模块评估precision和F1。 
4.eval/hallucination_eval.py:采用 LLM-as-a-Judge评估微调前和微调后的幻觉率,编写函数使用Qwen-3-8B模型,对微调前后模型生成的内容进行幻觉率判断。 
实验结果表明微调后模型在测试集上的precision从原来的0.5946提升到了0.6721,F1分数从原来的0.6483提升到了0.7030。 但幻觉率没有显著提升。相关结果截图可到个人仓库查看。 后续的迭代,可以调整微调策略,使得模型在历史领域的准确率更高,并想办法减小模型的幻觉率。
@renhaodong1011
Copy link
Copy Markdown
Author

新增对微调前后的Qwen模型进行评估,评估指标为Precision、F1和幻觉率。
新增四个.py文件,具体作用可进入个人仓库详细查看。
实验结果表明微调后模型在测试集上的precision从原来的0.5946提升到了0.6721,F1分数从原来的0.6483提升到了0.7030。 但幻觉率没有显著提升。相关结果截图可到个人仓库查看。 后续的迭代,可以调整微调策略,使得模型在历史领域的准确率更高,并想办法减小模型的幻觉率。

第四次迭代尝试了新增测试集数据,从原先的100条测试集数据新增到280条,并修改幻觉率检测的prompt,之前的prompt认为模型回答的完全正确才会认为没有幻觉,修改后认为基本上正确没有事实性错误则没有幻觉。最终结果微调后模型在测试集上的precision从原来的0.6088提升到了0.6855,F1分数从原来的0.6561提升到了0.7080。 但幻觉率微调前为0.175,微调后为0.232。 目前怀疑有可能在微调时训练的轮数过多,导致模型存在过拟合的现象,后续将调整微调策略,看是否可以有效降低幻觉率,并进一步提高历史专业领域的precision和F1。
@renhaodong1011
Copy link
Copy Markdown
Author

第四次迭代尝试了新增测试集数据,从原先的100条测试集数据新增到280条,并修改幻觉率检测的prompt,之前的prompt认为模型回答的完全正确才会认为没有幻觉,修改后认为基本上正确没有事实性错误则没有幻觉。最终结果微调后模型在测试集上的precision从原来的0.6088提升到了0.6855,F1分数从原来的0.6561提升到了0.7080。 但幻觉率微调前为0.175,微调后为0.232。 目前怀疑有可能在微调时训练的轮数过多,导致模型存在过拟合的现象,后续将调整微调策略,看是否可以有效降低幻觉率,并进一步提高历史专业领域的precision和F1。

@renhaodong1011
Copy link
Copy Markdown
Author

第五次迭代,使用了更强大的Qwen2.5-32B-Instruct模型,重新生成了QA对,并划分了训练集和测试集。生成的训练集QA对为14000条,测试集QA对150条。并在MAX_SEQ_LENGTH=1024,R=64,LORA_ALPHA=128的配置下重新微调了模型。完善了评估模块,对于precision,recall,f1等指标,舍弃了之前使用的bret_score方法,采用词级无序 F1 评估方法并加上LLM-judge方法进行修正。最终得到的结果为precision指标从0.526上升到了0.766, recall指标从0.669上升到了0.820, f1指标从0.566上升到了0.807,且幻觉率从微调前的0.2下降到0.107。

@renhaodong1011
Copy link
Copy Markdown
Author

第六次迭代,重新考虑了chunking策略,采用RecursiveCharacterTextSplitter(chunk_size=800 chars, overlap=100)的策略,其优点为:递归按层级分隔符(默认 \n\n → \n → 空格 → 字符)切割,尽量保持段落/句子完整,避免随意断句。实现简单、速度快、计算开销低。overlap=100(约12.5%)能有效防止上下文跨 chunk 丢失。适合叙述性历史文本(如纪传体、编年体)。并考虑使用了分层/父子 Chunking策略,先切大parent chunk(完整章节/事件,1000-2000 token),再切小 child chunk(200-500 token)用于检索。检索时先找 child,再返回对应 parent 提供完整上下文。 并将RAG系统中的Qwen-2.5-7B模型换成了微调后的模型。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant