resume-2020
目录
- 沉浸式视频排序
- 新闻Push推荐排序
简历在老地方
1. 沉浸式视频排序
沉浸式视频(背景是黑色的)具有自动播放、自动下滑的特点,而且沉浸式视频的视频长度跨度很大,短则10s+,长则2h+。
如何合理的划分正样本和负样本是特征、模型优化的前提!原始正负样本比例大概 5:1。
主要有以下操作:
- 根据正样本的停留时长dwell、正样本的视频长度video_length,设计一个公式动态计算完成率阈值finish_ratio_threshold,然后将 finish_ratio < finish_ratio_threshold的正样本进行丢弃;(也尝试过将正样本转化成负样本,效果不好);
- 考虑到沉浸式视频是一个相对独立的场景,因此衡量用户的短期兴趣是十分有必要的,因此将用户最近click的docid、最近view的docid加入到训练中,用以充当用户的短期兴趣;
- 其他的特征进行统计候选值的个数,例如只在oppo平台上进行实验,U_OS的候选值只有android,所以这个特征没什么用
- FM模型/DNN(full-connect)模型,用embedding矩阵代表系数的思想
2. 新闻Push推荐排序
编辑推送每天候选用于排序的文章只有200~300篇文章,机器推送数量会比较多一些。 同时编辑推送的文章直接用于排序,没有召回阶段,机器推送的文章是通过用户的tag标签进行召回的。
因此在排序的过程中要加入一些提高相关性的操作:
- 原始训练数据正负比例 1:6,对负样本进行欠采样到正负比例 1:3
- 在训练过程中参考DSSM中,伪造一些负样本加入到训练中(原理下面解释)
- 添加match特征,例:matchprofile U_CT D_CT A_CT,意思是将U_CT和D_CT中的值取交集,以新的facet A_CT加入到训练中
- 同时使用信息流数据进行warmup(可以认为使用信息流模型的参数来完成初始化Push模型)
伪造负样本的原理
- 前提假设:
- 历史将推荐给用户的Push文章都是模型认为和用户强相关的文章。
- 原理解释:
- 数据中存在着正样本和负样本,但是这些样本都是和用户强相关的,都是模型认为用户感兴趣的,但是却返回了不同的行为。
- 此时用这样的数据训练模型很难学习到哪些是和用户相关的、哪些是和用户不相关的,所以需要伪造一些和用户不相关的样本数据加入到训练中。
- 实现原理:
- 训练过程中,存在几个数据结构:
- LRUCache:统计正样本中的文章出现的次数
- sample_table:根据LRUCache中统计的文章出现次数,参考word2vec的采样表计算方式计算采样表
- 流程
- 1.训练数据流中来到一个正样本 (userId, docId, label=1.0)
- 2.LRUCache中docId出现的次数加一
- 3.每隔60秒根据LRUCache中的值重新计算一次采样表
- 4.从采样表中随机采样docIdFake,组装伪造负样本 (userId, docIdFake, label=0.0)
- 5.将伪造负样本加入到训练中
- 训练过程中,存在几个数据结构:
3. 总结
- 跳槽找工作刷题很重要,要熟练掌握基本的数据结构和算法,所以不能停止刷LeetCode
- 对自己做的项目要深入,讲给别人听的时候,要让别人觉得确实如此
- 对于自己使用的一些技术,要知道其来源和适用场景
- 对数据的规模,调整等要清楚,对模型的实现细节,整个流程要搞明白,知道不同的模型适用什么样的场景
- 一些常用的调参手段、案例要能讲清楚,评估指标,计算方式要掌握
- 对GBDT、XGboost的工业级训练、Serve最好能有了解,以及树模型的优缺点,输出特征重要性、原理等
- 深入了解Python、C++
以上就是本人 2020年,也是人生中第一次社招的经验总结。完结,撒花!