【ChatGPT原理与应用开发】第六章:工程实践
原文链接:HuggingLLM(ChatGPT原理与应用开发)-课程详情 | Datawhale
此处仅为学习记录和总结
6:工程实践------真实场景大不同
6.1:评测:决定是否上线的标准
评测的原因
测试的内容:对产品的各个功能进行各种各样的测试,以保证其功能正常、符合预期
算法模型的评测内容
-
模型输出的内容是否符合我们的预期目标
-
使用尽量和真实场景接近,且不在训练集中的数据
NLU(分类)常用评测指标
🤔指标衡量
- 精准率(precision,P)
- 召回率(recall,R)
- F1
测试结果的混淆矩阵:
真实情况 | 预测结果正例 | 预测结果负例 |
---|---|---|
正例 | 真正例(true positive,TP) | 假负例(false negative,FN) |
负例 | 假正例(false positive,FP) | 真负例(true negative,TN) |
precision的计算公式
P = T P T P + F P P = \frac{TP}{TP+FP} P=TP+FPTP
recall的计算公式
R = T P T P + F N R=\frac{TP}{TP+FN} R=TP+FNTP
F1的计算公式
F 1 = 2 P R P + R F1=\frac{2PR}{P+R} F1=P+R2PR
🤔P和R的关系
- precision和recall是权衡关系,提高精准率会降低召回率
- F1综合考虑了P和R
多分类,需要分别计算每一个类别的指标,然后综合
🤔综合的方法
- macro方法:先计算每个类别的精准率和召回率,取平均后,再计算F1
- 适用情况:各个类别的重要性相对平衡(即:每个类别平等)
- micro方法:先计算混淆矩阵元素的平均,再计算精准率、召回率和F1
- 适用情况:更关心总体性能,而不是每个类别的性能(即:每个样本平等)
NLG(生成)常用评测指标
有参考答案的任务:计算生成的内容与参考答案之间的相似度
🤔token粒度的评估方法
- 语义:BETRScore
- 借助BERT预训练模型,计算token的Embedding
- 计算生成的内容和参考答案token之间的相似度
- 计算精准率和召回率
- 字面量:BLEU、ROUGE
- 按照字面量是否完全相同进行比较(N-Gram)
- BLEU:衡量有多少个生成内容的Gram出现在参考答案中(类似precision)
- ROUGE:衡量多少个参考答案的Gram出现在生成内容中(类似recall)
没有参考答案的任务:需要人工进行评估,设计评价指标和标准
🤔标准的考虑因素
- 准确性
- 流畅性
- 生动性
6.2:安全:必须认真对待的话题
安全:模型生成的内容不应该包含任何偏见、敏感、风险等内容
前后处理
前处理:将用户的输入传递给模型前,先通过一个模块或外部接口进行风险检查
- 如果检测到风险内容,则直接返回预设好的回复,不再传给模型接口生成回复
后处理:对模型生成的内容进行风险检查
- 如果检测到风险内容,则将该内容屏蔽,或直接返回预设好的回复
如果是流式输出,由于token是一个一个输出的,可能需要在一句话结束时就对其进行风险检查
提示词
🤔通过提示词控制生成内容
- 限制其必须基于给定上下文内容进行回复
- 限制输出长度
可控生成
可控文本生成(controllable text generation,CTG):如何控制模型的输出让其更加可控,即输出我们想要的,不输出我们不想要的
🤔可控文本生成的分类
- 使用控制Token
- 在文本开头增加一个控制生成属性的Token
- 使用控制模型
- 在生成过程中,使用一个或多个属性分类器对生成过程进行引导
- 使用反馈控制
- RLHF
🤔辅助方案
- 增加消息撤回机制
- 对用户账号进行严格管控
- 留存所有的对话和消息记录,以备事后查验
6.3:网络:接口调用并不总是成功
失败
网络请求失败 => 重试
熔断机制:当失败次数达到某个阈值时,将此服务进行熔断,直接返回预设好的响应或者干脆拒绝请求
服务降级:返回一个简化版本的处理
延迟
延迟:接口没有在给定时间内给出响应,但又不会超时失败
🤔流式输出常用的服务端方案
- SSE(server-sent events)
- 基于HTTP的单向通信技术,允许服务器向客户端发送持续的事件流
- 适用情况:服务端向客户端持续发送数据
- WebSocket
- 双工通信技术,允许客户端和服务器建立双向通信通道
- 适用情况:客户端和服务器实时交互
🤔延迟的解决方法
- 针对不同的需求选择不同规模的模型
- 配置"停止序列"参数,及时结束模型的输出
- 使用流式输出
- 使用缓存
扩展
扩展 => 高并发的场景
🤔服务扩展的基本情况了解
- 了解基本情况和需求
- 日均调用次数、日调用峰值、平均并发数、最大并发数、期望平均响应时长、是否可以使用缓存
- 了解大模型服务商的相关政策
- 不同模型、不同类型账号的限制
资源池模块:统一管理账号资源,负责资源调度
批量(batch)模式:一次发送多条请求,同时获取这些请求的响应
- 在用户请求和请求大模型服务商接口之间做一层处理:合并用户请求,批量一次向大模型服务商发起请求,收到反馈后分发到对应的用户请求响应上
- 维护一个队列和最小请求间隔时间,在最小请求间隔时间内,固定窗口大小的请求同时出队进行批量请求