AI 情感聊天机器人工作之旅 —— 与复读机问题的相遇与别离

前言:先前在杭州的一家大模型公司从事海外闲聊机器人产品,目前已经离职,文章主要讨论在闲聊场景下遇到的“复读机”问题以及一些我个人的思考和解决方案。文章内部已经对相关公司和人员信息做了去敏,如仍涉及到机密等情况,可删除。

meta 开源 Llama2 后,我们立马将基座模型从 Llama1 更换为了 Llama2。很重要的一个原因在于 Llama2 的 context length 是 4k,是 Llama1 的 2 倍,对于日益增长的角色人设 prompt 来说,2k 已经不满足线上产品使用。

在将 base 模型从 Llama1 “升级”到 Llama2 后出现了单句重复问题,该问题也被业界定义为“复读机问题”——模型会在一轮回复中不断重复某一相同或语义相似的子句,直到 max_new_tokens(最大输出长度)。

PS:Llama1 有没有这个问题已经无法追溯,其一,当时还没有在 sentry 查看日志链路的习惯;其二,产品和社区没有反馈该类问题,产品妹子们更多地是反馈多轮重复问题——模型在多轮对话中重复相同的内容。

由于当时尚处于 8 月份,vLLM 框架的集成以及后续将部署服务代码改造成 continuous batching 都仍处于“未来时”,模型直接使用 HuggingFace Transformers 库加载并流式输出。?B 大小的模型,其推理速度在 max_new_tokens = 500 场景下很容易超时(20 秒),即使不超时,也会占用消费者 worker 大量时间,出现消息队列拥堵,因此 sentry 报警的信息非常多,让我们注意到了这个问题。此外,社区与产品也反馈了该问题。

从 9 月 8 日开始,我参与到 BUG 的修复工作中。面对该问题,第一反应是训练数据中是否存在大量的重复,导致模型在训练过程中学到了这种重复的模式?检查了相关的训练数据集,的确发现存在大量重复的语句,用户在不断地说着同样或类似的话,而角色回复的内容也有大量的短语级的重复,再加上我们训练时,只训练角色回复且多 epoch,会强化这一倾向。论文《Understanding In-Context Learning from Repetitions》对表面特征在文本生成中的作用进行了定量研究,并根据经验确定 token 共现强化的存在,任何两个 token 构成一个 token 强化循环,在该循环中,任何两个 token 都可以通过多次重复出现而形成紧密联系。这是一种基于上下文共现强化两个 token 之间关系的原理。

但我们对训练数据集做了去重操作,但上线后仍然存在该问题。也就是说,复读机问题并不是在 SFT 阶段引入,base 模型本身就已经存在该问题,即使我们将 SFT 训练数据集的重复以及相近的数据都过滤,仍然有一定概率会触发。

陆陆续续地尝试了一些方法:

  • 2023 年 9 月 08 日:对比解码的方式不能解决单句生成重复的问题,反而会因为避免生成重复 token 而选择一些“奇怪”的 token,从而生成更加离谱的回复

  • 2023 年 9 月 11 日:另一种方法是在 SFT 阶段用高质量数据继续训练,用更多的“高质量”数据集训练更长时间后,在 42 个单句短语重复的 bad case 上测了下,可以解掉 22 个。
    在这里插入图片描述
    9 月 11 日得出的结论和研究员 4 的结论相同,通过更多的训练数据来让模型 cover 更多 context 下的输出,避免预训练阶段存在的问题(特定 context 下输出分布有问题,导致存在一个子串,反复生成该子串可以提高 PPL,例如成语接龙中“为所欲为”可以不停地循环)。

  • 具体时间已经忘记,当时想到可以调整 prompt 格式。

    • 依据:当前轮的输出会受到历史对话(尤其是最近几轮)的影响,结合大模型的 ICL 能力(多轮对话的格式和 ICL 非常相像,instruction + 多轮用户-角色对,类似 few-shot),推测是 prompt 的影响。
    • 做法:以格式化的方式组织历史对话内容,但该方法与 SFT 阶段的 template 不一致,自研模型在输出时会出现意想不到的现象。后续尝试对历史对话进行总结,然后将总结拼接到 instruction,该方案可以有效地缓解单句重复问题,但成本较高(需要有额外的总结模型)。
    • 本质:仍然是训练数据的问题,使得模型在特定 context 下加剧“复读机”问题。调整 prompt 格式,只是改变了这个 context,使模型有可能跳出这个重复的循环,可以作为一种后处理的方式。例如,当模型的生成出现“复读机”问题时,走 prompt 总结 + 重新生成。

后续,随着预训练组推出更多的 continued pretraining 模型,问题已经得到缓解,更多的持续预训练填补了 Llama2 本身预训练不充分的问题(Llama2 距离 Llama1 发布的时间太短,reddit 上也有不少反映 Llama2 复读机问题的帖子。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/12092.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux学习:多媒体开发库SDL+视频、音频、事件子系统+处理yuv视频源

目录 编译和移植 视频子系统 视频子系统产生图像的步骤 api 初始化 SDL 的相关子系统 使用指定的宽、高和色深来创建一个视窗 surface 使用 fmt 指定的格式创建一个像素点​编辑 将 dst 上的矩形 dstrect 填充为单色 color​编辑 将 src 快速叠加到 dst 上​编辑 更新…

连锁收银系统源代码有哪些功能,进销存+收银+会员+门店补货+线上商城

在现代零售行业,高效的管理系统是保持连锁店运营顺畅的关键。而开源连锁收银系统作为一款功能丰富的管理软件,为零售企业提供了全面的解决方案,涵盖了进销存管理、收银、会员、门店补货以及线上商城等多个方面,帮助企业实现精细化…

C语言判断字符旋转

前言 今天我们使用c语言来写代码来实现字符串选择的判断,我们来看题目 题目描述 写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。 例如:给定s1 AABCD和s2 BCDAA,返回1 给定s1abcd和s2ACBD,返回0. A…

想白嫖?音视频的文本提取和总结?NoteGPT满足你

NoteGPT实现了音频、录音以及视频的AI总结 NoteGPT最近做了一个功能:Audio Summary(Audio Summary with AI - NoteGPT) 1)完全免费; 2)支持mp3、mp4; 3)支持URL和本地上传&…

【UE Niagara】在UI上生成粒子

效果 步骤 1. 在虚幻商城中将“Niagara UI Render”插件安装到引擎 2. 打开虚幻编辑器,勾选插件“Niagara UI Renderer”,然后重启编辑器 3. 先创建一个控件蓝图,该控件蓝图只包含一个按钮 这里设置尺寸框尺寸为200*50 4. 显示该控件 5. 新…

Excel——项目管理,设置时间到期自动提醒及颜色高亮

效果图 第一步、自动获取合同到期日期 1、首先合同【签约日期】和【到期日期】下面的数据必须是日期格式,不能是其它的格式否则无法计算,如果是其它格式需要转换成标准的日期格式,如下图所示。 2、在“到期日期”下面的第一个单元格中输入公…

如何让机器理解人类语言?Embedding技术详解

如何让机器理解人类语言?Embedding技术详解 文章目录 如何让机器理解人类语言?Embedding技术详解介绍什么是词嵌入?什么是句子嵌入?句子嵌入模型实现句子嵌入的方法值得尝试的句子嵌入模型 句子嵌入库实践Step 1Step 2Step 3 Doc2…

GBJ3510-ASEMI室内空调机GBJ3510

编辑:ll GBJ3510-ASEMI室内空调机GBJ3510 型号:GBJ3510 品牌:ASEMI 封装:GBJ-4 最大重复峰值反向电压:1000V 最大正向平均整流电流(Vdss):35A 功率(Pd):中小功率 芯片个数:4…

股东那些事儿:解锁企业背后的权力玩家与盈利秘籍

Hello,大家好啊,今天咱们要聊的主角,是每个企业背后不可或缺的隐形巨擘——股东。他们是谁?他们怎样从公司的经营中分一杯羹?又如何在商业棋盘上运筹帷幄?搬好小板凳,咱们这就开启股东世界的探秘…

Node.js 学习笔记 express框架

express express 使用express下载express 初体验 express 路由什么是路由1路由的使用验证的方法 2获取请求报文参数3获取路由参数4响应设置响应报文 express 中间件5中间件全局中间件路由中间件 6静态资源中间件注意事项案例 7请求体数据8防盗链实现防盗链 9路由模块化router E…

Java——类和对象第二节——封装

1.什么是封装 封装是面向对象程序的三大特性之一,面向对象程序的三大特性分别是封装,继承,多态 而封装简单来说就是套壳隐藏细节 打个比方: 在一些电脑厂商生产电脑时,仅对用户提供开关机键,键盘输入&a…

瑞友科技质量改进服务事业部总经理张力受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 北京瑞友科技股份有限公司质量改进服务事业部总经理张力先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“PMO如何对接战略成为企业IT投资成功的有效保障”。大会将于6月29-30日在北京举办,敬请关注&#x…

一个不知名的开源项目可以带来多少收入

起源 2020 年新冠疫情开始蔓延,当时我在同时经营 3 个不同的公司。除了其中的体育赛事平台因为疫情关门大吉之外,另外两个公司并没有受影响,营收和利润反而都持续增加。但是连续几个月不能出远门,也不能随便见朋友和客户&#xff…

软件测试到了35岁,真的就干不动了吗?

摘要:随着年龄的增长,很多人担心软件测试岗位是否存在技术瓶颈。本文将从零到一,详细且规范地探讨软件测试岗位在35岁后的发展前景,并提供一些建议以应对可能的挑战。 引言:软件测试作为软件开发生命周期中至关重要的…

基于PySpark进行去哪儿网数据分析

基于PySpark进行去哪儿网数据分析 本文介绍了如何使用PySpark对去哪儿网的数据进行分析,从而洞察用户偏好、热门目的地以及销售趋势。 1.数据加载 我们需要确保已经准备好了PySpark的开发环境,并且准备好了去哪儿网的数据集。可以通过创建SparkSessio…

SpringCloudAlibaba:5.1Sentinel的基本使用

概述 简介 Sentinel是阿里开源的项目,提供了流量控制、熔断降级、系统负载保护等多个维度来保障服务之间的稳定性。 官网 https://sentinelguard.io/zh-cn/ Sentinel的历史 2012 年,Sentinel 诞生,主要功能为入口流量控制。 2013-2017 年…

中北机械有限公司将参加2024长三角快递物流供应链与技术装备展览会

参展企业介绍 浙江中北机械有限公司总部位于浙江杭州,生产基地位于浙江桐乡。是一家有着十几年金属制品及仓储物流设施设备生产经验,专业设计、生产、制造各类物流钢制托盘,物流手推车,仓储货架及门店展架,宣传展架等物…

Pytorch读取自己的数据集

数据集 流程图 导包设置tfs创建datasets.ImageFolder创建torch.utils.data.DataLoader() import time import os from tqdm import tqdm import pandas as pd import numpy as np import torch import torchvision import torch.nn as nn import torch.nn.functional as F im…

7天精通Web APIs——正则阶段案例(理论+实战)(第六天)

正则表达式的定义和使用 定义:是一种匹配模式,用于匹配字符串中字符组合 作用:表单验证(匹配)、过滤敏感词(替换)、字符串中提取我们想要的部分(提取) 使用分为两步&…