| 优化方法 | 阶段 | 详细 | 优点 | 缺点 | 应用项目 | 备注 |
|---|---|---|---|---|---|---|
| DPO 算法 | 训练过程 | 结合业务场景构建偏好数据,通过DPO算法对齐偏好。针对重复问题,可按照“chosen无重复,reject重复”的逻辑构造数据。 | 可提高话术质量,提高可用率。 | - 无法完全避免重复问题,仍然存在比较明显重复 - DPO阶段仅对齐话术偏好,可能会影响项目的其他指标(如准确率) | 智能6级FAQ厘清 | 通用数据:中文单轮rlhf数据(huggingface.co… 20k) + 业务数据 |
| 解码时检测历史回复出现的 N-gram | 解码过程 | 解码时结合next token和已生成部分,检测历史回复出现的N-gram(N越大对token概率的惩罚越大)。注:1. 先对logits做归一化后再做惩罚,减少不同LLM分布差异的影响 2. 仅对部分需要惩罚的output片段进行惩罚 | 可有效规避字面重复性问题,减少重复的强弱可通过惩罚项动态调整。相较于repetition penalty,对重复的惩罚更加精准,仅惩罚需要避免重复的内容。 | - 无法从“逻辑”上解决重复询问,只是杜绝了字面重复,模型会换个方式提问而已。 - Friday推理暂不支持复杂的自定义解码流程。且惩罚token概率时仅惩罚output中的部分token,还需要考虑特定的inputs span,通用性不强。 | 智能6级FAQ厘清 | 实验设置:N_gram = 3, n_gram_penalty = 10 惩罚得分=n_gram_penalty * n_grams_frequent |
| 调整提示词,让模型输出可以推动流程的话术 | 提示词调整 | 猜测:话术出现重复的原因是模型对上文的理解不够,遗忘了自己询问过哪些问题,对交互流程的状态不敏感。 做法:在指令中要求模型输出话术前,先判断用户最新的query和对话历史中的关系(首次询问/回复问询/不配合交互),然后结合该判断的结果再输出可以推动流程的话术。 | 可有效提高话术多样性,减少重复比例。且只需要改动提示词即可。 | 对模型的指令遵循能力有要求(要求不高,只需要能按照格式输出) | 智能6级FAQ厘清 | ![]() |
| 构造(不)包含禁止项的训练数据 | 训练+推理 | 成对构造遵循禁止项的训练数据,对于同一份数据(相同的对话上文),使用包含禁止项的prompt构造答案A,再使用不含禁止项的prompt构造答案B。 推理阶段在禁止项中增加禁止重复的命令。 | 灵活性强,推理阶段的禁止项可灵活配置。 | 对指令遵循能力有较高的要求。 | 方案沟通机器人 | |
| 剔除/修正低质量数据 | 训练前 | 筛选SFT训练轮次中的重复话术,计算回复话术和对话历史的最长公共子串作为筛选条件。利用GPT4修复回复话术与对话历史重复内容较多的case,再进行人工质检(或直接剔除重复的训练case) | 当训练集不干净时,经过清洗可有效提高重复问题出现的比例。 | SFT的训练过程仅有正反馈,模型无法真正学到“不能重复”的负反馈。(仅让模型学习不重复的话术,不代表模型学到了不能重复的要求)因此无法根治重复问题。 | 标准问意图厘清拟人化、神会员对话机器人 | |
| 模型生成重复话术后进行后处理 | 线上后处理 | 基于jaccard计算字面相似度,达到重复判断阈值后再次请求一遍,使用以下2种方法 1. 修改提示词,让LLM对第一遍生成的重复内容改写润色或者再Chat一轮让模型reflection 2. 调整decoding args,设置repetition penalty或bad word ids(黑名单词的选取需要考虑重复的关键词) | 可有效提高话术多样性,减少重复比例 | 需要串联请求两次模型 | 神会员对话机器人、托管厘清机器人 | |
| 利用 reflection 机制让 gpt 反思重新构造训练数据 | 训练前 | 通过reflection让GPT4反思第一次结果中违背指令的地方,进行第二次推理,CoT内和指令中的要求有更多的呼应 | 效果比较明显,人工侧厘清机器人的重复比例从8%降至1%(针对重复问题构造了60条左右数据) | 构造训练数据较为繁琐 | 托管厘清机器人 |
