04 | 特征工程:推荐系统有哪些可供利用的特征?
04 | 特征工程:推荐系统有哪些可供利用的特征?
讲述:王喆
时长15:36大小14.25M
什么是特征工程
构建推荐系统特征工程的原则
推荐系统中的常用特征
1. 用户行为数据
2. 用户关系数据
3. 属性、标签类数据
4. 内容类数据
5. 场景信息(上下文信息)
小结
课后思考
赞 60
提建议
精选留言(48)
- 朱月俊2020-10-10选择音乐,哪些因素是我关注的? 我经常会听五类歌曲: 1.听网络流行歌曲(听大家听的); 2.听一些我喜欢的风格的歌曲(励志类,空灵类,感伤类); 3.听一些我喜欢的歌手唱的歌,比如汪峰等; 4.听我看过的电视剧,电影,动漫中的背景音乐; 5.听一些朋友推荐的歌曲; 如果我是音乐app特征提取工程师的话,我会提取哪些特征? 首先将特征分为文中提及的五类吧。 1.用户行为数据 用户在音乐app上的行为,包括浏览,收藏,评论,点击,播放,时长,次数等。 2.用户关系数据 用户的关系数据。 3.属性,标签类数据 歌曲的多维特征,用户的多维特征。 4.内容类数据 对音乐进行语音识别,提取关键特征。 5.场景信息(上下文信息) 跟小作文几要素差不多。 时间,地点,人物,情节。展开
作者回复: 非常好和全面,赞一个。
共 3 条评论97 - 张弛 Conor2020-10-12我在选歌的时候,信息重要性从高到低依次是: 1.听歌的目的。比如是为了放松,冥想,学习还是运动。目的决定了歌曲是安静还是激昂,舒缓还是节奏感强烈。 2.歌曲或歌单是否受欢迎。定下基调后,我一般会选择收藏或播放量较多的歌曲。这样一般不容易采坑。 3.歌曲的旋律与当下状态的匹配度。当下的状态可能是心情,情绪或身体的疲劳程度,而旋律与状态的匹配也很重要。 如果我是一名音乐 APP 工程师, 1.用户听歌的目的很难准确预测,但是可以通过“隐性”数据去推测,比如搜索关键词等。 2.歌曲或歌单是否受欢迎,则可以通过歌曲或歌单的播放量、收藏量去建立特征,而具体到人和歌曲的关系时,还可以进一步具体到单曲循环的次数等来细化特定用户对特定歌曲的喜好程度。 3.当下的状态也很难显性的获得,则可以根据历史听歌记录去推测用户的生理节律,例如夜晚会愿意听舒缓的歌曲,运动会愿意听节奏感强烈的歌曲等等。展开
作者回复: 非常好的答案,比我之前看到的答案还细致一些。能够完全从用户角度考虑,然后反映到工程实践上。
共 2 条评论42 - 逆流向善的阿鱼2021-04-24音乐App 1.影响我做决定的关键信息: A. 个人主观角度 a.不同时间段【起床刷牙、工作时间、跑步时间、洗漱时间、睡前时间】 喜欢的类型不同 b.地理位置【寝室、办公室、室外、健身房】, 对应不同的状态 c. 心情/ 情绪状态 【 不同情绪状态 会 持续 听 不同类型 的歌曲】 B. 客观角度 a. 最近热议的 新歌 【流行度】 b. 最近热议的电影 的主题曲 【流行度】 c. 朋友最近在听的歌曲【用户关系】 d. 热门歌曲【我自己个人对这类歌曲喜好度偏低】 e. 所在地区大部分人都喜欢的歌曲 作为音乐App工程师的角度的特征 A. 易被工程化: a. 不同时间段 喜欢的 音乐 b. 不同地理位置 喜欢的音乐 c. 热门歌曲【当地热门,全球热门,中国地区热门】 e. 基于社交网络的歌曲推荐【基于用户的协同过滤、基于好友关系的推荐】 B. 不易被工程化: 心情/情绪【或许可以尝试短期内在听歌曲类型去提取?】 特征方面: 用户交互特征: 点击、收藏、点赞、踩、评分、评论【好/坏】、转发、播放完成度、浏览评论时长 用户属性特征:年龄、性别、职业、收入范围、所在地区、地理位置、不同时间段对各音乐类型的偏好度、不同地理位置对音乐类型的偏好度 用户关系特征:好友关系、亲密好友关系、有相同爱好的人群【基于用户协同过滤top K得出】 场景特征:用户当前所处位置、用户当前状态【用户自行设置?】、当前时间段、是否工作日、是否周末、是否节假日、 音乐特征:是否优质音乐【评分】、音乐风格、音乐时长、歌手、专辑、发行年月、所属标签、流行度、被重复播放的中位数 思考: 特征的更新频率: 用户:分为长中短期用户画像、仅保存三个月内活跃过的用户的画像以减少存储? 音乐:流行度需要按日期更新、热门程度也可能需要跟节假日相关【圣诞节=》圣诞结】展开
作者回复: 非常赞,我见过最全的思考,推荐大家参考。
18 - 张弛 Conor2020-10-12老师,想请问一下为什么在用户行为数据中,将评论数据作为隐性反馈行为呢?因为我的理解,显性反馈行为就是用户对物品的直接评价(评分,赞等),但是评论也算是用户对物品的直接评价,所以我很好奇为什么评论会是隐性反馈呢?(我个人的解释是,在某些场景下,用户的评论并不一定是对物品的评价,比如对于新闻来说,评论可能是对于内容本身的讨论,而不是用户是否喜欢该新闻,但是对于电商类网站,对于物品的评论则可以看做是显性反馈行为,不知道这样理解是否正确呢?)展开
作者回复: 评论应该一般是以文本的形式存在的,所以其实很难直接判断出用户的好恶,需要进一步通过nlp等手段处理。这和评分是不一样的,评分能可以直接通过分数的高低判断用户的喜好程度。
18 - Crystal-clear2020-12-01选择音乐我关注的点,理性总结来说分为三个方向: 1.歌本身:歌名,歌手,歌曲风格,歌词语言,歌曲发布时间,是否约束vip等 2.个人:心情,在做什么,好友推荐等 3.其他:所处环境,歌在APP内的位置,歌的播放量,评论数等 作为一名音乐推荐工程师,在关注用户历史行为信息的同时,现在更应该在乎用户新的行为变化。这是我自己的经验,我一直喜欢听比较宁静一点的歌,但是有一天我突然想听欢快很多的歌,我面临了很多问题,第一我怎么去搜索,第二搜索结果那么多,我怎么选择,第三在搜索结果中随意选择一首总会让自己失望,第四下一次我又该怎么办呢等等,同时你的搜索结果中依旧会出现原来风格的歌曲,这让自己局限在一个风格的“茧房”里面,很难受很无语。所以用户新行为是在推荐系统已经盛行的时代里面更应该关注的地方!展开
作者回复: 非常好的答案。 对于最后一点的想法我觉得非常好,也是我们一直强调的time decay已经exploration的思想,推荐其他同学借鉴思路。
共 2 条评论15 - shenhuaze2020-10-09王老师,在线预测的时候,模型所需的特征是直接从数据库读取,还是在线实时组装?我在想如果只是用户或者物品自身的特征的话,可以从数据库读取,但如果是用户和物品的交叉特征的话,是不是必须实时组装?
作者回复: 非常好的点。一般来说如果组合特征可以在线处理,最好能够在线处理,因为组合特征有组合爆炸问题,为了节约宝贵的存储资源,一般不直接存储。 但是对于有些不得不存储的组合特征,比如 用户x物品的曝光、点击记录,如果线上模型需要的话,还是要存储到数据库中,因为这些特征你没办法在线组合。
共 5 条评论12 - 金鹏2020-10-09音乐产品更加依赖场景性和心情,在工作、学习、跑步、睡眠、开车、高兴、优伤等等,希望听到的音乐是不同的。所以市面上的音乐目前主要以歌单的形式来推,可以更好的让用户快速找到符合自己当下场景的音乐,感觉更是个强搜索型的产品,音乐的推荐策略更像是一种补充。 针对我个人而言,听音乐时所处的场景或心情、喜欢的音乐类型、喜欢的音乐明星、音乐新热榜、收藏过的歌单 音乐所处的场景 | 用户位置POI数据、历史时段听音乐歌单 | POI数据与音乐匹配度 心情 | 可以通过近几次搜索数据对推荐做干预 | 搜索关键词语义分析 感兴趣的音乐 | 播放历史 | 音乐相似度(可以是音乐Tag、旋律,现在可以基于旋律做歌曲的归类) 喜欢的音乐明星 | 明星收藏、历史播放、点赞、购买等行为 | 音乐新热榜 | 新内容池、热度内容池 | 多样性探索、新鲜度、热度数据 收藏过的歌单 | 收藏数据 | 收藏相似度展开
作者回复: 非常好了。如果是歌单的形式的话,确实歌单更像一个搜索词,更接近一个搜索问题。
10 - 马龙流2020-10-12像多模态或者是通过其它预训练方法得到的向量,直接加到推荐排序模型作为特征的话,感觉都没有效果。不知道你这边有没有碰到类似问题呢。我理解是预训练学习的目标和排序学习目标并不一致,不知道大佬怎么看这个问题
作者回复: 确实存在多模态特征效果不强的问题。我觉得还是目前多模态的技术本质上还处于比较初期的阶段。 比如用一些CV的技术去处理视频图像,识别出一些物品,比如视频里有汽车,有甜品之类。但你要说这些物品对于推荐效果到底有没有影响,我觉得还是过于微弱了。远不及知名演员一个要素的影响大。 所以问题本质上还是出在你对特征的理解和业务场景本身的理解上。
共 6 条评论9 - pedro2020-10-09回答课后问题,按照电影的套路,关联的信息大概有:歌是谁唱的?(比如我的idol),歌的风格是什么?(比如我超喜欢r&b),歌的时长(太长的一律跳过),至少点击过或者单曲循环过?至少听过类似的或者听过该歌手的? 歌的内容即歌词,旋律,副歌?等等 难以被工程化的是歌词内容,毕竟大家都不是专业音乐人,flow和verse这种东西没法去很好的量化,因此特征提取的关键是该特征是否能被量化,如果可以,那可定是可以用来提取特征的,比如说歌的作者和种类,是否单曲循环等。展开
作者回复: 歌词通过nlp,旋律通过一些模式识别也许可以提取出一些风格相似性之类的特征。但正如课程中说的,这些内容类信息都需要进一步处理后才可被推荐系统利用。
5 - 夜雨声烦2020-10-09影响因素:当时的心情,时间,天气,歌名,歌手,歌曲类型,播放量,是否top,好友中有人听过; 工程师角度: 当时的心情(无法获取)、时间(24小时划分成十个时间段表示)、天气(晴、阴、雨)、歌名(Embedding)、歌手(Embedding)、歌曲类型(onehot)、播放量、是否top(onehot)、好友中有人听过(onehot).展开
作者回复: 非常好,唯一确实的可能是自己的行为历史,就是听过哪些歌,以及这些历史跟当前要推荐歌曲的联系。
共 2 条评论4 - 李@君2020-10-09我在选歌的时候主要是听前几十秒,如果觉得好听就会继续,如果不好听,就跳过。这个也是很难被量化的吧。
作者回复: 其实是一种正负样本的定义问题。在训练中的作用还是非常大的。
共 3 条评论4 - Geek_8a732a2021-08-05如果我是用户的话 1、歌手(不仅限于唱歌的人,还有作曲人、作词人等)和专辑 2、歌曲类型、曲风、词风,比如是治愈的,还是其他 3、影视剧主题曲 4、别人推荐的 5、当下的心情,或者正在干什么事情 如果我是工程师的话 1、用户行为数据 用户的点赞、分享、评论、收藏、播放时长等数据 2、用户关系数据 3、属性、标签类数据 歌曲的歌手、制作人、专辑、发行年份、曲风等信息,用户的年龄、偏好等信息 4、内容类数据 用户的评论数据、音乐中更细致的信息,如使用的乐器等等 5、场景信息 比如一天中的什么时候,天气等 用户都在什么时候听这些歌曲,找到规律,可以在特定时间,为用户推送同类型(比如同曲风、同歌手等)的歌曲 比如猜测用户是在工作还是在休息等等展开3
- Geek_0d974b2021-02-18请教实际工作中的一个问题,模型训练好上线之后,发现遗漏了一些特征,这个时候除了retraining 还有别的选择吗?
作者回复: 这个肯定要retrain的。我感觉你的离线和online代码都需要修改吧?
共 2 条评论3 - loode_2021-03-24懒人笔记: 特征无非三个方面: (1)用户特征,主要是用户画像属性特征,如性别年龄,爱好,收入等; (2)物品特征,可以是物品的标签,内容主题或者所属类型等; (3)用户与物品的交互特征,如点击、分享、观看、购买、收藏等,且对于不同的行为可以赋予不同权重,另一个方向是根据时间来给不同的行为赋予权重,如越近的越能反映用户当前兴趣;此外,交互也可以按显性和隐性反馈来赋予不同的权重。 对于用户属性特征,一般是进行onehot处理,物品特征则可以multi-hot,也通过交互行为来进行word2vec类似的embedding向量化表示。 而交互行为,除了可以word2vec 然后进行pooling处理外,常见的做法是Attention(din)和利用序列化模型来进行模拟(dien中的gru)。展开
作者回复: 除此之外的context特征也是非常重要的,不能忽略。
2 - 粪进2021-07-08王老师好,请教一个实际问题,我当前在做信息流中的广告点击率转化率预测。我们当前选取了n天的转化率作为特征,是一个连续值,我们现在用的是等距分桶方法将其离散化。 ①有没有评价分桶结果的方法呢?比如尽量均匀?还是正态分布? ②有资料说等频比等距好,这也是一定场景下吧? ③实际工程中老师有什么推荐尝试分桶的方法吗? 谢谢。展开
作者回复: 等频往往会好一些。没有什么评价分桶的方法,就是看模型最终的效果怎样。
1 - Geek_60d9332021-06-30请问王老师是否可以从特征实时性角度聊聊,哪些特征对实时性有更高的要求?以及在线特征,离线特征的业界使用方法?
作者回复: 这个话题比较大,以后专门写文章跟大家交流吧。
1 - 陈威洋2021-06-18老师好!~ 如果我是一名音乐 App 的用户,我在选歌的时候,以下6个关键信息影响着选择: 1.歌手是谁? 2.音乐的旋律是否我喜欢? 3.是抖音热门歌曲吗? 4.歌曲类型是否我喜欢? 5.我是否听过? 6.我当时心情怎么样? 可以被用来提取特征的有:第1 到 5 个特征信息。 很难被工程化的有:第6个特征信息。 作为音乐 App 推荐工程师,我尝试着分析 可以被用来提取特征的 数据该如何表示: 1.歌手是谁? 该特征可以利用的数据有:歌曲中的歌手,作曲人,作词人等元数据 和 我的历史听歌记录。 特征表示为:元数据标签类特征 和 感兴趣标签的相似度。 2.音乐的旋律是否我喜欢? 该特征可以利用的数据有:该歌曲的音乐数据 和 我的历史听歌记录 (音乐的旋律 需要通过自然语言处理、计算机视觉等技术手段提取关键内容特征,一旦这些特征被提取出来,就跟处理属性、标签类特征的方法一样,通过 Multi-hot 编码,Embedding 等方式输入推荐系统进行训练。) 特征表示为:旋律标签特征 和 我感兴趣的旋律标签的相似度。 3.是抖音热门歌曲吗? 该特征可以利用的数据有:歌曲在抖音流行热度分数 特征表示为:歌曲流行度特征 4.歌曲类型是否我喜欢? 该特征可以利用的数据有:当前歌曲的类型 和 我的历史听歌记录。 特征表示为:歌曲类型 和 我的兴趣的相似度。 5.我是否听过? 该特征可以利用的数据有:我的历史听歌记录。 特征表示为:是否听过这首歌(boolean型) 6.我当时的心情怎么样? 该特征可以利用的数据有:无法抽取 特征表示为:无 (个人分析:这个可能要获取GPS和具体时间,他当时听什么歌,什么天气,才可以侧面判断他当时的心情,这些获取难度大,而且判断不一定准确) 分析好了,但是具体落地还不知道怎么做... 分析的不对的地方,请老师斧正~展开
作者回复: 分析的很好。落地不知道怎么做?有了特征就到了建模的环节,根据后续课程中的推荐模型篇的思路,可以选择合适的模型结构去整合这些特征。
共 2 条评论1 - Sean2021-04-28分享自己选歌时的参考依据 1. 歌手、旋律 2. 是否为某部电影、戏剧的配乐或主题曲 3. 歌曲类型(抒情、摇滚等等) 4. 热门歌曲 若要工程化萃取特徵可以 1. 用户行为数据 对歌曲的播放时间、播放次数、收藏、分享、搜寻 观察用户不同时段喜欢听的音乐类型有无不同 2. 用户关系数据 可以在音乐APP建立社交机制,观察使用者的好友都听了哪些音乐,或是使用者都在关注哪类音乐 3. 属性、标签类数据 用户:年龄、性别、职业、出生地、现居地、家庭状况、学历等 音乐:歌手、歌名、出于哪个电影、长度、评分、出版时间等 4. 内容类数据 将歌词透过语意理解转换为embedding当作特徵 或是也可以关注这一首音乐的哪一段被重複聆听的时间最长?(比如某些歌取的副歌特别好听,大家会重複聆听),将这个资讯也纳入特徵,搭配注意力机制来去做embedding 若以旋律做考量,可以透过声纹embedding来产生特徵 5. 场景信息(上下文信息) 目前位置、目前时间(週末、上下班通勤、特殊节日) 或是针对用户最近常听的音乐类型当成上下文信息展开
作者回复: 非常好
1 - 波2020-10-10影响因素 1.歌曲风格 2.歌曲发布时间 3.歌手标签(流行,摇滚,轻音乐) 4.听歌时间(工作日,节假日,白天,晚上) 5.听歌地点(旅行,办公,家里) 6.好友在听的歌 作为工程师可以提取的特征 播放歌曲维度 1.歌曲风格,所属歌手,是否第一次播放,历史播放次数,是否快进,当前播放和用户收藏歌曲的风格系数相关性,热门歌曲, 2.人维度,播放地点,播放时间,最近一层登录时间,上一次登录且完整听完或者重复播放的歌曲id向量展开
作者回复: 赞
共 2 条评论1 - LC2023-02-22 来自浙江我觉得比较难的是,根据用户情绪给他们推相应的歌或者歌单。音乐是情绪的表达方式,而且是非常有效的表达方式,怎么将用户情绪抽象建模,可能目前技术比较难做到。