如何在3天内拿下DigSci大赛的亚军?| DigSci科学数据挖掘大赛

【导读】本文将基于作者在中国计算机大会方案宣讲PPT中的内容,给出此次比赛的完整方案,主要从赛题理解、建模核心思路、算法核心思想等角度阐述,同时对相关细节进行了适当的拓展讲解。涉及SIF Sentence Embedding、InferSent、Bi-LSTM和BERT等算法及相关概念。

任务背景
科学研究已经成为现代社会创新的主要动力。大量科研数据的积累也让我们可以理解和预测科研发展,并能用来指导未来的研究。论文是人类最前沿知识的媒介,因此如果可以理解论文中的数据,可以极大地扩充计算机理解知识的能力和范围。
在论文中,作者经常会引用其他论文,并对被引论文做出对应描述。如果我们可以自动地理解、识别描述对应的被引论文,不仅可以加深对科研脉络的理解,还能在科研知识图谱、科研自动问答系统和自动摘要系统等领域有所进步。
任务描述
本次比赛将提供一个论文库(约含20万篇论文),同时提供对论文的描述段落,来自论文中对同类研究的介绍。参赛选手需要为描述段落匹配三篇最相关的论文。
例子:
描述段落:
An efficient implementation based on BERT [1] and graph neural network (GNN) [2] is introduced.
评测方案
准确率(Precision): 提交结果的准确性通过 Mean Average Precision @ 3 (MAP@3) 打分,具体公式如下:
其中,|U|是需要预测的press_id总个数,P(k)是在k处的精度,n是paper个数。
题意分析
从任务描述中我们可以看到,该任务需要对描述段落匹配三篇最相关的论文。单从形式上可以理解为这是一个“完形填空”任务。但相较于在本文的相应位置上填上相应的词语不同的是,这里需要填充的是一个Sentence,也就是论文的题目。但是如果你按照这个思路去寻求解决方案,你会发现在这个量级的文本数据上,一般算力是满足不了的。
既然如此,那我们不如换一个思路来思考这个问题,“对描述段落匹配三篇最相关的论文”,其实最简单的实现方式是计算描述段落和论文库里所有论文的相似度,找出最相似的即可。但这同样会存在一个问题,通过对数据进行探查你会发现“An efficient implementation based on BERT [1] and graph neural network (GNN) [2] is introduced.”这一描述段落,同时引用了两篇文章,那么在计算相似度时,到底哪个位置该是哪篇文章呢?
基于分析中提到的问题和难点,本次比赛给出了以下解决方案。
建模核心思路
在解决本问题时,我借鉴了推荐算法的思想,将问题拆解了两部分——召回和排序。在召回阶段,使用了两种方式,其一是利用Word2Vec和TFIDF方法,将描述段落利用Word2Vec得到每个词的词向量,同时对句子中的词使用TF-IDF为权重进行加权得到Sentence Embedding,同时为了得到更好的效果,这里做了一个改进,即使用Smooth Inverse Frequency代替TFIDF作为每个词的权重;其二是利用TFIDF得到Sentence Embedding。两种方法各自计算余弦相似度得到3篇论文,去重后召回集中每个段落有3-6篇不等的召回论文。
在排序阶段,我们利用Bi-LSTM对描述段落Description和论文文本PaperText组成句子对(Description,PaperText)进行编码,在中间层对两个向量进行差值和内积操作后,在输出层经过Dense和Softmax层后得到概率值后排序。
算法核心思想
1.SIF Sentence Embedding
SIF Sentence Embedding 使用预训练好的词向量,使用加权平均的方法,对句子中所有词对应的词向量进行计算,得到整个句子的embedding向量。
SIF 的计算分为两步:
1) 对句子中的每个词向量,乘以一个独特的权重b,权重b是一个常数 a除以a与该词频率的和,这种做法的会对出现频率高词进行降权,也就是说出现频次越高,其权重也就越小;
2) 计算句向量矩阵的第一主成分u,让每个Sentence Embedding减去它在u上的投影,具体参见论文[2];
这里,利用该方法做召回,在验证集上的准确性要比其他两种方式效果好。
(1)对句子中所有单词求平均得到sentence embedding;
(2)对句子中所有单词利用TF-IDF值加权后求平均得到sentence embedding。
2. InferSent
InferSent相似度模型是Facebook提出了一种通过不同的encoder得到Sentence Embedding,然后计算两个Sentence Embedding的差值、点乘得到交互向量,计算两者之间的相似度。
这里,对原始论文方法做了两处修改:
其一,针对这个问题对3-way softmax层(entailment,contradiction,neutral)做了相应的修改变为2-way softmax;
其二,中间层去掉了u和v,只使用差值和内积两种特征表征方式;
同时在7中编码器:1)LSTM, 2)GRU, 3)bi-GRU, 4)bi-LSTM(mean pooling), 5)bi-LSTM(max pooling), 6)self-attention, 7)CNN 中选用了Bi-LSTM MaxPooling的方式。
3. Others-BERT
当时,在BERT时代,解决方案的尝试中少不了它的身影,这里我们用BERT尝试了两种方案,其一是利用BERT对Description和PaperText进行编码后,计算文本的余弦相似度;其二是在上述整体模型中,用BERT替换InferSent部分。
以上两种方式是我和何从庆在CCL“中国法研杯”相似案例匹配评测竞赛中使用的方案(https://zhuanlan.zhihu.com/p/88207736),但在本任务中首次尝试后发现线下Valid是不Work的,因为本次比赛我只做了最后两天,5次线上提交后得到终榜最高分,所以未对其他更多方式做尝试性修正,如果BERT在本任务上work的话,按照经验应该可以提升不少MAP@3,有兴趣的朋友可以尝试一下。
总结
入职两年,见过了许多形形色色,感慨良多,但初心没忘,为了让自己保持一个良好的竞技状态和学习状态。每次任务又是一个不断审视、总结自己的过程。无论是结构化数据、自然语言处理领域还是图像领域,欢迎志同道合的小伙伴一起分享探讨,共同进步。
参考论文:
(*本文为 AI科技大本营投稿文章,请联系作者)
◆
精彩推荐
◆

推荐阅读

你点的每个“在看”,我都认真当成了AI
相关文章:

如何获得Oracle系统性能统计? Oracle大型数据库系统在AIXUNIX上的实战详解 集中讨论 14...
累计读者的来信中,有若干位同仁谈到Oracle的性能问题。什么叫性能慢?怎么量化性能统计?问题我不一一列出了,下面的文字大部分来自Oracle 英文文档,我认为描述的极为精确,比我说的强。 如果有效地诊断性能问…

百度搜索查询命令——组合型
在百度上搜索一下,就会出现一堆关于查询搜索的命令,比如:site,domain,双引号,减号等等。今日,我简单总结一点组合型命令,希望对大家有帮助。 1、domain命令、减号-和的inurl组合 公式…

Delphi多线程编程中的技巧
1)创建线程 MsgThread : TMsgThread.Create(False) ; //创建并执行线程 MsgThread : TMsgThread.Create(True) ; //创建线程后挂起 constructor Create(CreateSuspended: Boolean); 中的参数CreateSuspended表示创建后是否挂起线程。 (2)设置…
Ubuntu14.04下配置OpenGL及测试代码
ubuntu14.04 64位下,默认是没有安装OpenGL相关依赖库的,若安装,则依次执行如下几条命令即可: $ sudo apt-get update $ sudo apt-get install build-essential $ sudo apt-get install libgl1-mesa-dev $ sudo apt-get install li…

VarGFaceNet:地平线提出轻量级、有效可变组卷积的人脸识别网络
作者 | Mengjia Yan、Mengao Zhao、Zining Xu、Qian Zhang、Guoli Wang、Zhizhong Su译者 | 刘畅编辑 | Jane出品 | AI科技大本营(ID:rgznai100)【导读】为了提高用于人脸识别的轻量级网络的判别和泛化能力,本文提出了一种有效的可…

【TortoiseSVN使用教程】
TortoiseSVN使用教程 TortoiseSVN是一个SVN的客户端 1.Checkout Repository 首 先要Checkout服务器端的Repository,所谓的Checkout就是指获得服务器端指定的Repository。存储的所有文件这个 Checkout和Visual Source Safe的Checkout意义完全不一样࿰…

[ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)
继上一篇文章之后,本文将介绍 Controller 和 Action 的一些较高级特性,包括 Controller Factory、Action Invoker 和异步 Controller 等内容。 本文目录 开篇:示例准备 文章开始之前,我们先来了解一下一个请求的发出到Action方法处…
Linux下遍历指定目录的C++实现
之前在 https://blog.csdn.net/fengbingchun/article/details/51474728 给出了在Windows遍历指定文件夹的C实现,这里给出在Linux下遍历目录的实现,Windows和Linux下的实现都是参考了OpenCV 2.x中的实现,OpenCV中的用法可参考https://blog.csd…

要活102年,阿里凭借的是什么?
由浅到深、由轻到重、由拥抱到创新,看似“风平浪静”的历史背后,中国互联网江湖的发展实则“波涛汹涌”。对于身处核心位置的科技巨头阿里巴巴而言,将如何更好地去实现“希望活 102 年”的愿景?凭借的究竟又是什么?作者…

Go基础知识学习(6) 接口
2019独角兽企业重金招聘Python工程师标准>>> Golang接口定义使用interface来声明,它相对于其他语言最大的特定就是接口定义和实现的关联性仅仅依赖接口的名字和声明,无需显式声明。 接口定义和实现 在下面这个例子中,定义了两个自…

多模态数据+知识图谱,这次你的疑难杂症有解了!
数据是AI的基础,不同行业领域的数据来源广泛、形式多样,其每一种来源或形式都可以看作是一种模态,例如视频、图片、语音以及工业场景下的传感数据,红外、声谱等。多模态数据的语义理解与知识表示让智能体能更深入地感知、理解真实…
Linux下通过gettimeofday函数获取程序段执行时间
在Linux下计算某个程序段执行的时间一般使用gettimeofday函数,此函数的声明在sys/time.h文件中。此函数接收两个结构体参数,分别为timeval、timezone.两个结构体的声明如下:struct timeval {time_t tv_sec; /* seconds */long tv_usec; /* mi…

matlab练习程序(Log Polar变换)
Log Polar就是所谓的极坐标变换,通过变换能将笛卡尔坐标系中的图像映射到极坐标系中。 确切的来说我这里不算是Log Polar,因为Log Polar是将图像从(x,y)映射到(log(r),theta),而我是将图像从(x,y࿰…

SiteMapPath基本用法
1、添加一个网站地图项 Web.sitemap项 2、在 Web.sitemap项的写法如下: <?xml version"1.0" encoding"utf-8"?><siteMap xmlns"http://schemas.microsoft.com/AspNet/SiteMap-File-1.0"><siteMapNode url"defa…

closurescallbacks
引用文章原文地址:(声明:文章只为自己总结知识,内容东拼西凑,版权归以下作者所有。) 1. Wikipedia: callback(computer science) 2. Implement callback routines in Java By John D. Mitchell, JavaWorld.…
吴恩达老师深度学习视频课笔记:卷积神经网络
计算机视觉:包括图像分类(image classification)、目标检测(object detection)、风格迁移(neural style transfer)等等。边缘检测示例:神经网络的前几层可以检测边缘,然后后面几层可能检测到物体的部分,接下来靠后的一些层可能检测…

COCO 2019挑战赛,旷视研究院拿下三项计算机识别冠军 | ICCV 2019
出品 | AI科技大本营(ID:rgznai100)10月27日,两年一度的国际计算机视觉大会ICCV 2019(InternationalConference on Computer Vision)在韩国首尔开幕。作为ICCV 2019重头戏,COCO 是人工智能领域最具影响力的…

runners学习
runners是由salt-run命令调用的,一般我用的到就是jobs和manage模块。源代码是在./site-packages/salt/runners/下的。当然我们可以自定义runners。先谈谈jobs模块。包含active、lookup_jid、list_job、list_jobs、print_job五种方法。salt-run jobs.active ->返回…
Swift基础 - - 高德地图实践
高德地图开发需要自己到官网http://lbs.amap.com/console/ 注册一个ak,新建一个swift工程,然后在Info.plist中添加一个NSLocationAlwaysUsageDescription或者NSLocationWhenInUseUsageDescription。 高德地图的库以及依赖库加入到项目里面 需要的库如下…

Shell脚本示例代码
1. echo_printf_usage.sh: echo和printf的用法 #! /bin/bash# echo和printf的用法# echo是用于终端打印的基本命令.在默认情况下,echo在每次调用后会添加一个换行符 echo "hello, beijing" echo "$(pwd)" echo $(pwd) # 结果并不是希望得到的,将会输出: $…

「2019嵌入式智能国际大会」 399元超值学生票来啦,帮你豪省2600元!
2019 嵌入式智能国际大会即将来袭!购票官网:https://dwz.cn/z1jHouwE物联网是继计算机、互联网和移动通信之后的又一次信息产业的革命性发展,在互联网和移动互联网高速发展的时代,几乎所有行业都有数据联网的需求。无论是国外的科…

ThinkPHP学习笔记之Model操作
2019独角兽企业重金招聘Python工程师标准>>> 1. 3种实例化model模型方法 a) new 命名空间GoodsModel(); b) D([“模型标志Goods”]) (之前版本会实例化自定义model对象,目前都实例化Model基类对象) i. 没有参数实例化一个Model对象、有参数也实例化一…
Ubuntu 14.04 64位上配置JDK操作步骤
1. 从 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载jdk-8u172-linux-x64.tar.gz; 2. 解压缩: tar -xvzf jdk-8u172-linux-x64.tar.gz 3. 创建/usr/jdk目录: sudo mkdir -p /usr/jdk 4. 将解压缩后的jd…

Swift语言实现代理传值
需求:利用代理实现反响传值(以下例子采用点击第二个视图控制器中的按钮来改变第一个视图控制器中的Label的内容) 一、创建RootViewController import Foundation import UIKitclass RootViewController:UIViewController,ChangeWordDelegate{…

亚马逊马超:如何使用DGL进行大规模图神经网络训练?
演讲嘉宾 | 马超(亚马逊应用科学家)整理 | 刘静 出品 | AI科技大本营(ID:rgznai100)与传统基于张量(Tensor)的神经网络相比,图神经网络将图 (Graph) 作为输入,从图结构中学习潜在的知…

Python学习系列(六)(模块)
Python学习系列(六)(模块) Python学习系列(五)(文件操作及其字典) 一,模块的基本介绍 1,import引入其他标准模块 标准库:Python标准安装包里的模块。 引入模块的几种方式: i…
Ubuntu14.04 64位上配置终端显示git分支名称
之前在Ubuntu14.04上在终端上显示git分支名称基本上都使用oh-my-zsh,可以参考 https://blog.csdn.net/fengbingchun/article/details/77803322 ,由于限制了权限,使得不能安装oh-my-zsh,显示错误如下:在 https://githu…

创建UITextField对象
//创建UITextField对象 UITextField * tf[[UITextField alloc]init];//设置UITextField的文字颜色tf.textColor[UIColor redColor];//设置UITextField的文本框背景颜色tf.backgroundColor[UIColor grayColor];//设置UITextField的边框的风格tf.borderStyleUITextBorderStyleRou…

non-local神经网络:通过非局部操作解决深度神经网络核心问题
译者 | 李杰出品 | AI科技大本营(ID:rgznai100)回想一下我们熟悉的CNN、RNN。如下图所示,这些神经网络模型都是基于局部区域进行操作,属于local operations。为了获得长距离依赖,也就是图像中非相邻像素点之间的关系&a…

fgets()用法笔记
为了避免缓冲区溢出,从终端读取输入时应当用fgets()代替gets()函数。但是这也将带来一个问题,因为fgets()的调用格式是: fgets (buf, MAX, fp)fgets (buf, MAX, stdin) buf是一个char数组的名称,MAX是字符串的最大长度,…