visual studio能统计代码规模吗_TIANCHI天池-OGeek算法挑战赛分享及完整代码(亚军)...

3b3a94dc69ad3106a91ad0048bf18525.png

完整代码:

bettenW/TIANCHI_OGeek_Rank2​github.com
30bc73011d62d6942b1f082c6ec2abd6.png

写在前面

首先很幸运拿到本次大赛的亚军,同时非常感谢大佬队友的带飞,同时希望我的分享与总结能给大家带来些许帮助,并且一起交流学习。

接下来将会呈现完整方案!!!

c01ded863bcce6b9bf28dbf5bf6e6f16.png
  1. 赛题分析
  2. 数据分析
  3. 特征工程
  4. 算法模型
  5. 思考总结

1. 赛题分析

此次赛题来自OPPO手机搜索排序优化的一个子场景,并做了相应的简化,意在解决query-title语义匹配的问题。简化后,本次题目内容主要为一个实时搜索场景下query-title的ctr预估问题。

赛题特征:prefix(用户输入,query前缀),query_prediction(根据当前前缀,预测的用户完整需求查询词,最多10条;预测的查询词可能是前缀本身,数字为统计概率),title(文章标题),tag(文章内容标签)

提供数据:初赛复赛一致, 训练数据:200万 验证数据:5万 测试数据1:5万 测试数据2:25万

评估指标:本次竞赛的评价标准采用F1 score 指标,正样本为1,公式如下:

409fae5d621c1288b403d167401184d8.png

2. 数据分析

这一部分将会对部分数据进行分析,另外获取部分特征的点击率分布情况判断特征效果,看分布可以有一个很好的初步验证作用。

7562e235eb6785b95cd90204cf10baa0.png

这四个图是prefix在各自数据集的百分比统计,并以训练集中出现频次top10的prefix画出了每个数据集的占比情况,可以发现valid与testa和testb的分布相似,说明valid与testa和testb的查询时间比较接近,作为验证集线下比较可信。

f634a82a996b21fe9d4152ee4bd8299b.png

此处更近一步分析了train和testa、testb有较大的差异性。

792655ac36a5e94c87cd4d750b420f72.png

我们对数据做了一些分析,发现:

  1. 用户有可能会拼错prefix,如抖音 拼写成 枓音,分析发现,使用pinying会比中文大幅度减少不同值的出现次数,当然也有一部分不是拼写错误的,如痘印,所以最后我们中文和拼音的两部分特征都使用了。

2. 由于这是实时性比较强的搜索场景,分析发现,测试集中会有很大一部分prefix和title未在训练集中出现过。

0d0248723e41ceefe6c7b8e49214219e.png

除基础数据分析外,我们还分析了部分特征,比如prefix的长度特征,其用户输入prefix越详细,整体CTR也随之提高,其他特征的长度也有类似的趋势。

另外,相似度特征是非常重要的特征,prefix和title越相似度,点击的可能就越高。

2144301134ff8f8ce0e980ea9afda433.png

21b5bb235af8bb1d3e51d4c2c122318a.png

3. 特征工程

85b8dacca516e20372b7917b5e4aeb22.png

df2b1326cc7a7ebe4b83c500c794016e.png

505f3b17d19850612bb03834f0a839b3.png

b6cb0ebcc08cf4c85725c5788d126660.png

由于赛题的特殊性,给了我们验证集,通过观察训练集和验证集的数据,我们发现存在热点转移的情况,例如关于某个明星,title 1是高热点转换网页,可是到了验证集中,这位明星zhe'w的高热点title是另外的一些网页,说明实时热点性比较强

cdf1e29a03c7f383e866503e70f8f7c4.png

接下来是最关键的CTR特征。如果CTR特征做的不好,那就非常容易过拟合。我们这边采用了多种方式来防止过拟合,分别是多折交叉提取特征,平滑,以及采样。

从表格中(5)可以看出,不使用五折交叉提取特征,训练集的auc比验证集的auc高很多,这就非常容易过拟合,导致线上结果很差,(2)->(3)的过程就是相差了一个平滑,从而导致训练集和验证集上的auc都有所下降;此外,在我们的方法中加入了采样,是为了使得训练集和验证集结果都不会过拟合。

正如上表(4)所示,加入采样之后,训练集和验证集的auc都会有所降低,当然对非常近的数据可能不利,但是对训练集和测试集相隔比较远的数据,随热点的转移,CTR也会有所改善。

a6e199da289ed6343906f36e55fc8b36.png

用了五折提取CTR,同时对于每一折,进行了0.5的sample

4. 算法模型

对于此次比赛我们对传统机器学习模型以及深度模型都进行了尝试。

e60ba4b6d487b4bf5bded8f5ca1f7a13.png

3f433e17df3a4d2ddeeec49d4b790a35.png

TextCNN是经典的文本特征提取网络,TextCNN Concat模型 输入是tag,prefix,title,query_prediction(query_prediction对其进行拆分成10条,查询词为文本,查询词概率为权重)+特征工程中的统计特征, 接着将所有基础的文本特征通过TextCNN来提取,非文本特征通过全连接层来提取,上述几部分结合作为最终的特征层。由于模型过于简单,并没有特征之间(title,prefix)的深层次关联,导致效果很一般。

54ba850280c19392add4549a3c6f9799.png

因为只用TextCNN结构的网络缺少prefix和title之间相似度的衡量,所以另外加了孪生网络或伪孪生网络来度量prefix和title之间相似度,以及prefix和query,title和query之间的相似度,并同样加入统计概率作为权重

25d13a1d4b902c460b068412bd998174.png

实验结果发现,由于prefix和title的长度有一些差别,反而用伪孪生网络比孪生网络取得了更好一些的效果,所以在上述模型中,prefix,title和query_prediction中并没有用共享权值(伪孪生网络)。该模型结合了TextCNN,DeepFM,AFM等相关操作。

具体流程如下: 输入分为两部分,对于prefix,title和query_prediction进行TextCNN操作提取文本特征,tag和统计特征通过全连接层获取对应的Embedding特征。

接着一部分是DeepFM模型,来获取浅层特征和交叉特征,其中query_prediction的统计概率作为query文本向量的权重。

另外一部分是AFM相关操作,就是Bi-Interaction Pooling && Attention,对每两两Field的文本特征向量进行交叉,由于不同文本向量交叉的特征重要性不同,所以此处加入Attention,简单来说就是对不同文本向量交叉的特征加权平均得到向量再放入Deep层进行更深层次的训练。

主要进行了以上几种深度学习模型,经过试验对比,尝试3能取得最好的效果,但由于数据量不是特别大,并没有取得比LightGBM模型更好的效果,虽然该模型与LightGBM模型融合有所提高,但是作为NN模型在200万规模的数据集上稳定性不够强,结果值会产生一定的波动,且模型受限于2个,所以最终提交的成绩并没有使用该模型。

d600ddc2c78cd5f2c325f9af2863166c.png

我们最终融合方案也比较简单,主要进行加权融合,权重的确定看的是线下分数。

5. 思考总结

4d62e98c0a5ffd49ba7155558673cd98.png

优点:

  • 能够对数据和业务经过细致的分析,挖掘更深层次的特征,更好的描述实体关系。
  • 在模型方面仅使用稳定性比较高的LightGBM,并且具有很好的解释性。
  • 从特征提取到模型训练仅使用三个小时完成,可以更高效的生成结果。
  • 单模型取得top2的成绩,从特征提取到模型训练可以短时间完成。

不足:

  • 为了保证模型的泛化性没有对特征集合进行精细选择,从而损失一定的准确性。
  • 没有构造出较大差异性的第二模型,导致最终成绩在单模0.7486的成绩上未能
  • 获得很大的提升。

欢迎指正与交流,有问题直接加我qq418811687

写在最后

知乎专栏目的传播更多机器学习干货,数据竞赛方法。欢迎投稿!

ML理论&实践​zhuanlan.zhihu.com
50c8a5d231d4ade012a504d79d581616.png

路漫漫其修远兮,吾将上下而求索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值