【云音乐】从手游APP到云音乐视频标签分类,时隔3个月再次面对多标签任务,终于摸索出了一些小经验。

  • 前言
  • 一个好用的评估函数
    • 常用的多标签任务评估函数
    • 我选择平均准确率
  • 合理的特征处理和模型
    • 特征处理
    • 合理的模型
  • 如何面对热门标签对冷门标签的压制
  • 总结

前言

之前在个推实习的时候,接到了对手游app的多标签分类任务,当初应该是10+个一级标签,20+个二级标签,两者之间是层次关系,当初还是懵懵懂懂只知道把所有爬下来的特征(文本、icon、包大小等)提取特征之后一股脑的拼接在一起然后随便叠几个dense层就sigmoid输出了。效果也一直不理想,对于结果的观察除了用tf自带的acc评估函数,就是人工加规则,做的非常苦恼。

最近在网易云实习,由于运维给mlog的打标并不标准,为了给mlog和user进行打散,所以需要做一个mlog多标签分类模型,对80w个mlog进行预测,共有666个标签。虽有都有现成的特征,但这次吸取了上次的经验,整个流程下来明显顺畅了很多,因此在这里想把自己的经验分享给大家。(代码和数据恕不能公开)


一个好用的评估函数

一个准确好用的多标签分类评估函数,直接决定了你优化模型的方向,也是你的指路明灯,之前一直用的acc,这明显没有考虑到标签不平衡的问题,这次任务中最多的标签覆盖率达到万,最少却只有几百。因此存在正负样本不平衡的情况。

解决方法:

  1. 单独观察每一个标签的召回、精准、F1值,方便了解模型对哪些标签表现较差,方便人工调整。
  2. 自定义评估函数,对于标签种类繁多,显然第一种方法不太现实,我们需要一个明确的指标来代表模型的优良性

常用的多标签任务评估函数

关于评估函数的详细介绍和更多其他评估指标可参考B站视频:多标签分类的评价指标(一)

我选择平均准确率

选择平均准确率这一评估指标的理由:
1. 该评估指标同时关注了正样本和负样本,考虑到了全局标签的可能性。
2. 相比于排序损失,其实现逻辑更加简明,自己实现起来比较友好。
3. 相比于汉明损失,由于阈值不好界定,人工选择阈值对评估函数有较大影响。

实现代码:

@tf.function
def average_acc(y_true,y_pred):sum_ = tf.reduce_sum(y_true,-1) + 1e-8index = tf.argsort(-y_pred)rank = tf.argsort(index) +1c = tf.where(y_true==1,y_pred,0)index2 = tf.argsort(-c)rank2 = tf.argsort(index2) +1ax = tf.cast(tf.reduce_sum(tf.where(y_true==1,rank2/rank,0),-1),tf.float32)return tf.reduce_mean(ax/sum_)

合理的特征处理和模型

特征处理

  1. 直觉的思考来说,如果我们手上有embedding特征,并且有几个离散的特征,直接将离散特征与embedding concat后丢给模型,这是不合理的,特别是当这几个离散特征很重要的时候,因为特征不来自同一分布或意义,直接concat相当于将这一信息抹去了。
  2. 参考解决方法,将类别特征和离散特征都人工转为类别特征,之后都各自建立embedding,embedding维度不用太高,之后再作拼接会更合理,将强特征embedding后,可以让他表达更多的信息。

合理的模型

  1. 分域学习特征再concat!!!这样做比直接concat后接dense会有不错的提升!我们希望模型能对各个域的特征单独进行抽象和学习充分后再将这些特征拼接在一起。这符合模型学习的逻辑。最简单的具体做法:将来自同一个域的维度特征单独接dense层进行抽象,之后将所有域的dense层结果凭借,再接dense层进行特征的交叉学习。这一方法可以根据自己的特征进行多样的变化,如何抽象同一个域的特征有很多方法。

    模型1:
    使用特征:—
    特征处理:特征直接concat
    模型分数:0.7371
    模型2:
    使用特征:—
    特征处理:特征分别抽象后concat
    模型分数:0.7583

  2. 请使用focal loss 或 幂次惩罚,这能给多标签任务带来不错的提升。具体实现可以参考我之前的博客。


如何面对热门标签对冷门标签的压制

  1. 尽管使用了一些解决类别不平衡的方法,但模型最后的推理让趋向于给那些出现频次较高的标签更大的概率值,这导致最后我们得到的mlog之前的区分度较低,这显然不利于打散。
  2. 最后我们通过计算各个标签的IDF值,在模型最后输出的各个标签的结果上乘上对应的IDF值。得到了较为满意的结果,通过人工抽样分析,发现一些比较冷门的标签的位次有所上浮,这一定程度上保证了mlog之前的区分度以及标签的多样性。

(也尝试过直接在模型训练过程中乘上该权重,让模型适应该权重,也有不错的效果。)


总结

最后可以根据业务需求对标签做一些剔除与合并。
我们通过最后得到的mlog多标签结果,去计算用户的标签偏好,将这两者的新特征加入到双塔模型中进行尝试,模型效果有不错的提升。

【云音乐】从手游APP到云音乐视频标签分类,时隔3个月再次面对多标签任务,终于摸索出了一些小经验。附自定义评估函数代码相关推荐

  1. 苹果笔记本能玩英雄联盟吗_英雄联盟手游可以玩云顶之弈吗 独立还是内置

    众所周知,端游云顶之弈和英雄联盟是一个客户端的,必须下载英雄联盟才能玩云顶之弈.那么Lol手游内能否玩上云顶之弈手游呢?今日光耀菌就解答这个问题,留有疑惑的玩家们快来了解一番吧! LOL手游能玩云顶之 ...

  2. 苹果笔记本能玩英雄联盟吗_英雄联盟手游可以玩云顶之弈吗 LOL手游玩法一览_英雄联盟手游...

    标签: 云顶 LOL手游是英雄联盟的手机版,目前日韩和东南亚已经开启正式公测了,许多玩家对这款游戏也是非常的好奇,那么英雄联盟手游可以玩云顶之弈吗,下面我们就一起来看一下LOL手游的玩法都有哪些吧. ...

  3. 手机游戏战斗服务器没有响应,奇葩战斗家手游APP无法登陆怎么处理 处理方案一览...

    奇葩战斗家手游APP无法登陆怎么处理 处理方案一览.奇葩战斗家是一款非常好玩的游戏,许多玩家被其优秀的内容和有趣的玩法所吸引.但是近日有小伙伴反应奇葩战斗家手游APP无法登陆,小编这里整理了一些奇葩战 ...

  4. 视博云android虚拟机,手游难推广?视博云云游戏解决方案助力游戏厂商破局

    原标题:手游难推广?视博云云游戏解决方案助力游戏厂商破局 昨天520,在这个表白爱的日子里,视博云为大家精心准备了最好玩的恋爱游戏 现在就带你们打开恋爱的大门. ①<拣爱>于2018年9月 ...

  5. 阴阳师手游如何用云手机无限多开换IP防封

    <阴阳师>的和风元素是网易游戏中是以<源氏物语>的古日本平安时代为背景设计的.游戏剧情以日本平安时代为背景,讲述了阴阳师安倍晴明于人鬼交织的阴阳两界中,探寻自身记忆的故事. 这 ...

  6. 棱镜刘大澎:云时代的手游SDK接入

    棱镜公司CEO刘大澎通过GameRes给大家分享他们是如何为手游开发商解决国内分发渠道过于分散这一难题的.刘大澎称,棱镜SDK的产品架构基于云端服务,可以为手游开发商提供最安全便捷的手游SDK接入服务 ...

  7. 软件手游app介绍推广页html

    简介: 可以用来推广自己的产品,比如手游软件app,喜欢的去下载. 网盘下载地址: http://kekewangLuo.cc/Xq20beFwv9H0 图片:

  8. 4、某手游app登陆算法分析【Android逆向分析学习】

    学习安卓逆向分析的一个小菜鸟,记录分析的"快乐时光",小白图个乐,大佬乎喷 分析的APP 泡泡手游包名:com.zqhy.xiaomashouyou版本号:8.3.7最小安装版本: ...

  9. 绝对干货 手游 App Store搜索引擎优化教程

    火热的手游市场引发了浩浩大军进入,每天全球各地有成千上万款手游诞生,要想在这汪洋大海中脱颖而出,无非就是提高曝光率.而曝光度也是所有资金短缺的开发者让自己的游戏进入市场的一大短板.那该如何在App S ...

最新文章

  1. 【多线程】0.理解一下5种IO模型、阻塞IO和非阻塞IO、同步IO和异步IO
  2. win7网络连接优先级设置
  3. mysql为什么总是错的_这个mysql如何总是错的
  4. 一个程序员的郁闷吐槽
  5. 项目管理工具_项目管理工具MS Project使用经验分享
  6. r语言 小树转化百分数_魅力语言小课堂|绕口令《说日》
  7. 使用C语言编写一个算数的除法运算(保留n位小数)
  8. EPLAN教程——导出CAD如何快捷配置
  9. 身份证前六位对应代码
  10. AvalonDock 2.0+Caliburn.Micro+MahApps.Metro实现Metro风格插件式系统(一)
  11. UG8.5中nxopen.dll等文件所在位置
  12. ElasticSearch教程——倒排索引及其数据结构以及优缺点
  13. 赏金猎人:德州堕胎法案 | 经济学人早报精选20210902
  14. 汉信码今发布:国家自主研发的二维码技术
  15. 【Unity】Obi插件系列(二)—— Backends、Updaters、Simulation
  16. 最好的体育测试软件,体育锻炼标准测试app
  17. shell-------数组遍历、切片、替换等操作
  18. Response.Flush()的作用
  19. npm install的解决方法试错,还没解决。
  20. 完美解决编译缺少文件,apt-file search 命令去查找依赖。

热门文章

  1. 解析Vue.js中的computed工作原理
  2. 二进制八进制十六进制之间的快速转换------ 心算笔算方法总结
  3. 基于visual Studio2013解决C语言竞赛题之1027 YN
  4. oracle分页查询数据(收藏)
  5. 因封杀Adobe 美司法部对苹果展开反垄断调查
  6. .NET中使用Memcached的相关资源整理 转载之DUDU 程序员打杂的站长
  7. 公众号点击图片变成另一张_微信公众号点击出现图片是怎么实现的?
  8. Pycharm详细安装教程
  9. linux 并行执行脚本,在bash / linux中并行运行shell脚本
  10. eclipse部署web项目