**编者按:**Netflix探索了许多经过机器学习提高视频生产功率的办法,比如对话查找和视频查找。但因为不同项目均独立开发,保护本钱巨大。现在,Netflix正在着手处理这一问题。本文来自Netflix科技博客。
文 / Guru Tahasildar, Amir Ziai, Jonathan Solrzano-Hamilton, Kelli Griggs, Vi Iyengar
译 / 核子可乐
原文
netflixtechblog.com/building-a-…
摘要
Netflix坚持使用机器学习为咱们的会员打造最佳媒体体会。此前,咱们曾共享过其间一种算法的完成细节,介绍了咱们的渠道团队怎么开宣布与媒体相契合的机器学习生态体系,也评论了怎么将这些算法中的数据存储在咱们的注释服务傍边。
当时,很多机器学习文献都偏重于模型练习、评价和评分等。而在本文中,咱们将讨论机器学习生命周期中一个尚未被充沛研讨的角度:将模型输出整合至应用程序傍边。
运用机器学习技能在《怪奇物语》中查找主角Eleven的镜头,并将成果导入作业室软件以供Netflix做视频修改。
详细来说,咱们将深入研讨怎么为Netflix的作业室软件树立查找功用架构。咱们将讨论运用机器学习算法处理的详细问题,回顾期间困扰Netflix的不同痛点,并概括介绍咱们这套新渠道的技能完成。
概述
在Netflix,咱们一向在尽力为会员供给更优质的内容、提高他们的观看满意度。这种愉悦的体会需求分两部分完成:其一,咱们需求制作出会员喜欢的节目内容;其二,咱们需求让会员能轻松直观地从媒体库中挑选出合适自己的内容。也便是说,以图画和视频办法快速呈现节目亮点,现已成为Netflix会员体会中的重要一环。
当然,这类多媒体“弥补性”资产不或许凭空出现,而是出自艺术家和视频编排师之手。咱们开宣布创作东西,让这些搭档能够会集时刻和精力发挥自己的创造力。但很惋惜,他们的大部分精力仍是被糟蹋在了繁琐的准备作业上,所以新的自动化任务就此被摆上议程。
用例汇总
用例一:对话查找
对话是故事讲述中的中心手段。讲述一段引人入胜故事的最佳办法,往往便是经过人物的口述。那些掷地有声、令人难忘的台词,也是预告片编排师们最需求的资料来历。之前查找这类内容只能采纳手动办法,功率之低下可想而知。
编排师需求从头到尾观看视频内容,运用时刻码转录那些精彩的台词瞬间,并在引用时据此进行检索。并且尽管有确切的时刻记录在,但编排师在实践操作中或许忘记当时的详细情境,因而经常需求重复从头观看。有些编排师干脆把整段内容悉数转录下来。用咱们一位搭档的话来说:
这种画面监视/拆分作业十分单调,不知糟蹋掉了多少创作时刻!
的确,翻阅几个小时的画面(假如是连续剧,长度或许达到几十小时)来查找某一句台词无疑让人心烦。有时候,编排师还需求查找多部作品,意味着几乎不或许靠手动查找来完成。那么,咱们该怎么淘汰掉这种落后的翻阅和转录流程?
在抱负情况下,咱们期望完成以下几种对话查找功用:
-
按节目标题、标题子集(例如一切剧集)或者完好目录进行查找;
-
按人物或演员进行查找;
-
多语种查找。
用例二:视觉查找
正所谓“一图胜千言”,视觉叙事能帮助观众了解杂乱的故事,也能以更富感染力的办法传递信息。
艺术家和视频编排师往往需求为艺术作品和预告片查找特定的视觉元素。他们或许要翻阅关于特定人物、方位、目标、事情(例如动作片中的追车场景)或属性(例如特定镜头)的帧、画面或场景。假如能让他们运用自然语言查找视觉元素,成果将会怎么?
下图所示,为用户在内容库中查找“赤色赛车”时输出的成果。
用户查找“赤色赛车”
用例三:按画面反向查找
自然语言视觉查找的确为编排师们供给了强大的东西。但假如他们在脑海里现已构建起切片逻辑,现在需求找几个内容相似的画面,该怎么操作?例如,假定编排师看中了《主厨的餐桌》中一帧作用惊艳的食物画面,接下来要怎样找出剧会集的悉数相似资料?
用户提交查询画面,据此找出其他相似画面。
工程办法
办法一:按需做批处理
咱们完成立异的榜首种办法,便是运用一款东西完成对算法的按需、按节目触发。咱们树立一套批处理体系,可供用户提交恳求并等候体系生成输出。处理一般需求几个小时才干完成,究竟很多机器学习算法都需求耗费很多算力,提交的样本中也有很多画面帧有待处理。一般来说,长度为1小时的视频中往往包含超过8万帧!
处理完成后,用户下载由算法生成的输出以供离线运用。这套规划受控的试点体系,大大削减了用户手动分析内容所花费的时刻。下图所示,为整个流程的可视化办法:
按需批处理体系流程图
办法二:经过预核算完成在线恳求
在试水阶段取得成功之后,咱们决议为几种算法添加在线支撑。这也是用户榜初次能够在整个目录中发现匹配项,查找那些他们不熟悉、甚至不知道其存在的精彩内容。无需任何本地设置、没有推迟,一切数据都已预核算完毕并等候运用。
具有预核算数据流的交互式体系
咱们的用户也对这套体系的上线拍案叫绝:
“咱们想在一部剧会集找到一切跟餐厅有关的画面。几秒钟后,咱们就完成了这项以往需求一、两个人花费一整天才干搞定的作业。悉数10会集一切的餐厅画面就这样呈现在眼前,太棒了!”
Dawn Chenette,规划主管
这种办法给产品工程带来了一系列助益,让咱们能够在不影响用户体会的情况下通明更新算法数据,还能梳理出哪些查询模式和算法洞见对用户更有吸引力。别的,咱们也得以履行A/B测试,借此验证或否定在调整查找体会时做出的假定。
首要痛点
咱们的前期测验,的确让构思作业者们感触到了机器学习的巨大价值。与此同时,咱们也遭遇到越来越多的作业难题,导致无法持续推进扩展。
首要挑战,便是怎么保护多种不同体系。这些体系最初是由不同团队在不同的技能栈之上构建而成,因而保护本钱很高。每当机器学习研讨人员开宣布一种新算法时,都需求将其单独整合至各个体系傍边。事实证明,戋戋两套体系加少数算法,就足以让运维团队满负荷运转。咱们知道,跟着将机器学习技能扩展至更多用例和研讨人员,这种情况只会变得更糟。
在线应用程序尽管为咱们的用户带来了前所未有的交互性,也证明咱们的探索方向是正确的,但其扩展性着实太差。新算法和新用例的添加依然十分耗时,需求工程师们支付很多尽力。这种“一事一议”的整合本钱不够安稳,施行时刻也在几周到几个月之间剧烈波动。别的,因为施行办法的限制,咱们也无法对一切可用机器学习源进行全目录范围的查找。
总而言之,这套模型归于应用程序到数据的紧密耦合架构,其间机器学习算法与后端、UI/UX软件代码仓库混合在一起。为了处理施行时刻难以预测的问题,咱们需求对不同算法的集成办法做标准化改造——包含详细履行办法,保证数据被始终如一地交给给一切运用者。后续咱们还将开宣布更多能够了解媒体内容的算法并扩展至更多用例,所以现在有必要出资以从头规划体系架构,保证来自不同团队的研讨人员和工程师都能或独立、或协同地开展立异作业。依据这些需求,媒体查找渠道(MSP)倡议就此诞生。
尽管咱们刚刚开端进军媒体查找范畴,但查找本身对Netflix来说并不生疏。咱们拥有面向无数订阅用户的查找和引荐功用,现已具备老练而强大的运用体会和体现。咱们知道,搭档们在这儿探索出的经验教训将成为辅导媒体查找渠道建造的宝贵辅导。为了跟咱们“高度一致、松懈耦合”的企业文化保持一致,咱们期望工程师能够快速、独立地参加到算法规划和改善傍边,同时让作业室和产品应用都能轻松与媒体了解算法相对接。
能否完成渠道的模块化、可插拔和可装备性,成为决议成败的要害。经过这种办法,咱们能够保留渠道的分布式一切权特性,为不同的专业团队供给不同的渠道贡献组件。为此,咱们从其他用例中提取出现成服务,在进行功用扩展之后用于支撑新的需求。
接下来,咱们将详细讨论体系架构,了解不同模块之间怎么交互、一起完成端到端流程。
体系架构
体系架构
Netflix的工程师们一向尽力迭代,期望以“MVP”(最小可行产品)办法尽快取得前期反应,最大限度削减前期出资本钱。因而,咱们没有完全构建一切模块,仅仅清晰划分了试点施行的范围,保证能让最重要的功用运转起来。同时,咱们还充沛保证了规划开放性,为未来的扩展留足空间。下面,咱们就重点介绍其间几个组件示例。
接口——API与查询
从架构最顶端开端,咱们的渠道能够经过gRPC或GraphQL接口与应用程序交互。接口的多样性能够更好地满足应用程序开发者的实践需求。在Netflix,gRPC首要用于后端到后端通信。借助咱们开发者生产力团队供给的活泼GraphQL东西,GraphQL现已成为UI到后端集成的首选方案。咱们也一向在项目傍边运用域图服务框架。
在查询schema的规划进程中,咱们考虑到未来的潜在用例,保证它能够支撑后续扩展。咱们的目标是让schema足够通用,以便躲藏实践查找体系的详细查询履行细节。别的,它还要直观易懂且功用丰厚,可用于表达杂乱的查询。用户能够灵敏履行多模态查找,包含输入简单的文本表达、图画或短视频。如前所述,查找既可针对Netflix的整个目录履行,也能够仅限于特定标题。用户或许更倾向于以特定办法安排成果,例如按影片分组、按时刻戳排序等。当存在很多匹配项时,咱们允许用户对成果进行分页(页面巨细可调),而不是有必要获取悉数或固定数量的成果。
查找网关
客户端生成的输入查询,会首要被交给至查询处理体系。因为咱们的大多数用户履行的都是针对性查询,例如查找对话“别对朋友说谎”,现在的登台体系会履行轻量化处理,并供给hook以集成A/B测试。未来,咱们计划将其发展成一套“查询了解体系”,可支撑更自在的查找办法,能够减轻用户担负并简化客户端查询的生成进程。
查询处理体系会修改查询以匹配目标数据集,包含“嵌入”转换和翻译。关于指向依据嵌入的数据源的查询,该体系会将文本或图画等输入转换成相应的向量表示。每个数据源或算法都能够运用不同的编码技能,由登台体系保证相应的编码适用于所提交的查询。咱们之所以要求不同算法运用不同的编码技能,是为了完成对单帧图画和由多帧画面组成的视频完成不同的处理。
跟着全球事务扩张,咱们也开端面临母语不是英语的用户集体。渠道上的一切文本模型均运用英语进行练习,因而需求将其他语种的文本翻译成英语。尽管翻译成果并不完美,但在咱们用例中的作用依然杰出,也让咱们的东西能够为更多非英语用户服务。
在查询转换完毕并做好履行准备后,咱们会将查找履行托付给一个或多个查找器体系。首要,咱们需求统筹将哪条查询路由至哪个体系,这部分作业由查询路由器和查找器署理模块负责。在初始施行中,咱们运用单一查找器来履行一切查询。但经过后续可扩展办法,该渠道现已能够支撑更多查找器,并使用这些查找器开宣布新的算法和实验原型。
查找或许会交叉或聚合来自多种算法的数据,因而当时笼统层需求将单个查询涣散到多条查找履行傍边。咱们在这一层内为各个受支撑查找器完成了“查找器署理”,各署理负责将输入查询映射到契合查找者期望的查询成果处。之后,署理会处理来自查找器的原始呼应,再将成果交给后处理器组件。
成果后处理器负责处理一个或多个由查找器返回的成果,能够经过自界说评分对成果进行排名,再依据其他类似查找对查找主张做出弥补。别的,咱们还在评价该层中的另一项功用,运用相同的底层数据动态创建出不同的视图。
为了便于协调和保护,咱们将查询处理和呼应处理笼统在同一个名为Search Gateway查找网关的模块傍边。
查找器
前面说到,查询履行由查找器体系负责处理。当时施行中运用的主查找器名为Marken,是Netflix构建的可扩展注释服务。它能支撑多种不同查找类型,包含全文和依据嵌入向量的相似性查找,还能够存储和检索时刻(时刻戳)及空间(坐标)数据。该服务的数据存储和检索使用Cassandra和Elasticsearch完成。在加载嵌入矢量数据时,咱们还进行了广泛的基准测试来评价可用的数据存储。这儿需求强调一点,尽管咱们现已树立起专用于特定查询模式的数据存储,但最终出于可保护性和一致性的考虑并没有实践引入。
咱们还确认了一些常见的schema类型,并对来自不同算法的数据做了存储办法标准化。各算法仍能够灵敏地对schema类型做自界说。咱们正在这方面活跃立异,最近又添加了对不同算法的数据进行交叉的才能,有望让来自多种算法的数据相互叠加、以创造性的办法快速获取所需成果。
算法履行和摄取
以上内容首要讨论的是怎么查询数据。咱们的体系中还有别的一种同样杂乱的机制,用于为算法履行和数据生成供给支撑。这项作业由咱们的媒体机器学习渠道团队担纲,他们专门构建了一套特定于媒体的机器学习东西。除了以媒体为中心的特征存储和核算编排之外,它还能协助对媒体资产(例如音频、视频、图画和文本等)进行无缝访问。
在这个项目中,咱们还开宣布一个自界说接收器,能够依据预先界说的schema将生成的数据索引至Marken傍边。但初次回填数据时要特别当心,避免体系因很多写入而不堪重负。
最终同样重要的是,咱们的UI团队构建了一个可装备、可扩展的库,用以简化该渠道与最终用户应用程序间的集成进程。在这套可装备UI的帮助下,各应用程序和算法能够轻松依据实践需求对查询生成和呼应处理做定制化调整。咱们未来将持续构建更多本机小部件,进一步简化UI操作。
总结
咱们这套能够了解媒体内容的渠道,相当于机器学习算法与各种应用程序和功用之间的一种笼统层。这套渠道现已让咱们在多种应用程序中无缝引入了查找和发现功用。信任未来跟着各方面成果的发展老练,将帮助更多用例和应用程序释放价值。期望这篇文章能帮助咱们了解咱们怎么推进架构革新,后续咱们也将持续共享相关作业的动态和发展,敬请期待。