第93分钟的那一声“漂亮”,问题出在哪里
模拟比赛,杯赛决赛,第93分钟,滨江联1比1北港竞技。滨江联右后卫在中线附近抢断后没有急着长传,而是横传给中场,中场一脚直塞找到回撤的替补前锋韩野。韩野背身做球给插上的队友,再在弧顶接回传,左脚低射打进远角。第四官员举牌显示补时4分钟,这时已经过去了3分钟。
一套只会识别“进球事件”的解说系统,此刻会输出“球进了!漂亮!”。这句话没有错,但它在第5轮一场3比0之后的第四个进球上也会被说出来,在点球、乌龙球、远射上也会被说出来。观众听腻的原因不是AI的声音不够激动,而是这句话放在哪一个进球上都成立,等于什么都没说。
真人解说在这一刻至少会同时处理几件事:这是决赛,补时第3分钟,反超意味着对手只剩一次进攻机会;韩野是第71分钟才替补登场的,本赛季联赛只进过2球;这次进攻是从抢断开始的反击,北港竞技为了追求绝杀把两名边翼卫都压了上去。这些信息不需要全部说出口,但解说必须先“知道”,才能决定说哪一句。极速体育的AI解说把这个过程拆成五层:Match State、Event、Context、Tactic、Commentary。
第一层 Match State:先知道现在是什么比赛
Match State是解说的底板,它记录的不是某个瞬间,而是整场比赛到此为止的状态:赛事类型和阶段(联赛第几轮、杯赛第几轮、决赛)、比分、比赛时间和补时、双方红黄牌、剩余换人名额、积分榜上的相对位置。
同一个“1比0”在不同的Match State里分量完全不同。联赛第5轮第30分钟1比0,比赛还剩一个小时,积分榜还没有拉开,解说更合理的语气是描述性的:谁进的、怎么进的、这场比赛的走势是否因此改变。杯赛决赛第93分钟2比1,比赛只剩不到一分钟,丢球一方需要在一次进攻里扳平,解说的重心应该立刻转到“还剩多少时间”“北港竞技的门将会不会冲到前场争顶”。
在系统里,Match State会给每一个事件打上一个重要程度的初始分。这个分数由几个可查的条件组成:比赛阶段,决赛和淘汰赛次回合高于联赛常规轮次;比赛时间,最后10分钟和补时权重更高;比分变化类型,扳平和反超高于扩大领先;积分榜影响,是否涉及争冠、保级、晋级名额。重要程度决定后面每一层投入多少内容:普通事件一两句话带过,关键事件允许解说展开30秒甚至更长。
第二层 Event:把进球拆成可以描述的动作
Event层负责把进球拆成可以描述的动作,而不是一个标签。“进球”这个标签下面至少有这些字段:射门球员、射门脚、射门位置(弧顶、小禁区、点球点附近)、射门方式(低射、推射、凌空、头球)、助攻者、助攻方式(直塞、传中、回做)、进攻开始的地点和方式(阵地战、反击、定位球二点),以及从抢断到射门用了几次传球、几秒钟。
这些字段是解说避免重复的原料。如果系统只知道“进球了”,它能说的只有情绪词;如果它知道“从中线抢断到射门只用了4脚传球、9秒”,它就能说“9秒,4脚传球,从右路抢断一路打到弧顶”,这句话只属于这一个进球。
Event层还要处理不确定性。进球可能随后被视频助理裁判复核取消,射门可能打在防守球员身上折射入网。系统在事件确认之前不能把“精彩的远射”说死。如果视觉识别显示球在途中改变了方向,解说应该先说“球打在防守球员身上变线了”,等数据确认后再说进球归属。解说抢在事实前面,比说得平淡更伤害观众的信任。
第三层 Context:这一球对谁重要
Context回答的是“这一球对谁重要,为什么”。它从三类历史数据里取材。
- 球员历史:韩野本赛季联赛出场14次、首发4次、进2球,第71分钟替补登场,这是他本届杯赛的第一个进球。
- 对阵历史:滨江联和北港竞技上赛季联赛两回合一平一负,上一次在杯赛交手是三年前的四分之一决赛,北港竞技通过点球大战淘汰了滨江联。
- 赛事历史:滨江联上一次进入这项杯赛的决赛是八年前,那一次0比2输球。
Context的难点不在收集,而在筛选。一个进球可以关联几十条历史信息,解说在进球后的十几秒里最多能说两三条。筛选规则很朴素:和当前事件直接相关的优先,替补登场的球员进球,先说他是替补登场;和比赛结果相关的其次,三年前被点球淘汰,这一球可能意味着复仇;纯统计的放在最后,比如本赛季第几个进球。
Context还要避免错误联想。如果韩野三年前还不在滨江联,那场点球大战就和他个人无关,解说可以说“滨江联三年前在这里被点球淘汰”,但不能说“韩野为三年前的失利复仇”。系统会检查每条历史信息的主语是否和当前事件的主体一致。这类检查看起来琐碎,却是解说听起来“懂球”还是“乱编”的分界线。这些故事如何跨比赛保存下来,可以参考AI解说怎样保存以前比赛的故事。
第四层 Tactic:进球是怎么被制造出来的
很多进球不是某个瞬间的灵光,而是前几分钟战术变化的结果。回到第93分钟的场景:北港竞技在第85分钟换上第二名中锋,改成三名中后卫加两名边翼卫的站位,两名边翼卫同时压到对方半场。滨江联右后卫的那次抢断,正是发生在北港竞技左翼卫身后留下的空当里。
Tactic层要能回答几个具体问题:进球前双方的阵型是什么,最近一次换人或阵型调整发生在第几分钟;进攻开始时对方防线站在哪里,是高位还是退守;进攻利用的是哪一块空间,是肋部、边路身后还是两条线之间;节奏是突然加快,还是持续压迫之后的结果。
有了这一层,解说可以在进球后的回放里补一句真正有信息的话:“北港竞技追平心切,两个边翼卫都压上了,滨江联一次抢断就打在了左路身后。”这句话把8分钟前的换人和这个进球连了起来。换人和阵型调整本身应该怎么解说,另一篇文章一个换人为什么值得解说三分钟有更完整的拆解。
战术解释有一个节奏要求:它通常放在回放阶段,而不是进球瞬间。进球瞬间观众要的是事实和情绪,回放时才有耐心听原因。把阵型分析塞进进球后的前三秒,再正确也会被现场的欢呼声淹没。
第五层 Commentary:同一类进球的几种说法
前四层准备好材料以后,Commentary层才决定怎么说。它要处理三件事:说多长、先说什么、用多大的情绪。下面用三个模拟场景对比同一类进球。
| 模拟场景 | 差的解说 | 好的解说 |
|---|---|---|
| 联赛第5轮第30分钟,青屿城1比0,中场远射破门 | “漂亮!太精彩了!” | “青屿城先拔头筹,禁区外25米左右的一脚低射,门将判断对了方向,但球速太快。” |
| 杯赛决赛第93分钟,滨江联2比1,替补韩野弧顶破门 | “漂亮!太精彩了!” | “韩野!第71分钟替补上场的韩野!补时第3分钟,滨江联反超了!北港竞技只剩最后一次机会。” |
| 联赛第34轮保级战第88分钟,扳平比分 | “球进了,比分1比1。” | “扳平了!这一分可能决定保级,现在两队积分相同,净胜球还差2个。” |
对比可以看出,好的解说并不一定更长,第一行只多了半句描述,但每一句都只属于那一个进球。情绪强度也应该跟随Match State:第5轮第30分钟不需要嘶吼,决赛补时需要,但喊的是人名和比分变化,而不是空洞的形容词。
顺序同样重要。进球瞬间先报事实,谁进的、比分多少;紧接着一句意义,反超了、对手只剩一次机会;回放时再补战术和历史。把历史放在进球瞬间说,会压掉现场情绪;把事实放在历史后面说,观众会听不清到底是谁进的球。
让解说不重复:用词记录、事件合并和适时的沉默
即使有了五层结构,一场比赛打满90分钟,系统仍然容易在措辞上重复。极速体育的AI解说在单场比赛内维护一张用词记录:“漂亮”“精彩”“不可思议”这类强情绪词在同一场里有使用次数上限,已经用过的比喻在本场不再重复,对同一名球员的称呼会在全名、姓氏、位置描述之间轮换,比如“韩野”“这位替补前锋”“滨江联的9号”。
另一种重复来自事件本身。第60分钟到第70分钟之间,双方可能有十几次普通传球和两三次解围,如果每次都播报,解说就变成了逐条念数据。系统会根据Match State把低重要度事件合并成一句趋势描述,比如“最近十分钟北港竞技一直在本方半场倒脚,他们在等滨江联压上来”。这句话比十次“某某传给某某”更接近观众真正想知道的东西。
最后是沉默。决赛补时反超之后,现场声音本身就是最好的解说,AI可以在喊出人名和比分之后停两三秒,让球场的欢呼声进来,再接下一句。一套知道什么时候不说话的解说,比一套一直在说话的解说更像真人。
一个进球解说是否合格,可以这样检查
判断AI解说有没有理解比赛,有一个很直接的办法:把它在某个进球上说的话,移到另一场比赛的另一个进球上,看是否仍然成立。“漂亮!太精彩了!”放在任何进球上都成立,所以它不合格;“韩野,第71分钟替补上场,补时第3分钟反超”只能属于滨江联对北港竞技的这场决赛,所以它合格。
这就是五层结构的实际作用:Match State让解说知道分量,Event让它知道动作,Context让它知道故事,Tactic让它知道原因,Commentary才决定说出哪一句。观众不会因为AI喊得更大声而多听一分钟,但会因为它说出了只有这场比赛才有的那句话,记住这个进球。