比赛时钟卡住的那三分钟
先看一个多模态系统最常见的翻车方式。某场足球比赛的转播画面里,右上角的比赛时钟在第 62 分钟突然停住,之后三分钟里数字一直是 62:14。原因可能很平常:转播端时钟信号短暂中断,或者字幕图层在切换回放时没有刷新。对人来说,这没什么;对一个只靠 OCR 读时钟来给事件“定时间”的系统,后果很具体:这三分钟里的一次角球、一次换人和一次射门,全会被记在 62:14 这同一个时刻上,事件顺序被压成一团。
如果这个系统同时还在听音频、看画面,问题就会暴露得很早:视频里球在不停地移动,音频里观众的声浪起伏了两次,而 OCR 报告“时间没有变化”。三路信号里有一路和其他两路对不上,这本身就是一个有用的信息。体育多模态系统的价值,很大程度上就在这里,它不是靠某一路信号特别准,而是靠多路信号可以互相指出对方的问题。
下文讲的就是这件事:每一种输入各自擅长什么、各自会怎样出错,它们怎样被放到同一条时间轴上,冲突出现的时候系统怎么处理,以及哪些地方我们目前只能说“仍在验证”。文中所有数字和时间线都是帮助理解逻辑的模拟示例,不代表任何实测结果。
六路输入,六种不同的“证词”
把体育多模态输入想成六个证人比较直观。他们看到的是同一场比赛,但站的位置不同、说话的方式不同,能被信任的地方也不同。
| 输入 | 擅长回答什么 | 典型出错方式 |
|---|---|---|
| 视频画面 | 谁在哪里、做了什么动作、球的轨迹与空间关系 | 遮挡、远景下球太小、回放画面被当成实时画面 |
| 现场与解说音频 | 气氛变化、哨声、击球声、解说语气升高 | 场馆音乐、鼓点、嘘声都会造成“大声音” |
| OCR(比分牌、时钟、号码) | 比分、比赛时间、球衣号码、字幕条上的文字 | 时钟停摆、图层遮挡、号码被手臂挡住或运动模糊 |
| ASR(已有解说转文字) | 解说提到了谁、什么事件、语气所指的对象 | 同音人名听错、专业术语误识别、口音与噪声 |
| 结构化赛事数据 | 带时间戳的进球、犯规、换人、暂停等事件记录 | 时间戳与画面有偏移、人工录入延迟、业余赛事根本没有 |
| 球员与球跟踪 | 位置、速度、跑动路线、球员之间的距离 | 球员交叉时身份互换、镜头切换后需要重新识别 |
这张表里有一个容易被忽略的规律:每一路的“擅长”和“出错”往往是同一件事的两面。音频对情绪极其敏感,所以也最容易被无关的情绪骗到;结构化数据很干净,所以一旦时间戳偏了,它会非常自信地错。没有哪一路可以被当作真值,只能当作带着不同偏差的证词。
也正因为如此,单模态的强基线并不能说明“多模态没必要”。近期公开的研究里,纯音频基线在精彩检测上表现出乎意料地强,但同一批工作里,把音频和视觉简单融合之后通常还能继续变好。这说明两路信号的错误并不重叠,重叠得越少,互相纠错的空间就越大。
先对齐时间,再谈理解
多模态系统里最先出问题的通常不是识别,而是时间。六路输入的时间基准本来就不一样:视频是帧序号,音频是采样点,赛事数据是比赛时钟或者录入时间,ASR 的文字带的是“说出口”的时间,而说话往往落后于事件发生几秒。
拿一个模拟例子说明。某次射门,视频里球离脚的时刻是视频时间 1204.0 秒。赛事数据记录该事件在“比赛时间 33:41”,换算到视频时间约为 1207 秒,晚了大约 3 秒,这是数据员录入的延迟。解说员喊“射门”的声音出现在 1205.5 秒,ASR 输出的文字时间戳是 1206.0 秒。观众声浪的峰值在 1207.5 秒,因为球被扑出之后欢呼才达到顶点。这四个数字都指向同一件事,却互相差了三四秒。
系统的做法是给每一路估计一个“典型滞后”,而不是假设它们同步。数据录入通常滞后,ASR 文字滞后于说话,声浪峰值滞后于事件。对齐时先用最硬的锚点建立基准,例如哨声这种起止明确的声音事件、比分牌数字变化的那一帧,再用这些锚点去估计其他信号的偏移量,并且随着比赛进行不断重估。转播画面中出现回放、广告切镜时,还要暂时冻结对齐,等回到直播画面再重新锚定。
这一步做不好,后面的融合都建立在错位之上。一种典型后果是:“进球”事件被对上了下一次角球时的欢呼,剪出的片段把进球之前的整段推进切掉了。
互相纠错的四个具体例子
时钟卡住:视频和音频否决 OCR
回到开头的场景。OCR 报告时钟静止,但跟踪信息显示球员仍在高速移动、球在不同区域之间转移,音频里也出现了哨声和两次明显的声浪。系统的判断规则并不复杂:当视觉运动量和音频活动都表明比赛在进行,而 OCR 时钟连续超过一个阈值没有变化,就把 OCR 时钟标记为“不可信”,改用最近一次可信锚点加视频内部计时来推算当前比赛时间。等到 OCR 恢复变化,再把中间这段的时间轴做一次回填修正。
ASR 听错人名:号码和数据反过来纠正文字
解说里说到某名球员,ASR 输出的是一个发音相近但名单里根本不存在的名字。如果直接把这段文字交给语言模型去写摘要,摘要里就会出现一个凭空的人。做法是把 ASR 输出与本场的球员名单做模糊匹配,同时看这一刻画面里持球球员的号码(由 OCR 或号码识别读出)和赛事数据里对应事件的球员字段。三者中两路指向同一个名单内的人,就以它为准;三路各说各话,这一处的球员名就不写进摘要,只写“一名球员”。宁可少说,也不要说错。
场馆音乐盖过哨声:视觉确认音频
某个篮球场馆在暂停时播放高音量音乐,音频能量突然升高,一个只看响度的精彩检测器会把它当作高潮。此时画面里球员在场边围成一圈,球没有在比赛区域移动,视觉一路给出“没有比赛事件”。这一类冲突的处理是:高能量音频单独出现,不足以触发精彩标记,至少要有一路视觉或数据事件印证,更完整的讨论见精彩瞬间识别。
数据源与画面错位:用画面里的证据校准数据
结构化赛事数据说“第 33 分 41 秒,换人”,但画面里,那次换人在视频里发生得更早,且比分牌上的替补号码在 3 秒前就已经亮起。系统会用比分牌上号码变化的那一帧当锚点,反过来修正数据事件的时间戳,而不是把数据当作不可质疑的真相。业余赛事没有官方数据流的时候,则只能依靠画面、音频和 OCR 三路互相校验,可靠度自然要低一档,系统对外表述时也会更保守。
融合的方式:不是把所有东西都塞进一个模型
常见的误解是,多模态大模型就是一个巨大的网络,视频、声音、文字一起输进去,直接输出结论。体育场景下这种做法有两个问题:一是成本,长比赛的视频和音频量很大;二是难以定位错误,出了问题不知道是哪一路信号的责任。
更稳妥的设计是分层。第一层是专用模型各管一路:视觉模型检测人、球和动作,音频模型识别哨声、击球声和人声语气,OCR 读比分和时钟,ASR 转写解说,跟踪模块维护球员身份。第二层做对齐和一致性检查,把各路输出变成“带时间戳、带置信度的事件候选”。第三层才是语言模型,它读的是这些结构化的候选和相应的时间上下文,负责组织成摘要、标题或者解说文字。这个分工在多模型协作一文里有单独展开。
融合规则有三条比较实用的原则。第一,确定性分级:两路以上吻合才写成确定事件;只有一路支持的,保留为候选,下游生成文字时使用“疑似”“可能”的措辞,或者干脆不提。第二,冲突保留:两路信号互相矛盾时,不强行选一个,而是把冲突本身记录下来,供人工复核或者后续更多证据到来时再解决。第三,缺失回退:某一路整体失效时,例如没有音频、没有数据流,系统降级到剩余信号,并明确降低输出的详细程度,比如只给出比分变化和大致时间,不再写“谁传给了谁”。
一段模拟的处理时间线
| 视频时间 | 各路信号看到什么 | 系统当下的判断 |
|---|---|---|
| 0:00–0:04 | 视觉:一次中场抢断;音频:现场声浪平稳;数据:尚无记录 | 候选:控球权转换,重要度低 |
| 0:04–0:09 | 视觉:快速推进,两名队员向禁区前沿跑动;音频:解说语速加快(ASR 出现“推进”一词) | 候选升级:进攻发起,等待后续事件 |
| 0:09–0:12 | 视觉:禁区内射门;音频:击球声与观众声浪骤升;OCR:比分牌仍显示 0:0 | 候选:射门,尚不能确认进球 |
| 0:12–0:15 | 视觉:球入网、球员庆祝;音频:声浪峰值;ASR:解说员喊出进球 | 三路吻合,标记为进球事件 |
| 0:15–0:18 | OCR:比分牌更新为 1:0;此时视频进入回放画面 | 用比分牌变化那一帧校准,回放段不再当作新事件 |
| 约 0:20(延迟) | 数据源:录入一条进球记录,时间戳比画面晚约 3 秒 | 与已标记的事件合并,不重复计数 |
这条时间线里,最有信息量的是 0:09–0:12 这一段:射门已经发生,但比分牌还没变,如果系统此时就写出“进球”,就是抢跑。多模态系统需要的耐心,是等到第二、第三路证据出现再说话。这个“什么时候可以确定”的问题,和实时解说里的时机判断本质相同,只是解说对延迟更敏感,关于过期上下文的问题可以看解说里的上下文过期。
模型的局限:目前更诚实的说法
首先,多路信号互相纠错有一个前提:各路的错误至少不完全同步。现实里也存在共同失效的情形。比如转播切到观众席特写的那几秒,视频里没有比赛画面,OCR 读不到比分牌,跟踪也丢失,此时只剩音频与数据源,判断的可信度会明显下降。
其次,ASR 在体育场景里的难度比日常语音更高。人名、外来词、方言口音、观众噪声,都会让转写出问题。不同语言和解说风格之间的稳定性,是我们仍在验证的方向,不能假设一种口音上的表现可以迁移到另一种。而且 ASR 转出的是“解说员说了什么”,解说员本身也会说错,因此它只能作为参考证词,而不是事实来源。
第三,对齐漂移。长时间比赛里,不同信号的时间偏移不是常数,转播端加入广告、回放、慢动作之后,偏移量会突然跳变。我们目前更稳妥的处理是频繁重新锚定、在锚点稀少时降低输出粒度,但这并不能完全消除偏差。
第四,业余赛事和手机拍摄的比赛通常没有结构化数据,也没有稳定的比分牌,画面还可能抖动、远距离拍摄。这些场景下系统只能依靠视频和音频,得出的事件更粗,也更需要用户确认。系统的处理方式是明确标注“疑似”,而不是把不确定的东西写成事实。
最后是表述上的克制:这里描述的是设计思路和仍在推进的研究方向,文章不给任何准确率数字,因为体育场景里的准确率取决于转播风格、赛事类型、语言和数据质量,脱离条件的单一数字没有意义。
这对使用者意味着什么
对使用半岛体育的人来说,这套设计的思路是:摘要里的比分和时间尽量经过多路核对,而不是从单个来源直接抄来;不确定的位置以“疑似”之类的措辞出现,而不是被悄悄抹平;上传的视频缺少比分牌或音频很差时,结果会更粗,但会更明确地说明哪里不可靠。
如果想进一步了解每一种输入在模型里具体占据什么位置,可以继续读体育大模型输入清单。整体的判断可以概括成一句话:体育里的画面、声音和数据从来不会自己说出同一件事,多模态系统的工作,就是在它们不一致的时候,知道该相信谁,以及什么时候应该承认自己不确定。