OAG-WhoIsWho 赛道二比赛总结

第一次完整地打完一次数据竞赛,虽然成绩一般,但还是学习到了一些东西,特此总结一下。文章主要内容如下:

  1. 赛题介绍
  2. 我的做法
  3. 打代码过程中学到的一些知识
  4. 不足之处与总结

1. 赛题介绍

比赛链接 https://www.biendata.com/competition/aminer2019_2/
简单来说就是同名作者消歧。一篇论文包含的信息有 title,abstract,keywords, venue, year, authors, organizations。最终的提交结果就是,给定你一篇论文的信息还有其中的一个作者名,让你把这篇论文分配给正确的作者 ID。

2. 我的做法

一开始是想把每篇论文作为一个样本,把论文作者 ID 作为样本类别,这样的话,有两万多类,而且每一类的样本数极度不平衡——有些类别只有一两个样本,有些则有 1000 多个样本,所以效果很差。

后面参考了 baseline 的做法,转化成二分类的问题。每个作者 ID 都有自己的论文库信息(包含论文列表,及每篇论文的 title、author、organization 等)。将每一篇论文分别跟候选作者 ID 配对,如果是正确的 ID 那么就是正样本。那么对于配对的一篇论文和一个论文库,如何提取出特征就成了重中之重。这里,我参考了参赛人员提供的两个 baseline (十分感谢参赛大佬的无私分享):(https://www.biendata.com/models/category/3188/L_notebook/
https://www.biendata.com/models/category/2998/L_notebook/)。Baseline 里主要用到了 author, org, year 衍生出来的特征。比如说,当前论文发表的年份,是否在论文库的年份区间里;当前论文的 co-author 跟论文库 co-author 的重叠数;当前论文的 co-org 跟论文库的 co-org 的重叠数。这里要指出一点,我构建了两个跟作者org 有关的特征(注意:是 org 不是 co-org),线下效果有明显提升,但是线上效果却下降很多。我猜测原因是因为 org 缺失特征有点多。除了这些统计特征,我另外构建了跟文本相关的特征,比如,通过对词向量进行平均,得到文本的词向量,然后计算论文的词向量跟论文库词向量之间的相似度。分类器使用的是 catboost。xgboost 和 lightgbm 也有试过,但这里效果不如 catboost。

最后列一下最后自己使用的特征:
co-author 相关特征 6 个(来源于 baseline):
   author_interset_num
   author_interset_num/paper_ids_len
   author_interset_num/paper_authors_len
   author_interset_num/aid_authors_set
   author_interset_num_repeat
   author_interset_num_repeat/aid_authors_len
注:author_interset_num 表示当前论文的 co-author 跟论文库 co-author 的重叠数,repeat 表示当前论文的 co-author 在论文库中的 co-author 出现的次数(可重复)。paper_ids_len 表示论文库的论文数,paper_authors_len 表示当前论文的作者数。aid_author_set 表示论文库中 co-author 的数,aid_authors_len 表示论文库中,co-author 的总次数(可重复)。

co-org 相关特征 6 个
   org_interset_num
   org_interset_num/paper_ids_len
   org_interset_num/paper_orgs_len
   org_interset_num/aid_orgs_set
   org_interset_num_repeat
   org_interset_num_repeat/aid_orgs_len
注:各特征的含义可参考 author。

year 相关特征 10 个(来源于 baseline)
   year_b_min
   year_b_max
   year_b_mean
   year_b_std
   year_b_mm2 = (year_b_min + year_b_max) / 2
   year_b_min-year_a
   year_b_max-year_a
   year_b_mean-year_a
   year_b_mm2-year_a
   year_inside_range
注:year_a 表示当前论文年份, year_b 表示论文库所有论文年份列表

venue 相关特征 2 个:
   venue_count
   venue_count_vlen
注:venue_count 表示当前论文 venue 在论文库中的 venue_list 出现的总次数,venue_count_vlen 表示总次数除以论文库列表 venue_list 的长度

文本相关特征 12 个:
   title_tfidf_tsvd_cos
   title_tfidf_tsvd_cosmax
   title_emb_cos
   title_emb_cosmax
   abstract_tfidf_tsvd_cos
   abstract_tfidf_tsvd_cosmax
   abstract_emb_cos
   abstract_emb_cosmax
   paper_text_tfidf_tsvd_cosmax
   paper_text_tfidf_tsvd_cos
   paper_text_emb_cos
   paper_text_emb_cosmax
注:这里的 paper_text 指的是将论文的 title、abstract、keyword 拼接起来得到的文本。因为 title、abstract 和 keywords 特征缺失值不少,单纯利用 title 等衍生出来的特征可能信息量可能不够。所以拼接起来作为 paper_text,作为新的特征。emb_cos 后缀表示当前论文文本(title or abstract or paper_text)的词向量跟论文库的平均词向量之间的余弦相似度。emb_cosmax 表示跟论文库中所有论文文本的最大余弦相似度。tfidf_tsvd 指的是文本的 tfidf 特征经过 TruncatedSVD 降维后得到的向量。(文本的 tfidf 特征太高维,计算相似度耗时久,所以先用 TSVD 降一下维度。)

最后 b 榜成绩为 93.04(18名)。(其实原本的成绩是 92.93,我先用这个模型预测测试样本,并打上标签,然后合并训练集和测试集一起训练。最后线上提高了一个千分点。当然,这种做法有点玄学,有时效果反而会下降

3. 打代码过程中学到的一些知识

  • pandas 相关用法。经过这次比赛,感觉用 pandas 处理表格数据太方便了!特别是其中的 merge 函数和 apply 函数,简洁又好用。
  • pandas apply 进度条。有时候数据较多,或者计算比较复杂的时候,apply 运行比较久,而且也不知道什么时候可以运行完。代码如下:
import tqdm
# 添加下面这行代码,把 apply 改成 progress_apply 就行了
tqdm.tqdm.pandas(desc='apply')
data_stat['author_interset_num'] = data_stat.progress_apply(author_interset, axis=1)
  • 如何计算文本的加权词向量(根据词的 tf-idf 权重进行加权)。(虽然尝试了加权词向量后,效果并没有提升。)

4. 不足之处与总结

  • 线下验证集的构建。感觉构建得不够合理,线下有 99,但是线上只有 70 多(A榜),93(B 榜)
  • 没有做 EDA,没有分析数据的分布,特征的分布。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,298评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,701评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,078评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,687评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,018评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,410评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,729评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,412评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,124评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,379评论 2 242
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,903评论 1 257
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,268评论 2 251
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,894评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,014评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,770评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,435评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,312评论 2 260

推荐阅读更多精彩内容