写点什么

Hulu 在 Content Embedding 的探索与实践

  • 2021 年 2 月 03 日
  • 本文字数:4939 字

    阅读完需:约 16 分钟

Hulu在Content Embedding的探索与实践

Hulu 是美国领先的互联网视频流媒体平台,拥有大量的电影、电视剧等视频资源,对这些内容的理解和表示是 Hulu 的一个重要研究方向。Content Embedding 技术将内容表示为向量,以利于后续算法、模型的处理和分析。本次分享将介绍 Hulu 在 content embedding 方面的一些实践和尝试,包括 embedding 的生成及其在业务场景中的应用。

About Hulu

Hulu 是一个视频流媒体平台,主要由三个要素构成,分别是用户 (users)、内容 (contents) 和广告 (ads)。Hulu 的商业模式也是围绕着这三个要素进行的,即 Hulu 花钱购买内容资源并提供广告展示位,用户付费观看内容,广告主付费购买广告位。


1. Contents on Hulu



Hulu 提供了种类丰富的内容资源,主要是电影、电视剧,以及一些体育、新闻、儿童相关的节目;既有点播的内容 (VOD contents),也有直播频道 (LIVE channels)。

2. Content understanding in Hulu

Hulu 的内容理解可以分为四个不同的层次:


  • 第 1 层,对视频的理解,比如检测和识别视频中出现的特定目标、事件、场景、明星演员、商标等,以及一些特定的片段(如片头、片尾、highlight 片段等);

  • 第 2 层,对整个剧集(包括电影、电视剧)的理解,比如为每个剧打一些标签 (tags) 或生成向量表征 (embeddings),或者分析剧与剧之间的相关性等;

  • 第 3 层,对 collection 的理解,这里的 collection 是 Hulu 页面上每一行所展示的剧构成的集合,我们需要为每个 collection 也生成一个表征,并分析不同 collection 之间的关系,以及思考如何用算法来辅助 collection 的创建;

  • 第 4 层,对内容在 Hulu 平台上生命周期的理解,主要是分析用户与内容之间的交互信息。

3. Contents & corresponding metadata/videos


Hulu 上的每个剧集(电影/电视剧),除了最直接的视频资源外,还有一些与之相关的信息,包括剧的标题 (title)、简介 (description)、导演 (director)、演员 (actor)、主题 (topic)、类型 (genre)、标签/关键词 (tag/keyword)、获奖情况 (award)、分级情况 (rating)、字幕信息 (caption)、海报/封面图 (cover image) 等。

 4. How to represent contents?


上面提到,与一个剧集相关的数据有很多(如下右图所示),它们具有不同的形式(标签类、文本类、图像、视频、音频等),从不同维度刻画剧集,具有丰富的信息。那么,如何综合考虑这些信息,给每个剧一个表征呢?表征,从某种意义上来说也是一种信息压缩,用更简洁、有效、本质的形式来刻画一个东西。典型的表征有如下几种:


  • ID 类型的表征,用一个 id(一般是数字或字符串)来表示一个剧集。这类表征只能反映出两个剧是相同的或者不同的(看 id 是否相同),不能带来其它额外信息。One-hot encoding 也是这类表征的一种形式。

  • 标签类型的表征,用若干个关键词来刻画一个剧集,每个关键词具有一定的语义信息,比较方便人类理解。

  • 向量类型的表征,用一个向量来标识一个剧集,这类表征可以很方便地用在后续的模型和计算中,对机器比较友好。我们接下来要介绍的 content embedding 就属于这一类表征。

Generation of content embeddings

1. Content embedding


Embedding 是数学上的一个概念,指把一个数学结构经过某种映射嵌入到另一个数学结构中,这个映射需要保持某种意义下的结构不变性。类似地,content embedding 是将剧集映射到一个低维稠密的向量空间中,并尽可能让内容相似的剧对应的 embedding 向量也比较接近。在 Hulu,生成 content embedding 时需要考虑多种不同模态的数据,包括标签类数据(导演、演员、类型、标签/关键词等)、文本数据(标题、简介等)、图像(海报、封面图等)、视频、音频等;另外,考虑到电影/电视剧都是长视频,要压缩为一个低维向量需要很高的压缩率,并且在算法的训练和测试过程中都没有 ground-truth 可以参考,因此生成 content embedding 还是一个比较有挑战性的任务。


2. Tag-based embeddings (Graph Embedding) 

Step 1:


首先,介绍如何利用剧集的标签类型数据来生成 content embedding。前面提到,每个剧集都或多或少会有一些标签类型信息,比如导演、演员、类型、关键词/标签等,我们把它们称为该剧的属性 (attribute) 信息。由此,我们可以构建一个 content-attribute graph,其中剧集和属性是该 graph 中节点,它们之间的对应关系用 graph 中的边来连接。由于不同的剧可能有相同的属性(比如两个剧有相同的导演或关键词),这些共同的属性节点可以将不同的剧连接起来,如下图所示,最终会构成一个非常庞大的 content-attribute graph。


Step 2:


有了 content-attribute graph 之后,可以用 node2vec 技术为 graph 中每个节点(包括剧节点和属性节点)学习出一个 embedding 向量,其中剧节点对于的向量即为我们需要的 content embedding。大致的步骤是先根据 graph 采样获得一些 path,然后调用 word2vec 方法学习得到节点的 embeddings。我们略过细节,这里的基本思路是:如果 graph 中两个节点之间的 path 越多,则希望它们对应的 embedding 向量越接近。

3. To be improved …

上述基于 content-attribute graph 生成的 content embedding,有如下几个不足的点:

  • 只使用了标签类型数据,没有考虑非标签类型的文本数据(如标题、简介等);

  • 在标签类型数据中,GraceNote keywords 和 genres 是最重要的,但它们的覆盖率并不高,很多剧会缺失这些数据;

  • 构建 content-attribute graph 时候,并没有利用上这些标签的语义信息(只根据标签是否相同来构建 graph 中的连接边);

  • 在建模过程中,不同类型的标签之间没有足够的信息交互。

4. Considering non-tag textual data

接下来,我们思考如何利用非标签类型的文本数据(标题、简介等)。我们尝试了两种处理方法:

  • 方法一:直接根据文本数据生成 content embedding;

  • 方法二:先根据文本数据预测出一些标签,然后将预测的标签加到前面的 content-attribute graph 来生成更高质量的 content embedding。


上图是我们尝试的方法一,对于剧集简介,先用 BERT 模型得到句中每个 token 的 embedding,然后利用 SIF 算得每个句子的 embedding,最后将剧集简介中所有句子的 embedding 做平均后得到整个剧集简介的 embedding。这个方法的效果比较一般,接下来我们重点介绍方法二。


Metadata-BERT: 

use metadata to predict/complement content tags



方法二,主要是先根据文本数据来预测剧集的一些标签信息,然后将这些标签加到 content-attribute graph 中,接着调用前面的 tag-based embedding 方法即可。我们对原始 BERT 模型进行了改进,使得它可以接受各种类型的数据作为输入,包括标签类型数据 (tag-like metadata) 和非标签类型的文本数据 (non-tag textual metadata) 。新的模型被称为 Metadata-BERT,它能根据输入的 metadata 信息预测出更多的 tags,可以作为原始标签数据的一个扩展和补充。Metadata-BERT 模型利用 GraceNote keywords 数据进行训练,在测试集上的标签预测准确率达到 83%(比原始 BERT 的 61%有显著提升)。将 Metadata-BERT 预测出来的标签添加到之前的 content-attribute graph 中,能够进一步丰富 graph 的节点和边,从而产生质量更高的 content embedding。

5. Further: how about visual/audio data?



除了上述提到的标签类型数据和非标签类型的文本数据,一个剧还有对应的音频资源和视频资源。与前面的数据不同,音视频信息是一帧一帧的,一部剧是由一个图片序列和音频序列构成的。如何将整个序列转化为一个 embedding 向量,这是我们需要重点考虑的地方。我们的做法是:先将整个视频的视频帧和音频帧抽出来,然后用一些神经网络(如 Inception/VGGish)为每个视频帧和音频帧提取特征,最后用一些聚合模型(如 NeXtVLAD/BERT 等)将帧级的特征聚合为整部剧的 embedding。整个模型可以借助一些诸如标签预测、推荐排序等任务来训练。

6. A try: two-level-BERTs for v/a embedding learning


我们做了一个尝试,用两层 BERT 模型来做推荐业务中的 CTR 预估任务,简单来说,就是先用一个 BERT 模型来聚合视频的帧级/片段级的特征,以得到每部剧的 content embedding 向量;然后再用一个 BERT 模型来聚合用户信息,主要是历史观看记录 (history_shows) 以及目标剧集 (target_show);最后再接 MLP 进行 CTR 预估。这个框架比较大,将 content embedding 的学习直接放到具体的推荐业务中,是一个 end-to-end 的学习过程;缺点是两个 BERT 模型体量太大,收敛不太稳定。

7. Overview: generation of content embeddings


上图是 content embedding 生成过程的一个概览图。图中的 content data 包括剧的 metadata 信息、视频文件和字幕文件,其中 metadata 又分为标签型数据和非标签型的文本数据,而视频文件又包含视觉图像和音频信息。针对不同类型的数据,我们采用不同的模型,从而产生不同的 content embeddings,而这些不同的 embedding 也融合成一个终极 embedding。在实际应用中,可以根据业务特点来使用不同类型的 embeddings,或者使用最终的融合版 embedding。

Applications of content embeddings

1. Content similarity

接下来我们介绍 content embedding 的一些应用。content embedding 最直接的应用是可以简单方便地计算两个剧在内容上的相似性(比如计算 embedding 向量的余弦相似性)。下图右侧是完全基于 content embedding 向量计算出的与“钢铁侠”最相关的剧,可以看到大部分结果都还是比较合理的。在推荐业务中,很多时候需要计算 show-to-show relevance,而内容相似性可以作为其中的一个重要因子(其它可能需要考虑的因子包括基于用户 co-watching 信息的相关性等)。Show-to-show relevance 可以应用在 Hulu 的 You May Also Like (YMAL)、UpNext 等场景中,下图左侧是 Hulu 的 YMAL 页面。


2. Content embeddings as features in TV/Movies ranker, PCS, etc.


Content embedding 的另外一个应用是可以作为很多算法、模型的输入特征。如上图所示,左边是 Hulu 推荐业务中对 TV/Movie 的排序模型,右边是对 Home 页面的 collections 的排序模型,这两个模型中都使用了 content embeddings 作为输入特征(图中绿色框所示)。

3. Content embeddings for content cold start (in Retriever)


Content embedding 在内容冷启动方面也有着重要应用。以推荐系统的召回模型为例,如果召回模型只是基于用户的 co-watching 信息(如下图左侧分支),这样对于新加入的内容或冷门内容,可能采集不到足够多的用户观看记录,从而影响召回效果。这时候可以根据 content embedding 来构建另外一个基于内容信息的召回分支(如下图右侧分支),然后再用一些方法(比如 gate 函数)将两个分支融合起来(如下图中间的分支所示),从而提升对新内容或冷内容的召回效果。

4. Collection modeling with content embeddings

前面提到,Hulu 页面上每一排展示的内容被称为一个 collection(一个 collection 也即若干个剧构成的一个集合)。在 Hulu 的 Home 页面,会根据用户的行为数据对 collection 进行动态选择和排序,这就需要大量的 collections 供算法选择,仅靠 editor 手动创建 collections 是非常低效和耗时的。这里我们尝试利用算法,从如下几个角度来加速 collection 的创建:


  • 对已经存在的 collections 进行建模,从而可以对 collection 里面的剧进行扩展和更新;

  • 在 editor 手工创建 collections 时,让 editor 可以根据 embeddings 或 tags 来搜索相似的剧集,或者直接根据 editor 已选的剧作为种子来自动推荐合适的剧加入到 collection 中,从而提高 collection 的创建效率;

  • 用算法直接创建 collections,然后经过人工审核并命名后即可入库。

Thinking

最后,关于 content embedding 的一些思考:


  • 如何评价 content embedding 的效果?是建立一套以内容为主视角的评价指标,还是看 embedding 在推荐、搜索等业务中的效果?

  • Content embedding 与具体业务场景之间的 gap。比如,content embedding 的训练通常与业务目标是分开的,如何保证 content embedding 在业务场景中的效果呢(泛化性能)?如何利用业务相关的数据集或任务来调整 content embedding 呢?是否可以直接用业务相关的任务对 content embedding 进行 end-to-end 的训练?是提供内容理解的数据(比如像 content embedding 这种),还是提供内容理解的能力(比如算法模块等)更好呢?


上述问题都是开放的,没有定论,欢迎大家思考和讨论。


今天的分享就到这里,谢谢大家。


嘉宾介绍:

江云胜,Hulu | Senior Research Lead。


本文转载自:DataFunTalk(ID:datafuntalk)

原文链接:Hulu在Content Embedding的探索与实践

2021 年 2 月 03 日 08:001102

评论

发布
暂无评论
发现更多内容

嵌入方法在推荐系统中的应用(二十)

数据与智能

推荐系统 嵌入

Django搭建个人网站---Models的编写

IT蜗壳-Tango

6月日更

浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid

刘悦的技术博客

Docker Python3 测试 单元测试 测试环境 selenium

全网最详细XSS跨站脚本攻击,不是过来打死我!!

网络安全学海

程序员 网络安全 信息安全 XSS 漏洞修复

硬刚数据仓库|SQL Boy的福音之数据仓库体系建模&实施&注意事项小总结

王知无

使用uni-admin搭建后台管理系统

代码哈士奇

uni-app uniapp unicloud uni-admin

如何给岗位设计薪资结构?

石云升

股权 薪酬 职场经验 6月日更

为什么 Python 没有函数重载?如何用装饰器实现函数重载?

Python猫

Python

2021最新Spring Security知识梳理

北游学Java

Java spring

硬刚Presto | Presto原理&调优&面试&实战全面升级版

王知无

硬刚用户画像(一) | 标签体系下的用户画像建设小指南

王知无

企业级一站式大数据开发平台理论及实践

王知无

「SQL数据分析系列」11. 条件逻辑

数据与智能

数据库 sql 逻辑 条件

从2021钉峰会,看钉钉生态背后的强大赋能力

ToB行业头条

钉钉

使用SpringCloud的openFeign组件踩坑纪实

小江

dubbo Feign spring-cloud

硬刚ClickHouse | 4万字长文ClickHouse基础&实践&调优全视角解析

王知无

Data Mesh,数据网格的道与术

王知无

硬刚Hive | 4万字基础调优面试小总结

王知无

使用uni-upgrade-center搭建APP更新系统(升级中心+应用升级)

代码哈士奇

uni-app uniapp unicloud uni-admin uni-upgrade-center

区块链引发了一场独特的社会运动

CECBC

JAVA 面向对象 (十三)-- 关键字static

加百利

Java 6月日更

硬刚Apache Iceberg | 技术调研&在各大公司的实践应用大总结

王知无

架构师实战营 模块七总结

代廉洁

架构实战营

网络攻防学习笔记 Day57

穿过生命散发芬芳

网络攻防 6月日更

前端 JavaScript 中的三种 for 循环语句总结

编程三昧

JavaScript 大前端 for循环

元数据的管理

奔向架构师

数据库 大数据 数据资产

大势已来,区块链的真正价值是什么?

CECBC

让数字经济成滇中崛起增长极新引擎

CECBC

架构师实战营 模块七作业(王者荣耀商城的异地多活架构设计)

代廉洁

架构实战营

页面制作的15个CSS技巧

devpoint

CSS css3 Flex 6月日更

硬刚Hbase - 17道题你能秒我?我Hbase八股文反手就甩你一脸

王知无

Hulu在Content Embedding的探索与实践_架构_DataFunTalk_InfoQ精选文章