大型强子对撞机和 Odnoklassniki

延续 Habré 机器学习竞赛的主题,我们想向读者介绍另外两个平台。 它们当然不像 Kaggle 那么庞大,但它们绝对值得关注。

大型强子对撞机和 Odnoklassniki

就我个人而言,我不太喜欢kaggle,原因如下:

  • 首先,那里的比赛往往持续数月,积极参与需要付出很大的努力;
  • 其次,公共内核(公共解决方案)。 Kaggle 的追随者建议像西藏僧侣一样冷静地对待他们,但实际上,当你努力了一两个月的事情突然变成了所有人都可以得到的东西时,这是相当遗憾的。

幸运的是,机器学习竞赛也在其他平台上举办,我们将讨论其中的一些竞赛。

伊达奥 2019 年 SNA 黑客马拉松
官方语言: 英语,
组织者:Yandex、Sberbank、HSE
官方俄语,
主办方:Mail.ru Group
线上轮:15年11月2019日—XNUMX月XNUMX日;
现场决赛:4年6月2019-XNUMX日
在线——7月15日至XNUMX月XNUMX日;
线下 - 30月1日至XNUMX月XNUMX日。
使用大型强子对撞机中某个粒子的一组特定数据(轨迹、动量和其他相当复杂的物理参数),确定它是否是μ介子
根据该声明,确定了 2 项任务:
- 在其中你只需发送你的预测,
- 另一方面 - 用于预测的完整代码和模型,并且执行受到运行时间和内存使用相当严格的限制
对于 SNA 黑客马拉松比赛,收集了 2018 年 XNUMX 月至 XNUMX 月用户新闻源中开放组的内容显示日志。 测试集包含三月的最后一周半。 日志中的每个条目都包含有关显示内容和向谁显示的信息,以及用户对此内容的反应:对其进行评级、评论、忽略它或将其从提要中隐藏。
SNA 黑客马拉松任务的本质是对社交网络 Odnoklassniki 的每个用户的提要进行排名,尽可能提高那些将获得“类别”的帖子。
线上阶段,任务分为3部分:
1.根据各种协作特性对帖子进行排序
2.根据帖子包含的图片对帖子进行排名
3.根据帖子包含的文本对帖子进行排名
复杂的自定义指标,例如 ROC-AUC 按用户划分的平均 ROC-AUC
第一阶段奖品-N个名额T恤,进入第二阶段,比赛期间住宿和膳食自理
第二阶段-??? (由于某些原因,我没有出席颁奖典礼,无法得知最终的奖项是什么)。 他们承诺向获胜团队的所有成员提供笔记本电脑
第一阶段的奖品 - 为 100 名最佳参赛者颁发 T 恤,进入第二阶段,支付前往莫斯科的旅费、比赛期间的住宿和膳食。 此外,在第一阶段即将结束时,还宣布了第一阶段 3 项任务中的最佳奖品:每个人都赢得了 RTX 1 TI 显卡!
第二阶段为团队赛,团队由2至5人组成,奖品:
第一名 - 1 卢布
第一名 - 2 卢布
第一名 - 3 卢布
评审团奖 - 100 卢布
官方电报群,约190人参与,英文交流,问题需等几天才能得到答复 telegram 官方群组,约 1500 名参与者,参与者和组织者之间积极讨论任务
组织者提供了两种基本解决方案,简单的和高级的。 简单需要小于 16 GB 的 RAM,而高级内存则无法容纳 16 GB。 与此同时,稍微展望一下,参与者并不能显着优于先进的解决方案。 推出这些解决方案没有任何困难。 应该指出的是,在高级示例中,有一条注释暗示了从哪里开始改进解决方案。 每个任务都提供了基本的原始解决方案,这些解决方案很容易被参与者超越。 在比赛初期,参赛者遇到了几个困难:首先,数据是以 Apache Parquet 格式给出的,并不是所有 Python 和 parquet 包的组合都能毫无错误地工作。 第二个困难是从邮件云下载图片,目前还没有简单的方法可以一次性下载大量数据。 结果,这些问题耽误了参与者几天的时间。

爱达奥。 第一阶段

任务是根据μ子/非μ子粒子的特性对它们进行分类。 这项任务的关键特征是训练数据中存在权重列,组织者自己将其解释为对此行答案的信心。 问题是相当多的行包含负权重。

大型强子对撞机和 Odnoklassniki

在思考带有提示的线条(提示只是提醒人们注意权重列的这一功能)并构建此图表后,我们决定检查 3 个选项:

1)反转具有负权重的线的目标(以及相应的权重)
2)将权重移至最小值,使其从0开始
3)不要使用弦权重

第三个选项结果是最差的,但是前两个选项改善了结果,最好的是选项1,它立即使我们在第一个任务中排名第二,在第二个任务中排名第一。
大型强子对撞机和 Odnoklassniki
我们的下一步是检查数据中是否存在缺失值。 主办方给了我们已经梳理好的数据,其中有不少缺失值,用-9999代替。

我们发现MatchedHit_{X,Y,Z}[N]和MatchedHit_D{X,Y,Z}[N]列中存在缺失值,并且仅当N=2或3时才存在。据我们了解,有些粒子没有通过所有 4 个探测器,并停在第 3 或第 4 块板上。 数据还包含 Lextra_{X,Y}[N] 列,这些列显然描述了与 MatchedHit_{X,Y,Z}[N] 相同的内容,但使用了某种外推法。 这些微不足道的猜测表明 Lextra_{X,Y}[N] 可以替代 MatchedHit_{X,Y,Z}[N] 中缺失的值(仅适用于 X 和 Y 坐标)。 MatchedHit_Z[N] 很好地填充了中值。 这些操作使我们在这两项任务中都达到了第一中间位置。

大型强子对撞机和 Odnoklassniki

考虑到他们没有为赢得第一阶段做出任何贡献,我们本可以就此打住,但我们继续,画了一些漂亮的图画并提出了新功能。

大型强子对撞机和 Odnoklassniki

例如,我们发现,如果我们绘制一个粒子与四个探测器板中每一个的交点,我们可以看到每个板上的点被分为 5 个长宽比为 4 到 5 的矩形,中心位于点 (0,0),并且在第一个矩形中没有点。

板数/矩形尺寸 1 2 3 4 5
板1 500h625 1000h1250 2000h2500 4000h5000 8000h10000
板2 520h650 1040h1300 2080h2600 4160h5200 8320h10400
板3 560h700 1120h1400 2240h2800 4480h5600 8960h11200
板4 600h750 1200h1500 2400h3000 4800h6000 9600h12000

确定这些尺寸后,我们为每个粒子添加了 4 个新的分类特征——它与每个板相交的矩形的数量。

大型强子对撞机和 Odnoklassniki

我们还注意到,粒子似乎从中心散射到两侧,并且产生了以某种方式评估这种散射的“质量”的想法。 理想情况下,可能可以根据起飞点得出某种“理想”抛物线并估计与它的偏差,但我们将自己限制在“理想”直线上。 为每个入口点构建了这样的理想直线后,我们就能够计算出每个粒子的轨迹与这条直线的标准偏差。 由于目标 = 1 的平均偏差为 152,目标 = 0 的平均偏差为 390,因此我们初步评估此功能良好。 事实上,这个功能立即跻身最有用功能的榜首。

我们很高兴,并将每个粒子的所有 4 个交点与理想直线的偏差添加为额外的 4 个特征(它们也运行良好)。

组织者给我们提供了有关竞赛主题的科学文章的链接,这让我们意识到我们远不是第一个解决这个问题的人,也许有某种专门的软件。 在 github 上发现了实现 IsMuonSimple、IsMuon、IsMuonLoose 方法的存储库后,我们将它们转移到我们的站点并进行了一些小的修改。 这些方法本身非常简单:例如,如果能量小于某个阈值,那么它就不是μ子,否则它就是μ子。 这样简单的特征显然无法在使用梯度提升的情况下提供增加,因此我们在阈值上添加了另一个显着的“距离”。 这些功能也得到了轻微改进。 也许,通过更彻底地分析现有方法,可以找到更强的方法并将其添加到符号中。

比赛结束后,我们对第二个问题的“快速”解决方案进行了稍微调整,最终与基线有以下几点不同:

  1. 在权重为负的行中,目标被反转
  2. 填充MatchedHit_{X,Y,Z}[N]中的缺失值
  3. 深度减少至 7
  4. 将学习率降低至 0.1(原为 0.19)

结果,我们尝试了更多的功能(不是很成功),选择了参数并训练了 catboost、lightgbm 和 xgboost,尝试了不同的预测混合,在打开私有之前,我们自信地赢得了第二项任务,而在第一项任务中,我们跻身于领导人。

开放私人后,我们在第一个任务中排名第十,在第二个任务中排名第三。 各位领导都混了,私下里的速度比libboard上还快。 数据似乎分层得很差(或者例如,私有中没有负权重的行),这有点令人沮丧。

SNA 黑客马拉松 2019 - 文本。 第一阶段

任务是根据用户帖子所包含的文本对 Odnoklassniki 社交网络上的用户帖子进行排名;除了文本之外,帖子还有一些其他特征(语言、所有者、创建日期和时间、查看日期和时间) )。

作为处理文本的经典方法,我会强调两个选项:

  1. 将每个单词映射到 n 维向量空间,使得相似的单词具有相似的向量(更多内容请参阅 我们的文章),然后找到文本的平均单词或使用考虑单词相对位置的机制(CNN、LSTM/GRU)。
  2. 使用可以立即处理整个句子的模型。 例如,伯特. 理论上,这种方法应该效果更好。

因为这是我第一次接触文本,所以教别人是错误的,所以我会教自己。 这些是我在比赛开始时给自己的提示:

  1. 在你开始教东西之前,先看看数据! 除了文本本身之外,数据还有几列,并且可以从它们中挤出比我更多的内容。 最简单的事情是对某些列进行平均目标编码。
  2. 不要从所有数据中学习! 数据量很大(大约 17 万行),绝对没有必要使用所有数据来检验假设。 训练和预处理非常慢,而且我显然有时间测试更有趣的假设。
  3. <有争议的建议> 无需寻找杀手级型号。 我花了很长时间弄清楚 Elmo 和 Bert,希望他们能立即把我带到一个高的地方,结果我使用了 FastText 预训练的俄语嵌入。 我无法与 Elmo 一起实现更好的速度,而且我仍然没有时间与 Bert 一起解决这个问题。
  4. <有争议的建议> 无需寻找一项杀手级功能。 查看数据,我注意到大约 1% 的文本实际上不包含文本! 但是有一些资源的链接,我编写了一个简单的解析器来打开该网站并提取标题和描述。 这似乎是个好主意,但后来我得意忘形,决定解析所有文本的所有链接,并再次浪费了很多时间。 所有这些并没有对最终结果产生显着的改善(例如,尽管我想出了词干提取)。
  5. 经典功能有效。 例如,我们用谷歌搜索“text features kaggle”,阅读并添加所有内容。 TF-IDF 提供了改进,文本长度、单词和标点符号数量等统计特征也得到了改进。
  6. 如果存在 DateTime 列,则值得将它们解析为几个单独的功能(小时、星期几等)。 应使用图表/一些指标来分析应突出显示哪些功能。 在这里,一时兴起,我正确地做了所有事情并突出了必要的功能,但正常的分析不会有什么坏处(例如,正如我们在决赛中所做的那样)。

大型强子对撞机和 Odnoklassniki

作为比赛的结果,我训练了一个带有单词卷积的 keras 模型,以及另一个基于 LSTM 和 GRU 的模型。 他们都使用了针对俄语的预训练 FastText 嵌入(我尝试了许多其他嵌入,但这些是效果最好的)。 对预测进行平均后,我在 7 名参与者中最终获得了第七名。

第一阶段发布后 尼古拉·阿诺欣的文章,谁获得了第二名(他没有参加比赛),他的解决方案在某种程度上重复了我的解决方案,但由于查询键值注意机制,他走得更远。

第二阶段 OK & IDAO

第二阶段的比赛几乎是连续进行的,所以我决定一起看。

首先,我和新收购的团队来到了 Mail.ru 公司令人印象深刻的办公室,我们的任务是结合第一阶段的三个曲目的模型 - 文本、图片和协作。 为此分配了两天多一点的时间,结果发现时间非常短。 事实上,我们只是重复了第一阶段的成果,并没有从合并中获得任何收益。 最终我们获得了第五名,但是我们无法使用文本模型。 在查看其他参与者的解决方案后,似乎值得尝试对文本进行聚类并将其添加到协作模型中。 这一阶段的一个副作用是新的印象,与酷的参与者和组织者的会面和交流,以及严重缺乏睡眠,这可能影响了IDAO最后阶段的结果。

IDAO 2019 决赛阶段的任务是预测 Yandex 出租车司机在机场等待订单的时间。 在第 2 阶段,确定了 3 个任务 = 3 个机场。 对于每个机场,给出了六个月内出租车订单数量的每分钟数据。 作为测试数据,给出了下个月和过去两周订单的分钟数据。 时间很少(2天),任务也很具体,队里只有一个人来参加比赛——结果,最后是一个悲伤的地方。 有趣的想法包括尝试使用外部数据:天气、交通拥堵和 Yandex 出租车订单统计数据。 尽管组织者没有透露这些机场是什么,但许多参与者认为它们是谢列梅捷沃、多莫杰多沃和伏努科沃。 尽管这一假设在比赛后被驳斥,但莫斯科天气数据等功能改善了验证和排行榜的结果。

结论

  1. ML 比赛很酷又很有趣! 在这里,您将发现数据分析技能以及巧妙的模型和技术的使用,并且欢迎简单的常识。
  2. 机器学习已经是一个庞大的知识体系,而且似乎正在呈指数级增长。 我给自己设定了一个目标,要熟悉不同的领域(信号、图片、表格、文本),并且已经意识到有多少东西需要学习。 例如,在这些比赛之后,我决定学习:聚类算法、使用梯度提升库的高级技术(特别是在 GPU 上使用 CatBoost)、胶囊网络、查询键值注意机制。
  3. 不仅仅是kaggle! 还有许多其他比赛更容易获得至少一件 T 恤,并且有更多机会获得其他奖品。
  4. 交流! 机器学习和数据分析领域已经有一个很大的社区,telegram、slack 都有专题小组,还有来自 Mail.ru、Yandex 等公司的认真人士解答问题,帮助初学者和继续在该领域发展的人的知识。
  5. 我建议所有受到上一点启发的人都去参观一下 数据节 — 将于 10 月 11 日至 XNUMX 日在莫斯科举行的一次大型自由会议。

来源: habr.com

添加评论