个人简介
作者简介:全栈研发,具备端到端系统落地能力,专注大模型的压缩部署、多模态理解与 Agent 架构设计。 热爱“结构”与“秩序”,相信复杂系统背后总有简洁可控的可能。
我叫观熵。不是在控熵,就是在观测熵的流动
个人主页:观熵
个人邮箱:privatexxxx@163.com
座右铭:愿科技之光,不止照亮智能,也照亮人心!
专栏导航
观熵系列专栏导航:
AI前沿探索:从大模型进化、多模态交互、AIGC内容生成,到AI在行业中的落地应用,我们将深入剖析最前沿的AI技术,分享实用的开发经验,并探讨AI未来的发展趋势
AI开源框架实战:面向 AI 工程师的大模型框架实战指南,覆盖训练、推理、部署与评估的全链路最佳实践
计算机视觉:聚焦计算机视觉前沿技术,涵盖图像识别、目标检测、自动驾驶、医疗影像等领域的最新进展和应用案例
国产大模型部署实战:持续更新的国产开源大模型部署实战教程,覆盖从 模型选型 → 环境配置 → 本地推理 → API封装 → 高性能部署 → 多模型管理 的完整全流程
TensorFlow 全栈实战:从建模到部署:覆盖模型构建、训练优化、跨平台部署与工程交付,帮助开发者掌握从原型到上线的完整 AI 开发流程
PyTorch 全栈实战专栏: PyTorch 框架的全栈实战应用,涵盖从模型训练、优化、部署到维护的完整流程
深入理解 TensorRT:深入解析 TensorRT 的核心机制与部署实践,助力构建高性能 AI 推理系统
Megatron-LM 实战笔记:聚焦于 Megatron-LM 框架的实战应用,涵盖从预训练、微调到部署的全流程
AI Agent:系统学习并亲手构建一个完整的 AI Agent 系统,从基础理论、算法实战、框架应用,到私有部署、多端集成
DeepSeek 实战与解析:聚焦 DeepSeek 系列模型原理解析与实战应用,涵盖部署、推理、微调与多场景集成,助你高效上手国产大模型
端侧大模型:聚焦大模型在移动设备上的部署与优化,探索端侧智能的实现路径
行业大模型 · 数据全流程指南:大模型预训练数据的设计、采集、清洗与合规治理,聚焦行业场景,从需求定义到数据闭环,帮助您构建专属的智能数据基座
机器人研发全栈进阶指南:从ROS到AI智能控制:机器人系统架构、感知建图、路径规划、控制系统、AI智能决策、系统集成等核心能力模块
人工智能下的网络安全:通过实战案例和系统化方法,帮助开发者和安全工程师识别风险、构建防御机制,确保 AI 系统的稳定与安全
智能 DevOps 工厂:AI 驱动的持续交付实践:构建以 AI 为核心的智能 DevOps 平台,涵盖从 CI/CD 流水线、AIOps、MLOps 到 DevSecOps 的全流程实践。
C++学习笔记?:聚焦于现代 C++ 编程的核心概念与实践,涵盖 STL 源码剖析、内存管理、模板元编程等关键技术
AI × Quant 系统化落地实战:从数据、策略到实盘,打造全栈智能量化交易系统
大模型运营专家的Prompt修炼之路:本专栏聚焦开发 / 测试人员的实际转型路径,基于 OpenAI、DeepSeek、抖音等真实资料,拆解 从入门到专业落地的关键主题,涵盖 Prompt 编写范式、结构输出控制、模型行为评估、系统接入与 DevOps 管理。每一篇都不讲概念空话,只做实战经验沉淀,让你一步步成为真正的模型运营专家。
🧪 微调后模型效果评估全指南:指标 × 工具 × 多版本对比 × 打分技巧
✅ 第一章:为什么“训练成功”≠“效果达标”?你真的评估了吗?
很多人训练完 LoRA / QLoRA 模型后,第一件事是:
“跑通了!”、“能回答了!”、“显存用得很省!”
但我想说:
⚠️ 能回答 ≠ 回答得对
⚠️ 能跑完 ≠ 真的有用
⚠️ Loss 降低 ≠ 用户满意
🧠 常见错觉举例
表面现象 | 潜在问题 |
---|---|
“回答看着还行” | 实际上答非所问 / 格式不对 / 风格不稳 |
“在我写的几个 prompt 上都能答” | 可能只是记住了样本,不具备泛化能力 |
“Loss 已经很低了” | 模型可能在过拟合无效数据 |
“回答中用了关键词” | 但逻辑混乱 / 结构不清晰 |
📌 真正的目标是:“我的模型是否在目标任务上做得更好?”
所以你不能只看训练日志,更要有系统的评估方法,量化“效果到底有没有提升”。
✅ 第二章:中文场景下推荐的微调效果评估维度与标准
在实际项目里,尤其是中文私有化场景(客服问答、助手模型、垂类QA),我们建议至少从这5个核心维度来评估效果:
✅ 1. 准确性(正确回答 vs 答非所问)
- 判断模型是否理解了问题,并给出了合适的响应
- 特别适用于FAQ / 技术问答 / 企业知识库场景
📝 评估方式:
☑️ 问题和答案是否构成合理的逻辑闭环
☑️ 是否套用了错误模板 / 夸张 / 胡说八道
✅ 2. 覆盖性 / 召回率(信息是否回答完整)
- 如果问题问了 3 点,只答了 1 点,那就是覆盖不足
- 特别适合用于内容生成 / 报告辅助任务
📝 示例评分:
问题 | 模型回答 | 是否覆盖全部信息? |
---|---|---|
介绍产品三大优势 | 回答只提了两个 | ❌ 不及格 |
问开放时间和入口 | 回答完整 + 引导入口 | ✅ 合格 |
✅ 3. 风格一致性 / 角色扮演能力
- 回答是否符合“客服风格 / 专业文风 / 亲切对话体”等预期
- 这是微调最常见的目标之一(语言风格迁移)
📝 快速判断方式:
是否频繁变成“百科口吻”?是否夹杂模板化用语?
✅ 4. 结构清晰 / 格式合规性
- 回答是否分点、分段、按你设定的格式输出
- 特别关键:报表输出、摘要、结构化生成任务
📝 举例:
- 问:“请分点列出功能” → 返回段落文字 → ❌
- 问:“请写一句话摘要” → 返回 300 字 → ❌
✅ 5. 语言通顺 / 中文流畅度
- 回答是否语句顺滑,无翻译腔,无奇怪词语
- 中文大模型偶尔会“英文直译中文”,需检查
📝 示例:
“我们产品致力于为用户达成最大化价值获取路径。” ← ❌ 听起来像论文机器人
“我们的产品能帮你省时间、降成本、提效率。” ← ✅ 简洁通俗
📌 进阶可选维度(大项目 / 测试阶段)
维度 | 场景 |
---|---|
一致性(是否自洽) | 多轮对话 / 连贯问答 |
毒性检测(有无敏感词) | 上线前风控检测 |
模型偏差(是否答复不当) | 垂类任务如金融、医疗 |
✅ 第三章:自动化评估指标详解(BLEU / ROUGE / GPTScore / 中文任务实用推荐)
自动化评估指标的好处是:
✅ 快、批量、客观、可复用
但也存在两个常见问题:
- ❌ 英文场景居多,中文适配差
- ❌ 无法判断“回答对不对,只看像不像”
所以,我们要用对指标,别“迷信数字”。
📏 1. BLEU(机器翻译老大哥)
核心思想:回答越接近参考答案的 n-gram 片段,得分越高
适合场景:
- 固定模板类任务(如 QA 答案、摘要)
- 多个候选答案相似度评估
from nltk.translate.bleu_score import sentence_bleu
ref = ["我们", "支持", "微信", "支付"]
pred = ["我们", "支持", "支付宝", "微信"]
score = sentence_bleu([ref], pred) # 输出 0~1 之间
📌 不适合风格评估、多轮对话、自由生成任务。
📏 2. ROUGE(中文摘要 / QA推荐)
核心思想:看预测文本和参考答案之间有多少“共同子序列”
适合场景:
- 中文摘要生成评估
- 中文 QA 回答内容覆盖率判断
from rouge import Rouge
rouge = Rouge()
scores = rouge.get_scores(hypothesis="我们支持微信支付", references="本系统支持微信和支付宝")
print(scores)
推荐用 ROUGE-1(字级别)和 ROUGE-L(最长公共子序列)
📏 3. GPTScore(通用大模型打分)
GPTScore 或 LLMScore 是指:
使用一个强大的大模型(如 ChatGPT 或国产对齐模型),来评分你的输出 vs 参考答案之间的差异
思路是:
- 构造评分 prompt
- 调用模型打分(如 1~5 分)
💡 示例(Qwen/DeepSeek 也能做):
请你作为评估员,判断下面两个回答中,哪一个更符合问题要求,并给出1~5的评分。
【问题】:你们支持哪些支付方式?
【回答】:我们支持微信和支付宝。
【参考答案】:我们目前支持微信、支付宝和银联。
请打分,并说明理由:
📌 适合精调后快速评估效果,也适合训练中选优 / 多模型比较
📏 4. 关键词覆盖率(适合私域问答 / 企业知识)
对中文模型非常实用:判断回答中是否提到了你希望包含的关键词。
def keyword_hit_ratio(answer, keywords):
hit = sum([1 for k in keywords if k in answer])
return hit / len(keywords)
✔️ 简单粗暴,适合用于业务侧对齐度评估
✔️ 适合 CI 验收标准
📊 实测推荐:指标组合建议(按任务场景)
场景 | 推荐指标组合 |
---|---|
中文摘要生成 | ROUGE-1 + ROUGE-L |
固定 QA(参考答案明确) | BLEU + GPTScore |
多版本模型打分 | GPTScore + 关键词覆盖率 |
企业文档对齐 | Keyword match + BLEU(辅助) |
对话连贯性 | GPT打分(需构造 prompt) |
技术问答助手 | GPTScore + 专有术语覆盖率 |
✅ 第四章:人审策略 × 主观打分模版 × WinRate设计方法
虽然自动化指标能批量处理,但你肯定会遇到这些情况:
- “看起来 BLEU 分很高,但回答根本没讲重点”
- “两个模型打分差不多,实际用下来明显一个更好”
- “客户体验好不好,根本不是分能说清的”
✅ 所以必须有人参与评审,这就是“人审 + 打分”。
🎯 常见人审目标
目的 | 设计方式 |
---|---|
比较两个模型谁更好 | A/B测试,打 WinRate 胜率 |
验证模型是否能稳定回答 | 单模型多样本评分,评估波动 |
检查风格/语气/格式是否稳定 | 主观评分维度设计(见下) |
作为训练选优数据过滤器 | 先人工筛掉低质样本再训 |
✅ 人审推荐方式一:三维主观打分法
你可以设计一个简单但实用的三维评分模版,比如下面这样:
维度 | 说明 | 分数范围 |
---|---|---|
准确性 | 回答是否答到点子上 | 1~5 |
表达清晰度 | 语言是否流畅,结构清楚 | 1~5 |
风格匹配 | 是否符合预期语气/角色 | 1~5 |
👉 总分:15分,建议打整数(更快)
✅ Excel 模板(样例)
序号 | 问题 | 模型回答 | 准确性 | 表达清晰度 | 风格匹配 | 总分 |
---|---|---|---|---|---|---|
001 | “怎么开发票?” | “您好,请在财务系统申请。” | 4 | 5 | 5 | 14 |
📌 模板可复用,适合内部验收 × 发布评估
✅ 人审推荐方式二:A/B对比 + WinRate 胜率法
如果你有两个模型版本要对比(如原始模型 vs 微调后、LoRA vs QLoRA),可以用这种方式:
✨ 流程:
- 选定同一组问题(建议30~100条)
- 两个模型都跑一遍,分别记录回答
- 人工打分:对于每个问题,标注是A好还是B好
- 最终统计:
胜率 = A赢的样本数 / 有效样本数(去除平局)
📊 示例统计表:
问题ID | A回答 | B回答 | 哪个更好 |
---|---|---|---|
Q001 | “我们支持微信” | “您好,我们支持微信和支付宝” | B |
Q002 | “请点发票按钮” | “请登录财务系统点击发票” | 平局 |
Q003 | … | … | A |
结果:
- A胜:10
- B胜:15
- 平局:5
- 有效样本:25
- WinRate(B)= 60%
📌 通常认为 WinRate > 65% 才说明明显提升
✅ 小团队快速评审建议
人数 | 建议流程 |
---|---|
1人 | 打三维分 + WinRate(快但偏主观) |
2人 | 分别打分,做平均或投票 |
3人+ | 建议设置“仲裁人”处理意见分歧 |
✅ 第五章:多版本模型评估对比方案(原始 / LoRA / QLoRA)
你有没有这样的经历?
“微调前模型就能答,那我干嘛训练?”
“LoRA 微调之后好像更啰嗦了?”
“不同模型版本哪个风格更稳定?”
要搞清这些问题,不能靠直觉,你需要结构化地做多版本对比。
🎯 常见对比场景
对比目的 | 版本组合 |
---|---|
验证训练是否有效 | 原始模型 vs LoRA精调版 |
判断轻量方案优劣 | LoRA vs QLoRA |
选择参数规模 | Qwen-7B vs Qwen-14B |
对比多轮连贯性 | 模型A vs 模型B 多轮任务 |
接口风格选择 | Qwen vs DeepSeek vs InternLM |
✅ 多版本对比流程推荐(5 步法)
✅ Step 1:统一输入问题集
- 类型建议:常规 QA、指令式 prompt、多轮上下文
- 数量建议:最少 30 条,多版本建议 50~100 条
[
{"id": "Q001", "prompt": "请用三句话介绍你们的产品优势"},
{"id": "Q002", "prompt": "发票在哪里申请?"},
{"id": "Q003", "prompt": "请列出三条节省运营成本的方法"}
]
✅ Step 2:分别跑模型输出结果(保存为 JSONL)
{
"id": "Q001",
"original": "我们的产品旨在为用户提供……",
"lora": "您好,我们产品的三大优势是……",
"qlora": "我们有三点优势:……"
}
📌 也可用 pandas 保存为多列 CSV,方便 Excel 或脚本处理
✅ Step 3:设计对比维度(同前章)
推荐维度:
维度 | 说明 |
---|---|
准确性 | 是否答中核心点 |
风格一致性 | 是否符合客服 / 专家 / 助理角色 |
内容覆盖率 | 是否回答得全面 |
表达逻辑 | 回答是否清晰、有结构 |
上下文连贯性(多轮场景) | 是否记住上一轮内容 |
✅ Step 4:打分 or 评优(主观 or LLM 打分)
🧠 人审法:
- 三人小组逐条评审
- 打1~5分 or 投票 A/B 哪个好
- 统计平均得分 or 胜率
🤖 GPTScore 法:
使用大模型打分,示例如下:
请比较以下两个回答,哪一个更符合问题要求?请从准确性、表达清晰度、风格三方面评分(每项1~5分)
【问题】:发票在哪里申请?
【回答A】:请在系统中点击“财务管理”进入发票申请页面。
【回答B】:系统内可以申请。
请评分,并说明理由:
✅ Step 5:结果输出 × 推荐选型
你可以用这个模板输出最终结论👇
模型版本 | 平均得分(满分15) | WinRate胜率 | 推荐备注 |
---|---|---|---|
原始模型 | 10.2 | - | 风格不一致,内容略欠缺 |
LoRA版本 | 13.4 | 72% | 最稳定,推荐使用 |
QLoRA版本 | 13.2 | 28% | 差距小,可在低资源条件下使用 |
✅ 第六章:推荐工具 × 自动评估脚本 × CI 集成评测流程
你已经掌握了手动评估、指标计算、人审打分的方法。
现在我们要进一步,把它“系统化”:
✅ 每次模型微调后能快速评估
✅ 多模型对比自动化处理
✅ 支持 CI/CD 集成,持续监测效果变化
🛠️ 一、推荐工具列表(本地可跑)
工具 | 功能 | 推荐用途 |
---|---|---|
datasets | 统一样本格式 / 加载器 | 输入数据标准化 |
evaluate | HuggingFace 官方指标库 | BLEU、ROUGE、BERTScore 等 |
Excel / pandas | 快速打分 × 可视化输出 | 人审数据汇总 |
Gradio + 人审打分界面 | 搭建评审 UI 界面 | 适合团队评分协作 |
LLM-as-a-Judge (可本地用国产模型) | 模型打分器 | GPTScore 替代方案(支持 Qwen) |
✨ 二、自动打分脚本(BLEU × ROUGE × Keyword)
你可以封装一个多指标打分脚本,适配多个模型版本:
from rouge import Rouge
from nltk.translate.bleu_score import sentence_bleu
import pandas as pd
rouge = Rouge()
def evaluate_row(ref, pred):
bleu = sentence_bleu([ref.split()], pred.split())
rouge_scores = rouge.get_scores(pred, ref)[0]
return {
"bleu": round(bleu, 4),
"rouge-1": round(rouge_scores['rouge-1']['f'], 4),
"rouge-l": round(rouge_scores['rouge-l']['f'], 4)
}
df = pd.read_csv("model_outputs.csv")
results = df.apply(lambda row: evaluate_row(row['reference'], row['prediction']), axis=1)
result_df = pd.concat([df, results.apply(pd.Series)], axis=1)
result_df.to_csv("scored_outputs.csv", index=False)
📌 扩展支持 GPTScore / 中文 LLM 打分:使用 prompt 调用 Qwen 或 DeepSeek 推理服务即可。
⚙️ 三、CI/CD 集成评估建议(面向团队协作)
如果你有模型微调流水线(如用 GitHub Actions、Jenkins、CodeArts),可以集成以下流程:
# 伪流程示意:
- 步骤1:模型训练完成后保存 checkpoint
- 步骤2:调用 API 生成输出(单模型 / 多模型)
- 步骤3:运行自动评估脚本(如 BLEU+ROUGE)
- 步骤4:结果产出 × 保存评估日志
- 步骤5(可选):触发评分低于阈值时发出报警
📌 优点:精调结果不是靠“感觉”,而是每次都可复现 × 可量化
✅ 推荐资源合集
工具包 | 包含内容 |
---|---|
🧪 评估脚本包 | BLEU / ROUGE / GPTScore / keyword 脚本(Python) |
📊 打分模版包 | Excel表 / CSV对比表格 / WinRate打分表 |
🤖 打分Prompt包 | 多轮对话 + 简答 + 抽象生成任务专用打分 prompt(中英文) |
🧰 CI集成说明 | 脚本 + YAML 示例,可在 GitHub Actions / Jenkins 接入 |
📘 小结:这篇你收获了什么?
能力 | 已掌握了吗? |
---|---|
✔️ 明确了训练 ≠ 效果好 | ✅ |
✔️ 了解了中文任务推荐的评估指标 | ✅ |
✔️ 会用 BLEU / ROUGE / GPTScore 打分 | ✅ |
✔️ 能手动评审 × 用 WinRate 分析版本差距 | ✅ |
✔️ 能跑自动脚本 × 甚至 CI 自动评估 | ✅ |
💡 如果你看到这里,我们的频率大概率对上了!
这篇内容我写得比较实在,希望对你在部署国产大模型、搭建多模态服务的路上,真能起到点作用。
如果你觉得有用,或者正好解决了你的一个卡点:
✅ 点个 赞,让我知道你喜欢这类内容
📌 点个 收藏,以后再找就不怕翻记录
🔔 点个 关注,后续还有更多实战、案例、脚本更新不断
你的点赞和留言,是我持续更新的最大动力。有问题欢迎评论区交流,看到都会认真回复 🙌