NLPCC-2019 依存句法分析领域移植评测技术分享(封闭情况下双第一)

在刚刚结束的NLPCC-2019 依存句法分析领域移植评测任务中,我们队有幸拿到了在封闭条件下无监督和半监督两个任务的双第一。这离不开大家的付出与努力,在这里想与大家分享下参赛的一些细节。


1.任务介绍

1.1NLPCC-2019 依存句法分析领域移植评测

本次评测是由苏州大学、阿里巴巴联合举办的。在本次评测任务中,提供了约 17K (句子数)平衡语料(BC)数据作为源领域数据,10K句产品评论(PC)、8K 句产品博客(PB)和 3K 句网络小说(ZX)数据作为三个目标领域数据;另外,对于目标领域的数据,还给出了大规模的无标注数据。针对半监督和无监督的领域移植场景,和封闭评测和开放评测两种设置,将评测划分为 4 个子任务:无监督领域移植(封闭或开放)、半监督领域移植 (封闭或开放)。

1.2比赛规则

这里大致说下比赛规则。无监督与半监督的区别就是,半监督可以使用目标领域的训练集,而无监督不可以,所谓的封闭条件下,就是只能使用主办方提供的词向量,像什么其他的预训练,使用其他开源工具得到新的信息,如词性、词义等特征,词典、句法语义树库等。这些都是不允许的!

1.3数据介绍

先看下数据,刚开始看到这些数据是比较蛋疼的。因为它和我们之前看到的parser数据不太一样。这份数据只是标注了一部分,其他的是用模型补全,每个词后面都是有个概率值,1代表人工标注,其他的值越高说明越靠谱。具体看图:

这是源领域训练集的一条数据,大家可以看到,不是1的就代表是模型补全的,可能有噪声。其他三个领域的训练集都大同小异,在这里就不给大家看了。

这是PC领域的开发集,大家可以看到很多是none,在算UAS,LAS(这是句法的评价指标,不懂得自己去查吧。。。)的时候大家可以这部分舍去。

这就是本次比赛的数据格式了,其中还有很多无标注数据,就是只给了词性,其他什么都没有。

下图是数据规模:

 

2.比赛方法

我们再跑baseline的时候发现了一个问题,pc领域出奇的低,pb居中,zx最好。最终我们发现:

PB:PB领域金标(概率值为1)大约占总词数的35.5%

ZX:ZX领域金标(概率值为1)大约占总词数的21.6%

PC:PC领域金标(概率值为1)大约占总词数的22.3%

这里可以看到。虽然PC的比列比ZX高,但是!!!个人认为,ZX毕竟是小说,从写作的角度来看,还是比较工整有规律的。而不像评论,大家开心可能加个标点,不开心可能人都读不懂你写的啥。之前还标注过评论的数据(现在想想都痛苦,没准还标过你的!!!),所以在这呼吁大家,请大家认证对待你的每一次评论,因为一个好的评论不仅可以为其他买家提供参考,还可以为NLP贡献一份力量!!!

2.1基线模型(biaffine parser)

我们的基线模型是用的biaffine parser,这是一种基于图的句法解析器,我们还试过基于转移动作的parser,但是效果没这个好。可能是基于动作的无法识别交叉的情况。大家可以具体看看这篇论文,这位博士好像是专修句法的,很厉害。下面是论文地址:

biaffine parser.

2.2对抗

在半监督,我们加了对抗。因为半监督是用源领域和目标领域的训练集一起训练,我们想要bilstm提取到领域之间共有的特征,这有助于寻找句法解析的共同特性,利于迁移。我们具体怎么做的呢?就是在过bilstm之后分为两部分,一部分还是正常的进行句法,另一部分我们过一个GRL(梯度反转层),然后做一个二分类。大家看图,这是一篇论文里面的图:

这个GRL就是为了让梯度反转过来,在梯度前面加一个负号,大家可以想一下,你是为了扰乱bilstm不让它去区分出两个领域的特征,所以最终这个二分类的loss的变化趋势是:先下降,就是刚开始模型可以区分的很好,但是在我们的认为干扰下,loss越来越大,也就是分类的老是出错,也就达到了我们的目的。

2.3char特征

这一步我们加了一个char级别的特征,为了让模型收敛更快,并且还能提高点性能。

2.4threshold

由于这份语料的特殊性,许多数据不是金标,也就是说这里面有噪声,我们想了个办法,就是按照阀值来卡,低于这个阀值的句子,我们就不让他进行反向传播。这样做起到了一定作用, 但是只是在PB领域有用。应该还有其他办法解决。

2.5self-training

重头戏来了,我们在无监督使用的是self-training,因为我们拥有大量的无标注数据可以去利用,这是一种自举的方法。具体的步骤就是,用你训练好的模型去解码无标注数据,按照一定的策略(我们前几轮是随机取几分之几,后来则是按照概率值来卡)去筛选数据,然后将这些数据加到训练数据里面接着训练一个更好模型,然后这样反复的迭代,直到最后模型性能达到瓶颈不再上升。

2.6tri-training

先解释下这个方法,就是先练好三个最好的模型。在这里我们就是parser1,parser2,parser3。我们分别让三个parser去解码数据,然后将parser1 和 parser2解码的数据的相同部分添加到parser3的训练数据等待下一轮训练,其他也是两两结合。然后反复迭代。知道三个模型的性能不在提升。

这个方法最开始周志华在2005年提出来的,但是由于实验室算力有限还有比赛的时间限制,我只在PB上试了下,还是先进行了几轮self-training,然后在tri-training。最终效果比单纯的self-training要好。

2.7combine

以上实验我们都是准备三个模型。这个策略就是,我们三个模型在解码时进行投票,这样解码出来结果能够提高0.1值0.2个点。

 

3.实验结果分析

先是半监督的baseline:

然后是无监督的baseline:

最后是我们的比赛结果:

大家可以找找我是哪个队哈哈。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值