跳到主要内容
音乐业务

音乐公司内部工具

一家音乐公司每天早上都在问同一个问题:今天该关注什么。这个工具用它自己留下的记录来回答,然后由一个工作室把同一个答案,在公司自己的硬件上做成一条竖屏成片。

  • 领域音乐行业,艺人与曲库
  • 合作方式内部工具建设,数据平台与视频工作室
  • 阶段每日在用
  • 定时快照
  • 势头识别
  • 视频工作室
  • 自有硬件

它自己留下的记录

榜单名次,以及在来源公布的地方还有绝对收听量,都按计划从许多主要平台和商店采集,每天的这一份读数都被保留下来。每一行都连同它来源响应的完整原文,以及一个说明获取方式的质量标签一起存下,所以工具给出的任何结论都能回溯到产生它的那一次响应。因为重启而错过的一天不会在记录里留下缺口,任务会自己补上;某个来源失败时会写进错误表,快照的其余部分照常跑完。

另一半是把其中一个结论做成成片的工作室。它按阶段串成一条流水:先找到曲子被重复播放最多的一段,在那里剪开,分离人声,给词打上时间,再用真实歌词把这些词纠正过来,生成画面,最后带动态字幕竖屏渲染。它跑在公司自己的 GPU 硬件上,渲染上的取舍正是被这个条件塑造出来的,而不是事后补上的。这不是一个产品,而是给一个人用的内部工具,架构上也没有假装不是。

面板里的榜单表格,每行一条榜单条目,列出商店、榜单类型,以及最近一次定时快照的收听量。
早上的视图:最近一次快照汇成一张可排序的表,每一行都还带着它来自哪一次任务。
问题

每天早上手工拼出来的一张图

决定该做什么所需的一切都发布在某个地方。没有一样在同一处,也没有一样被留下来。

早上是从一个个打开面板开始的

名次要从一个面板翻到下一个面板、一个商店接一个商店地读出来,再抄进表格。等这张图拼齐,它差不多也就不再是当下了,第二天同样的活儿又从零开始。

单看一个名次说明不了什么

没有把前几天的记录留下来,一首快速上升的曲子和一首原地不动的曲子在页面上看着一模一样。变化只存在于谁碰巧记得上周,而且事后无法再查。

把一个决定做成东西要搭上一天剪辑

一旦某首曲子值得做点什么,可发布的版本就意味着靠耳朵找出正确的几秒、把词记下来、手工对时间,再在剪辑软件里拼出视频。大多数决定最后什么也没变成,原因就是这份成本。

解决方案

这张桌子的两半

一半是留住历史、并在历史之上给变化排序的数据侧,一半是把决定变成成片的工作室侧。主要能力包括:

定时快照汇成一条时间序列

工具每天按计划在许多主要平台和商店上自己读一遍,并且全部留下,历史因此会自己长起来。

  • 覆盖许多主要平台和商店的榜单名次,来源公布绝对收听量的地方也一并取回。
  • 每一行都连同完整的原始响应和一个质量标签保留下来,任何结论都能回溯到产生它的那一次响应。
  • 某个来源失败时被记录并跳过,而不是让整次任务中断;错过的一天会自动补上。

势头与爆发识别

让这个工具真正有用的是历史。变化在数据库里直接算,而不是放在应用代码里,按多个回看距离计算,再排序,并按流派和商店打分。

  • 名次变化按多个回看距离测量,让上升在变成名次之前就先被看见。
  • 一块按加速度而不是按总量排序的势头看板,看的是涨势在加快还是在降温,并提供多种加权取向和时间窗口。
  • 爆发识别只在几个彼此独立的条件同时成立时才标出候选,其中一个不成立就把它剔除。

按阶段串起来的工作室

进去的是一首曲子,出来的是一条竖屏成片;每个阶段把自己的结果交给下一个阶段,并记下它一路上做了什么判断。

  • 剪切点取在曲子被重复播放最多的那一段,而不是开头,因为开头只是每次重播重新开始的地方。
  • 先分离人声再做转写并给词打时间,然后用真实歌词把词本身纠正过来,听错的一句不会进入渲染。
  • 按每个歌词窗口生成画面并以短片段动起来,再拼接起来,带动态字幕竖屏渲染,同时输出带音乐和不带音乐两版。

所有这些前面只有一个面板

两半共用一个界面,让操作者同时看见数据在说什么,以及机器正在做什么。

  • 榜单下钻、单曲名次阶梯和一张密集热力图,全部由地址栏驱动,任何一个视图都能当成链接交出去。
  • 流水线从面板启动,进度按阶段实时推送,下方是历次运行的记录。
  • 逐词对时间的时间轴编辑器、在竖屏画面上拖动定位的叠层,以及一个显示显卡当前扛着什么的实时读数。
怎么搭起来的

至今仍能从行为上看出来的几个决定

说清决定比说清用了哪个库更有用,而这几个决定在工具给出答案的方式里都还读得出来。

计划要服从的决策记录

塑造了这个系统的每一个架构决定都写了下来,并写明它带来的后果;后来被推翻的决定不会被抹掉,原来的条目留在原处,推翻的结论和理由补在下面。计划与记录冲突时,以记录为准。正是这条规则,让一个写下来的决定不至于一个月后悄悄变成空话。

只有一个关联键,模糊匹配被白纸黑字禁止

跨来源判定同一份录音,只用行业标准的录音标识符。退回到用标题和艺人文本去匹配,在决策记录里被明确排除,而不是留给临场判断,因为这类匹配会凭空造出数据里从未存在的一致。标识符缺失时,条目就各自留着,宁可少算也不多算。

一条慢查询被修好,理由留在原地

识别用的查询把同一个重连接反复读了好几遍,慢到在桌面上能被感觉到。把这个连接算一次再重复使用,把等待变成了回答。测量结果、它出自哪一条记录,以及查询为什么写成这样,都写在改动旁边的注释里,下一个打开这个文件的人不必重新摸索。

窗口会收窄,而不是拒答

在存档还短的时候要一个长窗口,工具会用手上真正有的历史来回答,并把这一点标注出来;随着记录累积,窗口会长成真正的长度。同样地,势头评分背后的权重被标注为有依据的判断,而不是拿有标注样本拟合出来的结果;回测则等到历史足够、能诚实地跑一遍时再做。

带来的变化

桌面上发生的变化

刻意只讲定性。这里没有任何一项是对着基线量过的,所以也不会拿数字来说。

留住

留下的是记录,不是一张快照

这张图不再每天早上清零。每天的名次和数量都留着,关于变化的问题可以事后再问,而不必依赖谁记得上周。

更早

注意力落在还在往上走的曲子上

按涨势是否在加快排序,而不是按总量,把注意力往前挪:挪到还在上升途中的曲子,而不是已经站在所有人都在看的榜单顶端的那些。

可复用

发布不再是最贵的一步

过去要花一个下午手工完成的步骤,现在在公司本来就有的硬件上作为一条流水线跑完,按数据行动的成本,不再决定这件事到底做不做。

最后审阅:

早上那个问题,是不是分散在太多面板里?

如果您需要的答案已经存在于好几个地方,而且每天都要有人手工拼一遍,那通常就是一个内部工具的事。把问题告诉我们,我们来说清楚把它变成按计划自动回答需要什么。

聊聊您的项目