天天看点

CCF BDCI 技术需求与技术成果关联度冠军分享

“技术需求”与“技术成果”关联度比赛

CCF BDCI “技术需求”与“技术成果”项目之间关联度计算比赛由中国计算机学会和八六三软件发起,赛题目的是发现好的方法、算法或模型,并提供用于验证的程序源代码,可应用于平台模拟人工,实现“需求——成果智能匹配服务”。

文本将介绍冠军团队"莽就完事了"的赛题分享,冠军团队由马凯欣一人组成。凯欣来自东北林业大学,本文将包括凯欣的参赛方案分享和代码分享。

莽就完事了 | 马凯欣

我叫马凯欣,来自东北林业大学,目前是计算机技术专业一年级在读,专业方向是自然语言处理。我之前没有参加过大数据与人工智能的相关比赛,这次是我的头一次,CCF BDCI的赛题我也不知道挑哪一个好。

说到参赛经历我倒是有一些,本科参加过ACM-ICPC竞赛,也取得过一些奖项。

by 马凯欣

赛题介绍&数据

人工判断技术需求和技术成果关联度的方法是:从事技术转移工作的专职工作人员,阅读技术需求文本和技术成果文本,根据个人经验予以标注。

“技术需求”与“技术成果”项目之间关联度计算模型技术需求与技术成果之间的关联度分为四个层级:强相关、较强相关、弱相关、无相关。

文件名称  说明 
DataSet.zip 包含两个csv文件, 其中Achievements为技术成果表,Requirements为技术需求表。
Train_Label.csv 为关系表,标注了部分Achievements技术成果表跟Requirements技术需求表的关联关系。
Test.csv 为待预测的关系表,需要预测技术成果表跟技术需求表的关联关系。

Achievements为技术成果表,文件中的(.csv)(UTF-8编码)一行对应于一个技术成果,以“,”分割不同的识别字段,具体描述具体格式如下:

  字段信息  类型  描述 
Guid string ID列
Title string 技术成果的标题
Content string 技术成果的具体内容 

Requirements为技术需求表,文件中的(.csv)(UTF-8编码)一行对应于一个技术需求,以“,”分割不同的识别字段,具体描述具体格式如下:

字段信息  类型  描述 
Guid string ID列 
Title string 技术需求的标题 
Content string 技术需求的具体内容 

Train_Label.csv是Achievements技术成果表跟Requirements技术需求表的关联关系:

字段信息 类型  描述 
Guid string ID列
Aid string 技术成果的表的ID
Rid string 技术需求的表的ID
Level string 1无相关、2弱相关、3较强相关、4强相关 

评测方法

本次竞赛初赛评价指标使用MAE系数。平均绝对差值是用来衡量模型预测结果对标准结果的接近程度一种衡量方法。计算方法如下:

CCF BDCI 技术需求与技术成果关联度冠军分享

‍‍其中pred_i为预测样本,y_iy_i为真实样本。MAE的值越小,说明预测数据与真实数据越接近。最终结果为:

CCF BDCI 技术需求与技术成果关联度冠军分享

最终结果越接近1分数越高.

数据清洗&数据增广

经过对赛题文本的内容进行筛选查看,发现其中存在一定量的空白、"\n"、"未提供"等无效信息。简单的使用对应标题对无用信息进行替换即可。

CCF BDCI 技术需求与技术成果关联度冠军分享

对问题进一步化简,可以简化成两个文本之间的关联度计算。

  1. 那么A文本与B文本之间关联度,同样也是B文本与A文本之间关联度。该方法在仅取标题时可以提升成绩。当加入内容时会造成过拟合,最终未采用该方法。
  2. 那么假设A文本与B文本之间关联度为4,A文本与C文本之间关联度为3,那么可以假定B文本与C文本之间关联度为3,按照这个思路可以假设关联矩阵
CCF BDCI 技术需求与技术成果关联度冠军分享

其中A文本与B文本之间关联度为i,A文本与C文本之间关联度为j,那么B文本与C文本之间关联度为R_(i,j)。此方法可增加数据295994条,从中按照原数据集各个关联度等级的比例从中随机取出10000条。

该方法我认为具有一定的可能性,但由于训练时间过长、提交次数有限,尝试过的参数均会造成过拟合现象。最终模型中未对数据进行数据增广。

构建模型

经过一定量的实验对比最终的模型确定为分别进行标题与内容关联度判别的孪生BERT模型,其中进行技术成果标题和技术需求标题关联度计算的BERT采用谷歌开源的BERT-base;进行技术成果内容与技术需求内容关联度计算的BERT采用哈工大提出的BERT-wmm。

CCF BDCI 技术需求与技术成果关联度冠军分享
CCF BDCI 技术需求与技术成果关联度冠军分享
CCF BDCI 技术需求与技术成果关联度冠军分享

最终只采用这个模型,也没有进行融合。当然可以很简单的认为它就是分别使用两个BERT进行相似度判别然后进行拼接。 

其中进行技术成果标题与技术需求标题关联度计算的BERT采用谷歌开源的BERT-base;进行技术成果内容与技术需求内容关联度计算的BERT采用哈工大讯飞联合实验室发布基于全词覆盖的BERT-WWM。该预训练由于采用了全词覆盖,在多数情况下可以取得更好的效果。

在第一个进行技术成果标题与技术需求标题关联度计算的BERT中输入最大长度MaxLenT设置为128,两个标题拼接最大长度也没有超过128个字,同时这样可以减少训练时间和显存需求;在第二个进行技术成果内容与技术需求内容关联度计算的BERT-WWM中输入最大长度MaxLenC设置为512,尽可能多的读取数据内容。

两个BERT都采用12layers, 768hidden states, 12heads版本,该模型采用7折交叉验证,其中batch size取16,epoch取8,并在训练时保存较好的模型权值,初始学习率设置成5e-5,后续学习率设置成1e-5。

预测后处理

通过观测评测指标发现,当模型判断关联度为1和2的概率非常接近时,输出为2更加合理。所以当模型无法判别时,通过修正可以将输出偏向2或3。

CCF BDCI 技术需求与技术成果关联度冠军分享
CCF BDCI 技术需求与技术成果关联度冠军分享

模型对比

CCF BDCI 技术需求与技术成果关联度冠军分享

1.其中BERT-base、RoBERTa-base、BERT+数据增广-1、BERT+数据增广-2、BERT+数据增广-3模型中输入均只有技术成果标题与技术需求标题,MaxLenT为128,其余超参数与最终模型中基本相同。

2.孪生BERT-1模型为标题与内容拼接的孪生BERT模型,MaxLen为512,其余超参数与最终模型中基本相同。

3.孪生BERT-2模型为分别进行标题与内容关联度判别的孪生BERT模型,MaxLen为512,其余超参数与最终模型中基本相同。

4.BERT+数据增广-1模型中,数据增广采用第一种方式。

5.BERT+数据增广-2模型中,数据增广采用第二种方式,且取全部增广数据。

6.BERT+数据增广-3模型中,数据增广采用第二种方式,但按照原数据集各个关联度等级的比例从中随机取出。

7.BERT-T128C512模型中BERT均采用谷歌发布的BERT-base,其余超参数与最终模型中相同。

8.BERT-WWM-T128C512模型中BERT均采用采用哈工大讯飞联合实验室发布的BERT-WWM,其余超参数与最终模型中相同。

9.最终模型中标题采用谷歌发布的BERT-base,内容采用哈工大讯飞联合实验室发布的BERT-WWM。

比赛总结

我个人认为BERT-WWM预训练相比于BERT预训练对中文效果应该更好,而得到这样的结果,可能的原因是两个预训练在训练时使用的语料库不同,标题部分中专业名词比重较大且短小,BERT对此比较敏感,而BERT-WWM对常规文本比较敏感。当然这个成绩中也有预测偏好处理的功劳。

本次比赛十分感谢华南理工大学Chevalier同学在知乎上分享的BaseLine。本代码修改于该代码。由于刚开始接触深度学习,也是头一次参加比赛,本人水平有限欢迎批评指正。

冠军代码分享:

​​https://github.com/Makaixin/Correlation-between-requirements-and-achievements​​