华为digix算法大赛2020机器学习赛道-搜索相关性初赛A/B榜rank1

华为digix算法大赛2020机器学习赛道-搜索相关性初赛A/B榜rank1

写在前面

耗时两个月多的华为digix算法大赛(链接)终于要在今天结束了。虽然说中间有经历过延期,不过我们8月份几乎都在考试(/(ㄒoㄒ)/~~),所以最终做的时间是一个月多一点。最终我们在机器学习赛道的ctr预估题目和搜索相关性题目的A/B榜上都取得了第一的成绩,算是拿到了通往南京的门票。

ctr预估A榜
ctr预估B榜
搜索相关性A榜
搜索相关性B榜
感谢我的两位队友,这个成绩是我们共同努力的结果。由于线下场馆决赛的时候只做ctr题,因此这里就把搜索相关性的方案先分享一下,ctr的方案就先保密啦🤫。

1.赛题和数据

先来看看官方的赛题描述。

赛题描述
简单来说,数据集里面每一条数据是一个query-doc对。训练集给出了每个query-doc对的相关度标签0-4,而测试集则要预测每个query-doc对的相关度分数。从数据形式上来看与ctr有相似之处,ctr是给出user和ad预测点击概率,这题是给出query和doc预测相似度,那么是否可以像ctr一样训练一个分类模型呢?其实并不是这样,下面会有进一步的分析。

这个题目的特征是比较友好的,出题方是已经把query和doc的重要特征直接给了出来,可以直接喂进模型而不需要手工构造特征。唯一有一点需要注意的是query_id和doc_id在训练集和测试集中是经过不同的脱敏处理的,无法对应起来,因此是不能在特征中使用的。这个其实是很好理解的,出题方希望我们进行相关度预测的时候不要利用query和doc的历史信息,而是完全根据两者的特征匹配程度来预测。按照我的想法,在搜索中如果使用过多历史信息会导致马太效应,使得一些匹配程度非常高但是冷门的doc无法被搜索出来。

2.评价指标

对本题的指标是关键,只有正确理解这个指标才能找到做这道题的方向。依然先看官方描述。

评价指标
简单来说,对于同一个query和多个doc,会得到多个query-doc对,每一对都有一个相关度标签0-4。我们的模型会对每一个query-doc对预测出一个相关度分数,然后基于这个分数对同一个query下的所有doc进行排序,接着利用真实相关度标签来计算ERR。也就是说,模型预测分数用于排序,真实相关度标签作为公式里的y来计算最终指标。由于ERR指标中排得越前分数占比越大,所以将相关度大的doc排得越前指标结果就越高。因此模型预测分数得是一个浮点数,这样才能更加精确地对doc进行排序。

因此,ERR是一个纯粹的排序指标,只与预测分数的大小顺序有关,而与预测分数的大小无关。在这一点上跟AUC是一样的,AUC也是纯粹的排序指标。那为什么ctr任务用分类模型做,而前面说到这题不应该用分类器呢?这是因为ctr是2分类,交叉熵得到的正类置信度可以直接作为点击率的预测结果。同时交叉熵loss可以把正类和负类推开(相比于直接回归分数),能达到更好的排序性能(只要把所有正例排在负例前面AUC就是1)。这里的ERR使用分类模型有两个问题,一是这里是五分类,不方便从五个分类置信度得到一个统一的分数,二是传统的交叉熵会把所有类别推开,无法保证相关度标签接近的类间距离也接近(当然这个其实可以通过label smoothing来解决)。这两个问题尽管可以通过一些操作来解决,但其实最终的效果也跟直接预测分数差不多。

3.模型

大家如果有看过群里的赛题解答视频,就会知道里面提到过处理搜索排序模型有三种基本思路:point wise、pair wise和list wise。point wise就是每一个query-doc对都分开处理,直接预测它的相关度分数;pair wise就是每一次的输入为一个query和两个doc,模型预测两个doc的相关度大小顺序;list wise就是将一个query和所有检索到的doc输入,学习如何将所有doc进行排序。

为了方便,我们选择了point wise和pair wise的方法。point wise的方法很简单,直接用lgb regression模型,学习指标为rmse。pair wise则使用lambdarank算法,学习指标为ndcg(大家可以自己去了解一下这个算法)。由于lgb同样已经封装好算法,因此直接调用即可。

两个模型均使用五折交叉验证来训练,得到两个模型的五折结果之后再将它们进行简单的加权融合,即可得到最好的结果。(A榜单模443,双模445;B榜单模447,双模449)

4.总结

其实这个题目是真的没怎么做,一是因为它在初赛总分里面的比例只有0.2,而且决赛也不用做这题;二是大家也都没怎么做,压迫感不是很大。A榜的时候弄了几天之后就没动过了,所以方法真的是很简陋,都是基础的东西,没有什么深入探讨😞。之前也没有接触过搜索排序的东西。所以这里就大概分享一下我们的方案,希望有这方面的大佬能够指点一下。

开源代码:链接

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值