东南亚版“QQ 音乐”:JOOX 的音乐推荐重构之路
作者:karrysong,腾讯 CDG 应用研究员
通过大量使用 Embedding 的策略,对 JOOX 的推荐系统进行了一次重构。
JOOX 是一个在国内低调,在海外尤其是东南亚地区却可以和 Spotify、YouTube Music 等知名大厂形成市场份额五五开的音乐播放产品。
为了进一步提高用户体验,让用户能够更轻松的享受音乐。我们通过大量使用 Embedding 的策略,对 JOOX 的推荐系统进行了一次重构。
Why All In Embedding
JOOX 的音乐推荐场景和我们熟知的 QQ 音乐等比较相似,主要包含 Daily Music、动态歌单、专辑、歌手等场景的推荐。不同的是涉及到的国家地区比较多,会遇到语言、风俗习惯、品味差异等在国内极少遇到的问题。与此同时,我们还面临着计算资源紧张、数据存储压力大、GPU 资源匮乏等不可抗力因素的制约。
上述的种种问题就需要我们能够建立一套不怎么耗费资源且高效的系统进行内容推荐,而且还要保证结果的可控性。特别是面对马来西亚、泰国等风俗习惯特殊的国家,错误的推荐内容会让他们认为是产品 Bug。同时,在音乐等内容推荐的场景中,我们其实是很难给计算机找到一个合适的表达,告诉他这是什么并让他理解这个内容的含义,除非你愿意人工的给每个音乐和用户打上各种标签。
Embedding 向量作为一种复杂特征的降维表达,在 ML 中具有非常重要的意义,说他是最强的Info Representation也不为过。除了可以直接用于 CTR 模型的特征外也可以通过 Embedding 的结果计算 Item 或者 User 之间相似度进行推荐。同时,Embedding 不需要太过实时的学习,一次学习,受用一周,极大的减少了资源的消耗。而且当前训练好的模型可以作为下次训练的 Pre Trained 模型,等于是一个可持续发展的模型,通过不断的构造新的“语料”,模型甚至可以和你的产品一起进行成长。
What Is Important For Embedding
无论是什么 Based Embedding,都离不开下面几个核心的问题:
构建 Doc(训练样本)的方式----不同的 Doc 构建方式(样本收集)代表了 Embedding 不同的表达内容。
如何通过模型让 Vector学到东西----包含模型的选择“label”确定。
效果的评估----形如 Word2Vector 这种非监督的模型,效果的评估是非常重要的。
使用方式----不同的 Embedding 如何应用到合适的场景中。
下面的内容,也将主要围绕这几个方向介绍我们的策略。
How To Embedding
推荐系统的核心就是寻找用户和内容之间的关系,因此我们的 Embedding 也主要分为这两大部分。不过基于不同的内容和场景,我们采用的 Embedding 的方式也不尽相同。
歌曲
Word2Vector
Doc 的选择
一个session内用户产生有效收听的歌曲 list,我们尝试了基于时间维度的 session、基于 action 的 session、基于听歌数量的 session 分别做 Doc 进行训练。最终发现基于用户截断 action 的 session 做 Doc 效果是最好的。
直接使用用户自建歌单做 Doc,并通过内容和数量的限定来保持 Doc 的可用性。
Model and Train
由于用户听歌行为 List 是一个非常Dense的序列,采用常规的 SKIP-GRAM Object 用 Negative Sampling 训练即可。
评估
除了一些主要的离线指标之外,我们主要依赖各个地区的编辑反馈我们计算出来的相似歌曲和 ABTest 来进行评估。
在验证的过程中,我们发现不仅能将同“品味”的歌曲聚合在一起,还能将不同风格的歌曲聚合在一起。
基于 CNN 的音频频谱特征提取
歌曲除了歌词和风格之类的特征外,还有音频信号所代表的音色、音调等信息,这些特征如果用 Vector 表示出来也是一个非常 powerful 的信息。
我们选择将音乐的音频信号转化为频谱,然后通过CNN做一个图片分类,Label 是一个 128 维的向量,代表这个音乐的音色信息。
我们将最终 softMax 输出的结果作为一种 Music 的表示。
User
NN Based
这里我们参考了Youtube之前发的一个 paper,通过一个 DNN 来同时获取 user 和 item 的 Embedding 表示。
这里最关键的得到 User 的 Embedding 表示,因此我们用到的特征都是 User 相关的,如用户的长短期兴趣、用户的行为数据、用户画像等。Label 就是用户感兴趣的歌曲,大概 30W 个左右。
模型训练完成后,我们需要将 DNN 的Last Layer作为 User 的 Embedding 表示,SOFTMAX 的权重就是 Item 的 EMbedding 表示。
Music Average
另外还有一种简单的方式得到用户的 Embedding,就是将用户最近收听的歌曲 Embedding 做均值得到。
How To Use Embedding
Embedding 的建立对整个推荐系统来说是一个非常重要的环节,不仅可以用于召回源的构建,也可以作为 CTR 模型的特征,提高模型准确率。
召回策略
相似歌曲、用户、歌手
当我们有了 Music 的 Embedding 表示后,就可以通过cosine距离来计算得到用户喜好歌曲、歌手的相似歌曲、歌手来给用户进行推荐。
同样的,也可以通过相似用户的计算,给用户推荐相关歌曲。
inner product
之前提到的 NN Based 方式获取的 Embedding,由于 User 和 Item 的 Vector 是在同一个向量空间的,因此我们可以通过内积的方式计算一个分值,倒排后给用户进行推荐。
精排特征
User Interest Embedding
用户喜好的歌手和歌曲是非常多的,但是兴趣值却相差甚远。如果简单的用 Average 来得到歌手或者歌曲的兴趣表示其实是有一定问题的。因此,我们采用了 CNN 中POOLING的策略,将用户歌手、歌曲的兴趣做了重分配。
User Short Interest Embedding
用户最近收听的歌曲按照时间前后分配不同的权重对歌曲 Embedding 进行Average处理。
用户搜索点击的 Token Embedding。
User Dislike Embedding
主要包含用户不喜欢的歌手、歌曲的 Embedding
JOOX Embedding In The Future
目前我们采用的 Embedding 方式都是较为简单的 word2vector 或者 DNN 的方式,前期主要是为了高效的完成整个流程验证策略的可行性。后续也是我们现在正在做的,要通过一些更为高阶的方式构建 User 和 Item 的 Embedding,例如 Transform 和 Graph Embedding 的种种方式,进一步的提高 Embedding 的表征能力。
腾讯技术课直播预告:
4月28日(今天)晚上8点-9点