一直说话的模型,会同时犯三个错误
体育解说模型最容易犯的错误不是说错一句话,而是它根本不知道什么时候不该说话。把一个能流畅描述画面的多模态大模型接到直播流上,每隔两秒让它“看一眼、说一句”,跑起来很像那么回事,但听上十分钟就会发现:它在解释一次普通回传时,前场已经打出了一脚射门;它刚讲完“红队正在组织进攻”,观众席已经爆发出欢呼;语音还没播完,比分牌上的数字又变了。
这些问题可以归成三类。第一,压住现场声音。体育直播的信息量有相当一部分在现场声里:哨声、击球声、观众突然的抽气声。解说如果每一秒都在填满,这些声音就成了背景噪音,听众也失去了自己感受比赛的空间。第二,错过真正关键的事件。语音是串行的,一句话占用四秒,这四秒里发生的事情要么排队、要么丢掉;模型花四秒讲一次界外球,禁区里的争抢就没有位置了。第三,描述已经过去的画面。生成需要时间,合成语音需要时间,播放也需要时间,等一句话说出口,它讲的已经不是此刻。
三个错误有同一个来源:把解说当成“看到什么就说什么”的连续生成任务,而没有把“开口”当作一个需要决策的动作。半岛体育研究实时解说时,先把问题拆成两个独立的判断:现在该不该说,以及该说哪件事。前者是时机问题,后者才是语言问题。下文按这个顺序展开,中间放一段模拟时间线,最后写出目前仍然做不好的地方。
先弄清发生了什么:事件层比语言层更重要
说话之前必须有可说的东西。这一层的输入不是原始视频帧,而是几路专用模块整理后的事件流:视觉模块给出球员与球的位置、轨迹和动作类别;OCR 读取比分牌和比赛时钟;音频模块判断哨声、观众声浪和击球声;如果有结构化赛事数据,还会带上换人、角球、任意球这类已经确认的记录。这些信号被归并成带时间戳的事件,每个事件有类型、涉及对象、置信度,以及“证据来自哪几路”。各路信号如何分工、如何互相纠错,可以看多模态体育大模型的输入设计。
事件层还要做一件容易被忽略的事:给事件定优先级。同样是“有人触球”,中场回传和禁区内射门显然不在一个量级。一种可行的做法,是把优先级拆成几个可解释的因子:事件类型的基础分(进球、点球、红牌最高,射门、扑救、关键拦截次之,普通传球最低),加上比赛阶段修正(终场前的一次抢断比开场更重要),再加上比分差修正。优先级的意义不在于显得聪明,而是给时机判断提供一个可以比较的数:当模型正在说一句低优先级的话,一个高优先级事件到来,应该有明确规则决定是否打断。
事件层的另一个作用,是把“不确定”显式化。球员被遮挡、机位切到远景、时钟被字幕盖住时,事件的置信度会下降。语言层拿到的不是一句“7号射门”,而是“疑似射门,置信度偏低,球员编号未识别”。这个差别直接决定模型是说“7号打门”还是说“他起脚了”。
什么时候说:三个判断和一个“预计说完”的时钟
时机决策可以写成三个连续的问题。第一,此刻有没有值得说的事件,也就是事件队列里最高优先级是否超过阈值;第二,上一句话说完了吗;第三,现在开口会不会盖住比解说更重要的现场声。前两个是硬条件,第三个是软条件。
第二个问题最有意思。固定间隔,比如每三秒生成一次,问题在于它不认识“上一句话有多长”。一句二十个字的话,按正常语速要说四到五秒,三秒间隔必然让新句子与旧句子重叠或排队。近期公开研究提出的做法,是根据上一句话的预计说话时长动态推迟下一次生成,也就是暂停感知(pause-aware):句子一生成,就估计它的播放时长,把下一次生成的最早时刻设在“预计说完之后再加一个短暂停顿”。我们在设计里沿用这个思路,并补了两点:一是时长估计用语速的保守区间而不是平均值,宁可略晚,不要重叠;二是间隔不是死的,遇到高优先级事件可以提前打断。
打断本身有代价。中途截断一句话会让语音听上去突兀,所以规则要严:只有事件优先级足够高、并且当前这句话还剩下相当比例没说完时才打断;如果这句话快说完了,就等它自然结束,新事件排在下一句最前面。第三个问题由音频模块提供依据:观众声浪正在上升、哨声刚响或球刚被击中时,解说应当让出一两秒,让听众直接听到比赛。让多久合适,属于需要用真实听众反馈调整的参数,目前还没有可以下结论的数据。
一段模拟时间线:26秒里,模型说了什么,没说什么
| 时间 | 场上与声音 | 事件层输出 | 模型的决定 |
|---|---|---|---|
| 0:00–0:04 | 蓝队后场来回倒脚,声浪平稳 | 普通传球,优先级低 | 说一句短句“蓝队在后场倒球”,预计播放约2.5秒 |
| 0:04–0:08 | 倒脚继续 | 同类事件重复 | 不说:没有新信息,重复只会占用现场声 |
| 0:08–0:12 | 蓝队中场断球,声浪略升 | 抢断,中优先级 | 说“蓝队中圈附近断球,转入反击”,预计约3.5秒 |
| 0:12–0:15 | 蓝队快速推进,球到前场 | 推进,中优先级 | 丢弃:句子生成加合成约需1.5秒,出口时球已到禁区外,这句话已过期 |
| 0:15–0:18 | 蓝队9号禁区外起脚,声浪骤升 | 疑似射门,置信度偏低,编号未识别 | 高优先级,上一句已结束,说低承诺短句“起脚了”,不提编号和结果 |
| 0:18–0:21 | 守门员扑出,白队解围,全场声浪很大 | 扑救,高优先级,置信度高 | 先让出约1秒现场声,再说“门将扑出来了” |
| 0:21–0:26 | 画面切入慢动作回放,比分牌样式改变 | 回放标记,比分未变 | 不描述回放里的动作为新事件,只等画面回到直播 |
这条时间线里,模型在26秒内开口四次,其余时间保持沉默,这正是设计目标。有三处值得停下来看。第一,0:04 的沉默比开口更难:重复的低优先级事件没有新信息,说出来只会压住现场声。第二,0:12 那句被丢弃的话,代价是少说一句,收益是不讲过期内容;如果强行播出,听众会听到“转入推进”的时候,画面里已经是射门。第三,0:15 的措辞:置信度偏低时,模型只说“起脚了”,既不报编号也不报结果,等 0:18 有了更确定的证据再说扑救。
说什么:让语言层只做翻译,不做判断
语言生成放在决策之后,输入被严格限制:事件层给出的最多三个待说事件(含优先级和置信度)、当前比分与时钟、最近说过的两三句话、风格设置,以及一个字数预算。语言层的任务是把这些结构化信息翻成自然的短句,而不是自己判断场上发生了什么。字数预算与事件间距挂钩:事件密集时只给几个字,事件稀疏时可以多说一点背景。
有几条约束值得单独写出来。措辞与置信度绑定:高置信度可以用确定的动词,中等置信度用“似乎”“看起来”一类说法,低置信度只描述动作而不描述结果。避免重复:把最近说过的句子作为负面参照,防止连续三句都是“某队控球”。句式偏短:短句可以在被打断时自然收束,长句被截断则会留下半句话。至于专业、简洁、情绪这类风格,是叠加在事实之上的一层,怎么在不改变事实的前提下调整语气,在解说风格控制里单独讨论。
延迟与上下文:一句正确的话,也可能是错的
从球被踢出去到听众听到解说,中间隔着采集、编码、识别、事件归并、文本生成、语音合成和播放几段。每一段单独看都不长,几百毫秒到一两秒,累加起来往往是几秒。这意味着模型永远在讲“稍早一点”的比赛。应对办法不是假装没有延迟,而是让内容适应延迟:优先说已经确定、短时间内不会被推翻的事实,用结果态和过去时;对“眼看就要射门”这种预测性说法保持克制,因为几秒后它很可能已经成为错话。各环节的延迟怎么拆、哪些可以并行,可以看解说延迟的拆解。
另一半是上下文的保鲜。模型每次生成前,都要用最新事件和最新比分重新“对表”,如果比分在排队期间变了,旧的句子计划整体作废,而不是改几个字继续用。这条规则看似朴素,却是避免“比分变了还在讲上一个回合”的关键,相关机制在过期上下文一文里有更细的展开。
事实一致性:宁可少说,不要说错
语言模型擅长补全,而补全在解说里恰恰是风险:它会顺手写出“他今天状态火热”这种没有任何证据的句子,或者把上一场的说法带进这一场。因此事实约束放在出口而不是入口。比分与比赛时钟以 OCR 和结构化数据为准,不允许语言层自己推算;球员编号和名字只在识别置信度足够、并能与名单对上时才说,否则退回“蓝队一名前锋”这类指代;生成之后再做一次核对,把句子里能被检验的断言(比分、方向、谁持球、是否犯规)抽出来与事件层对照,不一致就重写或直接丢弃。
代价是延迟:出口核对会多花几百毫秒,所以只对高风险断言做,比如比分、犯规、红黄牌,对“传球”“跑位”这类低风险描述放宽。因果和情绪推断默认不说,除非事件层里有证据支撑,例如上一分钟刚发生过的失误。这样做会让解说显得克制,但对体育内容来说,一句说错的比分比一秒钟沉默糟糕得多。
一个失败案例:把回放当成了直播
模拟时间线里的 0:21 藏着一个真实系统里很典型的失败。早期的做法里,视觉模型看到回放画面里的射门和扑救,转播混音里的现场声又还在,模型就当成了新事件,于是说出“又是一脚射门”。实际上,那是刚才那次扑救的慢动作。听众会立刻感觉到:解说在编故事。
问题出在事件层缺少“这是不是直播画面”的判断。修正办法是增加回放检测:慢动作导致的帧间运动异常、转场特效或台标闪现、比分牌样式变化,都可以作为回放的证据;一旦判定为回放,模型进入“回顾模式”,只允许用“刚才那次扑救”这样的指代,不再产生新事件,也不改动比分记录。这个检测并不完美,转播导演用快切代替明显转场时,模型仍然可能在前一两秒里判断错误,因此我们把回放检测的置信度也传给语言层,低于阈值时同样用低承诺措辞。
目前做不好的地方
说清限制比展示演示更重要。首先,多个事件几乎同时发生时的排序仍然粗糙:一次射门、一次犯规和一次换人提示挤在同一秒,优先级公式给出的顺序未必符合听众的直觉。其次,节奏带有很强的主观性:“闭嘴多久合适”因运动项目而异,篮球的回合更快,间隔要更短;因听众而异,熟悉比赛的人希望少一点解释,新手则需要更多背景。我们目前只能提供可调参数,没有一个放之四海皆准的数值。
再者,评测本身缺少公认的指标。流畅度、事实准确率和时机合适度三个维度互相牵制,把间隔调长会提高准确率却损失信息量,调短则相反;公开的体育解说基准刚刚出现,覆盖的项目和场景还有限,我们不能据此说系统在真实转播中表现如何。最后,远景机位、低画质、强遮挡下的事件识别本来就不稳,事件层出错,语言层再克制也只是在错误的输入上说得更谨慎。
如果只保留一个判断标准,那就是:听众不看画面,能不能跟上比赛,同时还听得到现场?能做到这一点的解说,一定是既知道说什么,也知道什么时候不说的。