Hulu 是美国领先的互联网视频流媒体平台,拥有大量的电影、电视剧等视频资源,对这些内容的理解和表示是 Hulu 的一个重要研究方向。Content Embedding 技术将内容表示为向量,以利于后续算法、模型的处理和分析。本次分享将介绍 Hulu 在 content embedding 方面的一些实践和尝试,包括 embedding 的生成及其在业务场景中的应用。
Hulu 是一个视频流媒体平台,主要由三个要素构成,分别是用户 (users)、内容 (contents) 和广告 (ads)。Hulu 的商业模式也是围绕着这三个要素进行的,即 Hulu 花钱购买内容资源并提供广告展示位,用户付费观看内容,广告主付费购买广告位。
Hulu 提供了种类丰富的内容资源,主要是电影、电视剧,以及一些体育、新闻、儿童相关的节目;既有点播的内容 (VOD contents),也有直播频道 (LIVE channels)。
Hulu 的内容理解可以分为四个不同的层次:
Hulu 上的每个剧集(电影/电视剧),除了最直接的视频资源外,还有一些与之相关的信息,包括剧的标题 (title)、简介 (description)、导演 (director)、演员 (actor)、主题 (topic)、类型 (genre)、标签/关键词 (tag/keyword)、获奖情况 (award)、分级情况 (rating)、字幕信息 (caption)、海报/封面图 (cover image) 等。
上面提到,与一个剧集相关的数据有很多(如下右图所示),它们具有不同的形式(标签类、文本类、图像、视频、音频等),从不同维度刻画剧集,具有丰富的信息。那么,如何综合考虑这些信息,给每个剧一个表征呢?表征,从某种意义上来说也是一种信息压缩,用更简洁、有效、本质的形式来刻画一个东西。典型的表征有如下几种:
Embedding 是数学上的一个概念,指把一个数学结构经过某种映射嵌入到另一个数学结构中,这个映射需要保持某种意义下的结构不变性。类似地,content embedding 是将剧集映射到一个低维稠密的向量空间中,并尽可能让内容相似的剧对应的 embedding 向量也比较接近。在 Hulu,生成 content embedding 时需要考虑多种不同模态的数据,包括标签类数据(导演、演员、类型、标签/关键词等)、文本数据(标题、简介等)、图像(海报、封面图等)、视频、音频等;另外,考虑到电影/电视剧都是长视频,要压缩为一个低维向量需要很高的压缩率,并且在算法的训练和测试过程中都没有 ground-truth 可以参考,因此生成 content 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 向量越接近。
上述基于 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。
除了上述提到的标签类型数据和非标签类型的文本数据,一个剧还有对应的音频资源和视频资源。与前面的数据不同,音视频信息是一帧一帧的,一部剧是由一个图片序列和音频序列构成的。如何将整个序列转化为一个 embedding 向量,这是我们需要重点考虑的地方。我们的做法是:先将整个视频的视频帧和音频帧抽出来,然后用一些神经网络(如 Inception/VGGish)为每个视频帧和音频帧提取特征,最后用一些聚合模型(如 NeXtVLAD/BERT 等)将帧级的特征聚合为整部剧的 embedding。整个模型可以借助一些诸如标签预测、推荐排序等任务来训练。
我们做了一个尝试,用两层 BERT 模型来做推荐业务中的 CTR 预估任务,简单来说,就是先用一个 BERT 模型来聚合视频的帧级/片段级的特征,以得到每部剧的 content embedding 向量;然后再用一个 BERT 模型来聚合用户信息,主要是历史观看记录 (history_shows) 以及目标剧集 (target_show);最后再接 MLP 进行 CTR 预估。这个框架比较大,将 content embedding 的学习直接放到具体的推荐业务中,是一个 end-to-end 的学习过程;缺点是两个 BERT 模型体量太大,收敛不太稳定。
上图是 content embedding 生成过程的一个概览图。图中的 content data 包括剧的 metadata 信息、视频文件和字幕文件,其中 metadata 又分为标签型数据和非标签型的文本数据,而视频文件又包含视觉图像和音频信息。针对不同类型的数据,我们采用不同的模型,从而产生不同的 content embeddings,而这些不同的 embedding 也融合成一个终极 embedding。在实际应用中,可以根据业务特点来使用不同类型的 embeddings,或者使用最终的融合版 embedding。
接下来我们介绍 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 页面。
Content embedding 的另外一个应用是可以作为很多算法、模型的输入特征。如上图所示,左边是 Hulu 推荐业务中对 TV/Movie 的排序模型,右边是对 Home 页面的 collections 的排序模型,这两个模型中都使用了 content embeddings 作为输入特征(图中绿色框所示)。
Content embedding 在内容冷启动方面也有着重要应用。以推荐系统的召回模型为例,如果召回模型只是基于用户的 co-watching 信息(如下图左侧分支),这样对于新加入的内容或冷门内容,可能采集不到足够多的用户观看记录,从而影响召回效果。这时候可以根据 content embedding 来构建另外一个基于内容信息的召回分支(如下图右侧分支),然后再用一些方法(比如 gate 函数)将两个分支融合起来(如下图中间的分支所示),从而提升对新内容或冷内容的召回效果。
前面提到,Hulu 页面上每一排展示的内容被称为一个 collection(一个 collection 也即若干个剧构成的一个集合)。在 Hulu 的 Home 页面,会根据用户的行为数据对 collection 进行动态选择和排序,这就需要大量的 collections 供算法选择,仅靠 editor 手动创建 collections 是非常低效和耗时的。这里我们尝试利用算法,从如下几个角度来加速 collection 的创建:
最后,关于 content embedding 的一些思考:
上述问题都是开放的,没有定论,欢迎大家思考和讨论。
今天的分享就到这里,谢谢大家。
嘉宾介绍:
江云胜,Hulu | Senior Research Lead。
本文转载自:DataFunTalk(ID:datafuntalk)
领取专属 10元无门槛券
私享最新 技术干货