球进了,然后呢
一名教练暂停回放,指着屏幕问助理:这个三分是怎么出来的?他要的不是“3号球员投中三分”,这一句话计分板早就告诉他了。他想知道的是,这次投篮之前防守做了什么、进攻怎么把人拉开的、如果下一回合对手再这么打,应该怎么调整。
视频AI在这个问题面前暴露了它的第一层局限:检测到“球进篮筐”是一件相对容易的事,球的轨迹、篮网的抖动、比分变化和观众反应,都能提供证据。但从“发生了什么”走到“为什么会发生”,模型要多走好几步。半岛体育在事件检测之上做的一层工作,就是让视频模型开始回答这类问题,同时尽量不让它答错。
三层理解,从事实到解释
把体育视频理解看成一个分层的过程,会比“一个大模型看视频然后说话”更清楚,也更容易定位出错的环节。
| 层级 | 要回答的问题 | 主要依据 | 可验证性 |
|---|---|---|---|
| 事件层 | 发生了什么:三分出手、命中、时间点 | 动作识别、球轨迹、比分牌OCR | 高,可直接对照画面 |
| 关系层 | 谁在什么位置、和谁发生了什么关系 | 球员跟踪、队伍归属、站位 | 中,依赖跟踪质量 |
| 解释层 | 为什么会这样:战术、失位、因果 | 前几秒的事件链和站位变化 | 低,需要证据回指 |
越往下,可验证性越差,出错的代价却越大。事件层的错误一眼能看出来,解释层的错误却往往听起来很有道理。所以整个设计的重点不是让模型在解释层“更敢说”,而是让它在每一步都留下能够核对的证据。事件层的基础,可以回看比赛录像里的关键事件是怎么被找出来的。
模型实际看到的是什么
把一段篮球回合交给模型时,它并不只是拿到一段像素。系统会先准备好几份材料:每位球员在每一时刻的位置估计,也就是跟踪轨迹;球的位置和速度;由OCR读到的比赛时钟、24秒计时器和比分;由ASR或已有字幕得到的文字;以及事件检测输出的子事件列表。多模态大模型读到的其实是“画面加一份结构化的事实清单”。
这种做法的原因很朴素:让大模型直接从像素里判断“这次换防有没有沟通失误”,它没有可靠的位置度量,只能靠一种模糊的视觉印象。给它一份“防守球员甲在 12:52 距离持球人三米,12:53 变成六米”的记录,它就能把问题转化为可推理的条件。近期公开研究也越来越倾向于让专用视觉模块负责感知,让语言模型负责组织,而不是全部压在一个模型上,这一点在大模型负责讲、视觉模型负责看里有更具体的讨论。
这份清单本身也有误差。球员位置来自二维画面到球场坐标的换算,机位一晃或者变焦,换算就会漂移;队伍归属靠球衣颜色和号码,遇到两队球衣相近或者背向镜头时会判错。所以清单里的每个数字都附带置信度,大模型读到低置信度的记录时,会被提示不要把它当作硬事实使用。
还原一个回合:从掩护到出手
以下为模拟场景,时间和位置数据都是为说明推理链而设的示例:一支业余篮球队在第三节的一次进攻,最终由弧顶球员命中三分。
- 第 31:20–31:24:进攻方持球人在弧顶,防守方一名球员贴身,另一名球员在低位。事件层记录为“持球推进”。
- 第 31:24–31:26:一名内线球员上提到持球人身侧,位置在两秒内从罚球线内移动到弧顶。系统标记“掩护动作,疑似挡拆”,置信度中等。
- 第 31:26–31:28:持球人向另一侧运球,贴身防守者被掩护人挡住,两名防守球员的距离在一秒内缩小到接近一米,随后被拉开。关系层记录“防守被拉开”。
- 第 31:28–31:30:低位防守者上前补位,但补位时机偏晚,持球人与他之间的距离出现空档。
- 第 31:30:出手,球入网,比分变化。事件层记录三分命中。
模型在这一步产出的解释,不是“这是一次漂亮的战术”,而是一句可回指的话:进攻方在 31:24 用一次掩护制造了错位,补位比出手慢了大约一个身位,所以出手时几乎没有干扰。每一个判断后面,都能对应到具体的时间段和位置记录。如果有人怀疑“补位偏晚”,可以直接拖到 31:28 检查。
还原时另一个容易被忽略的细节是回合的“起点”。如果把31:20当作起点,模型看到的是弧顶的持球推进;但如果实际上这次进攻从上一次对手投篮不中、抢到篮板才开始,那前面十几秒的转换进攻同样属于因果的一部分。起点选错,后面的解释就少了一段前因,这也是事件边界与推理之间的联系。
“防守哪里失位”是怎么判断的
失位这件事,本身就带有主观性。同一个补位,有教练认为是选择放这个人投,有教练认为是沟通失误。系统能客观给出的是几类可测量的东西:防守者与自己所防对象的距离变化,与持球人、篮筐之间的相对位置,以及他在关键一秒内的移动方向是否与球的移动一致。
这些指标可以说明“防守者比对手慢了半拍”,却说不清“这是不是战术安排”。因此我们让模型在表述时区分两种句式:能用测量支持的写成“数据显示”,需要猜测意图的写成“可能是”并标注依据不足。这一点看上去只是措辞,实际上是防止解释层越界的第一道门槛。足球里的类似问题,比如关键传球为什么关键,在关键传球的判断里单独讨论。
模型编故事的时候
回到开头那个错误案例:模型说这次三分来自挡拆后的换防不及时,但回放里其实没有挡拆,是持球人自己用一个交叉步过掉了防守者。为什么会这样?
原因有几个。第一,训练里大量出现“三分之前有挡拆”这种共现关系,模型学到了一种统计上的合理叙事,把概率高的故事当成了观察到的事实。第二,视频里被遮挡的部分缺少证据,模型倾向于用常识补全,而不是承认自己没看到。第三,如果事件检测阶段误把一次靠近当成掩护,后面所有推理都会建立在错误前提上,而且推理越流畅,错误越难被发现。
这类错误有个共同特征:语言极其自信。它不会说“可能有误”,而是用完整的因果链把缺失的证据缝合起来。对使用者来说,最危险的恰恰是这种听起来很对的说法。
用什么办法约束它
目前较稳妥的处理是几件事同时做。
- 证据回指:解释里的每个关键判断必须关联具体的时间段和记录,缺少对应记录的句子不予输出。
- 拒答与降级:当遮挡严重、跟踪置信度低、事件链缺失时,输出“无法判断”或降为低置信度描述,而不是强行补全。
- 先检测后解释:解释层只能使用检测层已经确认的事件,不允许凭空引入未被检测到的战术动作。
- 人工复核入口:分析师可以直接点击每一条解释,跳到对应画面,并标记对错,错误标记用于后续改进。
这几条不能杜绝编故事,只能把它变得可发现。一个能被快速证伪的错误,比一个不可追溯的正确更有价值,因为使用者可以据此校准对系统的信任。
时间上下文:为什么一个回合不够
还有一类问题来自时间跨度。一个回合的解释只涉及几十秒,但战术往往是多回合累积的结果:对手连续三次在同一侧被突破,也许是因为上一节结束前的一次换人。要理解这种跨回合的因果,模型需要记住更长的比赛历史,这是近期长视频研究里反复出现的难点,也是长视频大模型为什么越来越重视上下文讨论的核心。
我们目前的做法是分层记忆:短期保留最近几个回合的详细事件链,长期只保留摘要和关键统计,比如某一侧被突破的次数、某位球员的上场时间。长期摘要的可靠性显然低于短期细节,遇到需要跨节推理的问题时,系统会明确说明依据的是摘要而不是原始画面。
现在能做什么,做不到什么
比较诚实的说法是:在机位稳定、球员可见度较好的场景里,事件层和关系层的输出已经足够支撑“把可疑片段快速找出来”;解释层更适合当作分析师的第一份草稿,而不是最终结论。多人重叠的篮下对抗、远景机位、频繁切镜头的转播画面,仍然是明显的薄弱区,球员身份在镜头切换后可能丢失,时间标记也可能因回放插入而错位。
另外,战术理解需要明确的比赛语境,例如防守体系是人盯人还是区域联防,队伍此刻是领先还是落后。这些信息有时无法从画面直接读出,需要使用者补充。系统能做的,是把这类缺失条件列出来,告诉使用者“如果你告诉我当前是区域联防,我的判断会不同”。
让视频模型理解一球为什么出现,最终要回到一个朴素的标准:教练看完解释,能不能顺着它找到画面里的证据,然后自己做出判断。能,这个模型就真的在帮忙;不能,再流畅的解释也只是一段好听的话。