我用我的经历劝告大家:打比赛一定要谨慎组队(大量图片)
2023-3-29 update


挺可爱的孩子,之前以为是网上的图片,没想到是X队友的小孩,这样的话的确是我之前考虑不周,现已将所有队友头像名字打码。
关于队友X要求删帖,道歉,起诉:
我发这个帖子的本意是为了分享参加比赛的经历,提醒一下相关经历不多的小伙伴们,有时参加比赛不止是磨练技术和学习,有人的地方就会有各种事。与社会上的人,尤其是网上认识的人交往一定要有保护自己权益的意识。我想不到队友X有什么正当理由要求我删帖。
如果说要我为了没有打码道歉,我可以给队友X的小孩道歉。至于对队友X,事情有因果,有先后。队友X伙同他的朋友队友Z一起不出工不出力并且在出了好成绩之后假装自己有很大功劳是因,我合理维护自己权益是果。队友X队友Z合伙对我占便宜不成就变脸侮辱谩骂在先,我发帖曝光两人前后嘴脸对比在后。不知道我要为什么道歉?
至于说要起诉我,我只是发帖分享比赛经历。我只能认为队友X是在以法律之名行威压恐吓之实。
对于队友Z,三句撤回两句,不知道他想说什么。我的人品也轮不到他指点。
顺便说点无关的,就当我在发发牢骚。
这几年大家对AI越发重视,各种比赛层出不穷。国内比赛好的名次,Kaggle的金牌等也成为很多公司考量实力的因素。有利益就会有蝇营狗苟,有私下互相分享方案代码的,有公然卖奖牌的,甚至有比赛期间伙同云GPU平台直接偷高分选手源码的。
这些还只是明确的违反规则。
最近发现一些人的做法属实恶心但是又没有明确违反规则的,搅乱圈子风气。他们先是利用比赛圈子里人的善意同时在多个不同比赛找踏实干事的人组队。如果这个干事的人什么时候出了好成绩上了大分,他们就可以开始出一些力出一些工,最后成绩就是“所有人一起的努力”,毕竟奖状上可不会印贡献百分比,Kaggle金牌也不会注明谁提交了多少次。如果干事的人没出什么成绩,那自然就是“啊不好意思我最近事情有点多啊,没什么空打比赛”,没出什么成绩的人也不会多在乎别人干了什么。
这套做法看似不会对大多数人有直接影响,但是对风气的影响最终会落到所有人头上。当偷奸耍滑成为一条可行的迅速积累奖牌名次的道路的时候,比赛名次还有什么含金量?Kaggle金牌还会有谁在乎?
在Kaggle上待得久了就会发现,金牌和金牌之间,有时候含金量天差地别。
一点牢骚,不针对个人,希望大家可以擦亮眼睛不要给偷奸耍滑的人可趁之机,也不要做偷奸耍滑的事。希望中国AI圈越来越健康,实力蒸蒸日上。

今年4月参加了中国人工智能学会举办的全球人工智能技术创新大赛(GAIIC 2022)的赛道二,商品标题识别赛道。这是一个比较典型的NLP任务,我参赛的初衷是通过这个比赛学习一下中文NLP领域的范式和技巧。因为之前只在kaggle打过比赛,作为一个第一次打中国NLP比赛的选手,完全没有想到最后能拿到第一名这样一个成绩。更没有想到的是最后我的两个队友会因为钱露出非常丑陋的一面。
很多小伙伴可能是正在本科,读研读博,和同学或者师兄弟一起参赛,这样队内发生矛盾的概率就很小。如果有像我一样只是因为兴趣爱好参加比赛的小伙伴,有时可能会有网上认识的人邀请你组队,希望可以以我的经历为鉴,和不熟悉的人组队时一定一定一定要谨慎。不想看细节的小伙伴们可以直接跳到最后“太长;不看”部分。
最初怎么组的队

最后队一共3个人,我,队友X,队友Z。我因为干活比较多,分也高,就让我当了队长。
首先和队友X是在kaggle上认识的,当时我们都在打同一个比赛(CommonLit Readability Prize)。他当时在比赛还有不到两周截至的时候,给榜上前排的所有人群发邮件问要不要组队。本来都觉得可以组队了,后来因为他被人举报私下分享(https://www.kaggle.com/competitions/commonlitreadabilityprize/discussion/254083),为了避嫌并没有组队。在那之后时不时聊几句,也没有深聊什么。
时间到了今年4月,发现互相都在打这个比赛(GAIIC 2022)。队友X邀请我组队,虽然因为solo习惯了有一点踟蹰,也因为想尝试一下组队打比赛什么体验就同意了。
队友Z,事先和我不认识,和队友X认识,被队友X拉入队。(这种本来就不熟悉的人再拉进来的根本不认识的人,最好拒绝,当然我也是通过这件事才意识到)
初赛复赛

初赛都是分头干且每个人都可以提交,我虽然是队长但是并没有什么权力,这种组队都是分开凭兴趣干,想干就多干点,不干别人也没法说什么。这是初赛A榜的提交记录。
我:圆头鲸
队友X:白MASK
队友Z:wagege

可以看到队友X初赛最后一次提交是截止9天前。分也只有0.8085,可以说初赛基本没有参加。
复赛由于主办方限制选手只能线上实现训练+评分的流程,而且只有队长账号有操作权限,我就顺理成章地成了线上代码全权负责人。初期平台很多BUG,基本上就是等平台修复bug的时候我在写本地代码,在跑本地实验的时候写平台代码这样两边倒。同一时间(包括初赛)队友X和队友Z都在kaggle上打另外一个比赛,队友Z甚至还在打第三个比赛。这是我两个队友今年kaggle的活跃图。


对比一下这是我的

GAIIC今年时间表是这样的

可以看到初赛和复赛期间,是我的队友X和队友Z今年在kaggle上最活跃的时间。
有的人会说了,有的人就是厉害,可以身兼多职,还能把每件事都干好。那我下面说说每个人都干了什么。
具体贡献

这个赛道二的题目呢,属于比较无聊的题目,赛题数据有一些特点,但是一是任务太典型,二是数据量不多,三是数据质量也堪忧。所以选手能发挥的点很少。除了大家都一样的东西(nezha,globalpointer,伪标,对抗训练,等等),到最后拼的是具体的工程能力和一些细节的把握。我们队在大家都有的东西的基础上额外的上分点主要有这么几个:
伪标的技巧(+0.002)
通过阈值优化对globalpointer输出结果的正确利用(+0.002)
加强的对抗训练(+0.002)
骨干网络上套一层LSTM(+0.001)
这几个东西是周周星和群里都没有人分享过的,也是我们队分数和其他队拉开差距的点。
这里面123都是我想出来并实验的,4是队友X想出来并实验的。
队友Z呢?整个5月只干了一件事:数据增强。期间在群里报告过本地CV到了0.825!牛b啊!然后我看他的代码才发现他拿所有训练集的词做类别词典,随机替换训练数据。聪明的小伙伴可以在下面留言这样做的问题在哪。
对于这道题的数据增强,我早在4月和队友Z组队之前和队友X聊的时候就讨论过,当时的结论是这样的。
顺便说一下后文中微信截图里
。。。 - kaggle 对应 队友X
丫丫 对应 队友Z



队友Z只想着干数据增强,虽然我早就知道数据增强这个东西在这道题基本不可能有用,是死路一条。
但是你能说啥呢,说“你别干这个了,没用”?人家又不是你员工,你凭什么指挥别人?
很多人看到这里可能会觉得我太drama,不就是打个比赛吗至于搞这么多事出来吗?
其实我一开始没有这么生气的,期间因为线上平台bug白白付出很多精力的时候最多也就是自己腹诽一下为什么只有我在受这个罪(因为只有队长能在线上平台操作)。实在是有两件事让我对这件事的心态发生了转变。
事件1

当时我的两个队友同时在打的kaggle比赛(nbme)我也有关注。毕竟kaggle一年也就几个NLP比赛。当时离nbme截止还有两个多星期。因为看到队友X的队伍公榜冲上了第一,于是聊起了nbme。聊的过程中发现他们有几个流程可以优化(伪标和融合),于是我就起了心思,我可以帮他们优化这些部分,最后就至少拿金牌肯定是稳的,甚至最后能进奖池的话,能高一点分可能就多拿一些钱,我可以不参与分钱,这样谁也不亏。于是我把我可以做的地方告诉了队友X,毕竟人家已经现在成绩不错,我得拿出点东西体现诚意嘛。谁知道方法告诉完了,组队的事没了下文。我心想人家没看上我呗,我那点当宝贝的点子人家根本看不上!最后他们拿到了第五名,和银牌线差5个万分点。
谁知道赛事结束之后,有人问他们你们上分最有效的点子是什么,他们队的队长说分fold伪标!

这时候我才意识到,哦!你用了我直接告诉你的一字不差的可以提分的技巧,最后以小分差在奖池里,你的队友都说这个技巧是最有效的,结果连队都没让我进?


看到这里有的人可能又会说了,你连开始都没开始,人家当时已经公榜第一了,凭什么你说个技巧就带你啊?
在kaggle打过比赛的人应该都知道,比赛半个月前的公榜什么概念,大佬都还没开始融合,最后两周可能是公榜波动最大的时候,而且就算公榜分数保住了,还有私榜shake-up,这种时候你有多少底牌都不会嫌多。说实在的,我给队友X透漏的技巧,随便找个银牌靠上的队伍加上我的技巧都可以拿金牌。
再来看看事后对峙时的态度

事前:诚哥,学到了
事后:呵呵,你真不要脸
这就是我亲爱的队友X吗
事件2

答辩要写PPT,工作大多是我干的,写PPT自然而然也是我的工作。我在模板发下来当天就准备写。然而这时候,又是队友X,一反常态,自告奋勇说我来!

我还怕他不了解具体细节,写不出什么东西,谁知道人家胸有成竹。难道是我小人之心了?
主办方要求答辩ppt是要审核的,有截止日期,一共给选手准备ppt的时间也不过一个星期多一点。过了好几天了,队友X的ppt也没见个影子,我就问了一下。队友X也很爽快,一下就发过来了。
主办方给的模板2MB,队友X发来了一个14MB的ppt。我心想可以啊,看样子是写了不少东西啊,关键时候还是靠得住的啊。
谁知点开一看
在模板基础上改动了的只有3页



好嘛,你说你先干,让我们等着改你的。
您用了四天时间就憋出来这么三页东西?
一页吹自己经历,一页吹自己得过什么奖,一页不知道哪来的什么比赛的描述
我是吐槽你真看得起我们,所获奖项还给我们留了个格子?
还是吐槽你唯一一页跟赛题有关的是不知道您哪个比赛的答辩ppt漏过来的?
其实最好笑的可能是我到现在也没搞懂的一个点:这三页东西怎么多出来12MB的?您公司的logo这么重量级吗?
经过这两件事,我已经下定决心以后和队友X划清界限。至于队友Z,从头到尾也没什么存在感,没做什么事烦到我,也没在比赛里体现什么作用,本来和我也不认识,以后应该也不会有什么联系。这时候我在心里已经决定奖金要按劳分配,不跟他们平分了。
争执

答辩当天,给赛道二安排的是北京时间下午,我人在国外,所以是我的凌晨。前一天的预演本来要参加的,结果要上的时候因为太困了直接睡过去了。还因为没有预演闹了一个答辩的时候只有我一个人把视频和ppt放到一起的小笑话。当时我的凌晨快4点宣布结果,然后是颁奖典礼。宣布了我是赛道二第一名!虽然很疲惫,但是还是喜悦占了上风,开心了整整......10分钟。
我的两个队友一唱一和就开始谈钱。

当时我心想,真是怕什么来什么,熬了一晚上你们要现在谈钱。我当然主张按劳分配,两个人串通一气要4-3-3。本来按我以往的作风我完全可以接受4-3-3的,但是因为上文提到的原因这个时候我对队友X的观感已经非常差了,连带的队友Z这种我本来可以忍受的划水选手也讨厌起来。于是我坚持要按劳分配。
随后就开始了令我恶心的几个小时,两个人尽其所能颠倒黑白。
我队友们的言论包括但不仅限于:
队友X:“虽然线上所有代码都是你写的,但是代码谁不会写啊,还不是你霸着队长号不给我们用”
复赛整整一个月我被平台bug折磨的死去活来的时候怎么没见你们提一次说你们上去平台写代码呢?现在变成我“霸着号”所以你干不了活了
队友Z:“组队的时候我a榜第三,所以我有资格拿30%”
这个逻辑首先我就不懂,队友Z刚开赛一个星期靠主办方明令禁止的融模型交了个0.815,不符合规则不说最后连我的单模都比不过。到最后队友Z的提交记录也只有0.8138,这个才是单模的分,我最后初赛a榜的单模是0.8197,请问您这个第三哪来的?还是上过就算?
顺便提一嘴,初赛A榜因为当时没有队长账号一说,每个人都可以提交,我们也是各干各的,这个时候的成绩应该能相对客观反映工作量和对比赛的重视程度。初赛a榜截止时我们队3个人最好的单模成绩分别是
我:0.8197
队友X:0.8085 (对,我没打错,就是0.8085)
队友Z:0.8138
这个大家可以和上边的图对照一下,队友X最后一次初赛a榜提交是4月11日那次。
队友X:“阈值我也会写,伪标我也会做(阈值和伪标是两个比较大的上分点,详见上文具体贡献的第1,2点)。是我们做了实验,你才知道的,你才用到你的代码上的”

这个纯纯是骗人了啊
直接上比赛当时的聊天记录
这张是我发完加了调整阈值的源码给他们之后他们的反应

这张是我告诉队友X伪标的技巧之后的反应

这前后对比...
事前:诚哥,学到了,哦哦原来可以这样
事后:不要脸,我不会吗,我不做你怎么知道的
谁 不 要 脸?
队友Z:“数据增强你有做过吗,全是我们自己实验”
队友Z还好意思提数据增强是我没想到的,这个人比赛全程只干了这一件事,具体就是用同一个类别的实体随机替换然后拿来训练,群里报告说本地CV有0.825,我一看有bug,改完本地CV连0.81都上不去

要是我的话我肯定不好意思提一个当初兴冲冲发群里说CV有0.825,最后改完bug连0.81都上不去的方案作为自己工作量的证据。咱也不知道这位队友Z是哪来的自信还好意思提。
队友X:“你的代码是在我们的基础上改的”
这个纯纯是撒谎了,我从头到尾用的都是我自己写的流程。我打的所有比赛从来没有改别人的代码作为自己的流程。我的流程是我从第一个比赛开始一点一点写出来,积累出来的。别人的流程我也用不惯,不可能在他们的“基础上改”。更何况,组队的时候我单模就已经0.816了,队友X和队友Z一直到初赛截止单模才分别是0.8085和0.8138。写过代码的都知道用别人的代码有多不顺手,我犯得上放着自己的用得惯的且高分的代码不用去改你们的分没我高的代码来用吗?
队友Z:“我们的最终方案,我俩早实现了90%了。按我说,我俩分90%,你分10%。”
这个我一开始完全没懂他的逻辑是什么。后来我才反应过来他的意思可能是:“我们俩的分也有个0.81,你的分也就0.82,按我说,我们拿的钱,你拿剩下的”。
我这么说你们可能都会觉得我是编出来的,为了证明这不是我编的我直接上图

小插曲

比赛期间还发生了一件暴露这位扬言只给我分10%奖金的队友Z水平的小插曲。具体是这样的,我在发现提分技巧之后把我的源码发给我的两个队友,他们拿着我的代码开心的点了run键。显然这位队友Z觉得这样体现不出他的作用,于是在我的代码上开始画蛇添足。

加了哪两行呢?

这两行干了什么呢?就是在我的代码运行之前先备份gradient,在我的代码运行之后再恢复gradient......
然后说“目前跑效果是涨的”......
哈哈哈哈哈哈哈哈哈,这位队友Z你是从哪学来这么委婉的把我的有效模块注释掉的方法的?
之后我花了好些功夫向我这位队友Z解释了为什么这样不行。几个小时之后队友Z终于反应过来了。

这位队友Z,你连code都没看懂,就这里注释一块,那里加一块。拿着我的代码点了个run键就觉得自己极大贡献。一个人得多不要脸才能这种情况下说得出口你俩分90%,我拿10%?
最后解决方案

这件事主办方的态度就是队内纠纷,只能自己商量。但是分钱必须所有人同意,要不钱就不能发。这样的规则对于混子来说可能是最有利的规则了,只要自己不满意,就不松口,你们谁也别想拿钱,反正我也没干啥,时间精力也没花,拿不到钱也不亏,名声反正赚到了。反观干活的人呢,花了大量时间精力,代码技巧细节等等让混子学去了,最后还可能拿不到钱,找谁谁也不管你,主办方肯定是不愿意趟这种浑水。
最后没有办法,麻烦刘强老师帮忙协调,这种协调只能是“各让一步”,于是最后方案就是我分到50%,他们两个各分到25%。
值得一提的是,刘强老师帮忙协调之后这件事几个小时内就解决了。我们私底下讨论的时候队友X硬气的给我下最后通牒

然后两个人一个星期对我不理不睬,摆明了我拿他们没办法的态度。
刘强老师一出面他们一下子就同意了,速度快的令我不敢相信。
是吃准了我势单力薄,圈子里也不认识谁,是个软柿子?谁都可以上来捏?
从我自己主观看,我的工作量绝对不止50%,整个比赛从初赛开始我就几乎24/7扑在这个比赛上。包括所有说明文档,复现要求的代码和文档,线上30几个迭代版本的训练,预测代码都是我一个人写的。线下的工作更多,80几个各类数据挖掘,预训练,微调,技巧实现,技巧实验等等代码,200多个实验记录几乎是覆盖了整个初赛复赛流程的。反观我的两个队友,初赛各自干的时候分也不高,复赛也没提供什么上分点。
我想着问他们要实验记录按工作量衡量也可以,一个也给不出来。反过来说“我可没有你那么好的习惯,留半年实验记录来和队友掰扯工作量”。

中国的义务教育做个实验都是要实验报告的。你们好歹也都是正经AI公司的算法工程师,都靠这个吃饭的,留实验记录这种最最最基本的工作你们都不做的吗???你们公司开发的流程是盯着tqdm进度条拍脑袋吗?
好嘛,队友X你实际贡献没多少,线上代码也不写,实验也说不出来做了多少。组队前是这样的。

到分钱了一边骂我不要脸一边跟我硬气的“要么433要么平分”。
另一个队友Z更离谱,从头到尾一点实际贡献也没有。到分钱了竟然有脸说要他俩分90%,我分10%。我遇上你们两个真是算我倒了大霉了。
太长;不看

简单来说就是第一次组队没有防人之心的我没有提前谈好奖金分配并且傻呵呵的把所有活干了,期间甚至更傻呵呵的把可以在kaggle一个同时进行的比赛的上分的技巧直接告诉了队友X,这个队友X拿了我的技巧回去拿了个金牌,事后翻脸不认人丝毫不提组队的事。更气的是在GAIIC2022赛道二拿了第一名之后,我主张按劳分配,队友X和队友Z这两个全程几乎全职在打kaggle上比赛,对这个比赛贡献接近没有的人,合起伙来跟我要求平分。最后没办法为了解决这件事我只拿到了远低于我应得的份额。
在发牢骚的同时也希望能用我的经验告诫大家不要轻易和不熟的人组队,如果一定要组队一定要把丑话说在前面,谈好按劳分配,和怎么确定“劳”的份额。
最后也要在这里感谢刘强老师。刘强老师不仅赛时付出了很多精力时间为选手解答疑惑,帮助主办方协调比赛,付出了很多努力促进比赛更好的交流氛围。赛后还愿意牺牲自己个人时间帮我协调解决这种糟心事。可以说不仅是我,大部分选手参加这个比赛的体验都因为刘强老师的努力而变得更好一点。