天天看点

SemEval2015语义评测任务总结

在2014年11月份的时候老师带队,参加了SemEval 2015task15的评测,现在论文刚过,这件事也算是告一段落了,大赛期间那段过程还是比较难受的,时正大三上学期,专业课一大堆,每天的休息时间少的可怜。后期发表论文的过程也是非常漫长的,论文更改的次数接近30次。现在才知道要在会议上发表一篇文章是多么不易了,整个过程持续时间长达5个月。不过这个过程下来,自己的收获绝对非常大,所以今天总结一下。本来这篇文章使用来写一些心得体会的,但是后面想了想,以后求职时在介绍这个经历,要是面试官要求介绍任务,我的处理方法时,直接说我觉的不太容易能说清楚,举例子会清楚得多,另外对我的方法介绍有图才会更清楚一些。于是把这篇文章定位了一下,总结+简要介绍任务和我的处理方法。这样我就可以打开博客跟面试官介绍,我能讲的更清楚,也能让对方了解的更明白,双方都好~

一.接触前沿研究领域的NLP任务

老师说过,进入自然语言领域的一个最快的方法就是参加一个相关的比赛,具体扎入其中,完事后就大概知道自然语言处理做什么了。参加这个任务时我NLP方面的知识几乎为0,当时会比较熟练的使用perl脚本,拿到比赛任务时头晕眼花,根本不知任务所云,感兴趣的可以看看这个任务, 名字叫CPA,花了几天的时间才把任务到底要做什么搞明白。这次比赛也有运气方面的原因,就是这项任务非常新,是最新研究领域的一个块技术,所以参数队总共就5支,所以我们这批可以是为这个技术的发展做垫底的,我比较确信这个任务下次会变的更难一些出现在2016的任务上。一般的测评任务参数队伍非常多,比较成熟的像STS系列,各个国家的参数队伍多达70多支。竞争相当激烈,不过成熟的任务有一个最大的好处就是有前任的基础成果,前任做的好的会在会议上发表论文,贡献出他们的方法来,后面的可以再次基础上改进。对于像CPA这样的第一批参加者,好处是竞争者少,就5支队伍,坏处就是摸着石头过河,几乎没有任何方法的参照,完全的自己想。

二.任务举例描述与我的简单处理方法

先简要的描述一下CPA, 语料模式分析 (CPA) 是语言分析的新技术,该技术主要用于确定文本中词语使用的主要模式。本次任务是确定动词的主要模式。整个任务分为三个子任务,但是结果上我们第一个任务比较出色,所以就只介绍第一个任务,第一个任务可以说是序列的标注问题,分为两层,一层是语法标注,另一层是在语法标注的基础上进行语义标注。语法标注的标签集是

SemEval2015语义评测任务总结

用一个最简单的例子来表明第一个任务,假设当前句子的输入是:

Mr Eigen plans to wage his war diplomatically. 

指定以plan为核心动词,经过任务一后变成下面这样,标注出来的结果就是plan的上下文环境。

SemEval2015语义评测任务总结

对于简单句的标注,明白的人都知道一般的依存关系就能解决了,但是如果是下面这样的句子呢:

Lord Sankey 's attitude indicates that a court of law in the United Kingdom would need weighty evidence before becoming willing toabandon the principle of legality according to the pre-existing constitutional norms, and so it should, so long as uncertainty as to the `realities' prevails.  

现在要求找出abandon的主语,我相信人直接读过去,可能一时半会都很难找出abandon的主语吧,怎样让计算机在瞬间根据某个算法找出abandon的正确主语呢,又万一abandon根本就没有主语呢。当时我被这个问题困扰了好久,大概花了一周的时间来想算法,期间每天一大早的起床对着数千行的文本进行归类,分析。经过一周后,在某天终于分析点出眉目来,想出了一个感觉可行的算法,马上兴奋的写了实现,结果效果果然不错!后来我把这个算法叫做基于依存连的标注算法,对主语宾语的标注比较有效。下面的图解是我的一个方法:

SemEval2015语义评测任务总结

沿着abandon的依存链开始走,满足某些规则的情况下,会找到court,即是abandon的主语,如果没有满足规则的,则认为abandon无主语。

另外遇到的一个瓶颈问题是语义的一个问题,大致介绍下,经常会遇到两个几乎一样结构的句子,简单来说,比如account for, for 与account含有某种标签关系,其他句子中出现的verb for,就不一定了,得看具体的语义环境,人是很容就能读出来verb与for之间是否存在标签关系的,因为我们明白其中的含义就知道了,怎样让计算机也明白了。后来我想了一个也算有效的方法,就是提前把预览语料,分析出核心动词的结构,并且统计,如果某类结构经常出现的话,我认为那类结构是那个动词比较常用的方式,也自然在那类结构里面与该动词含有标签的概率就大得多。

最后我实现了一个小型的标注系统,框架如下:

SemEval2015语义评测任务总结

三.论文修改期间

这次论文写作是用英语,我复制中文写出来,然后小组另一成员进行翻译,就这样反反复复,初稿终于出来了,但随后变被国外的参数对'黑'的不行,一看就知道不是纯正英语,然后反复的改。此外在论文期间,我们审核国外参数对的论文时,发现他们用的方法是机器学习的方法,但效果没我们好。其实最开始我们也想走机器学习的方法的,拿来一个工具包,选取一些特征,跑一跑,这个方法没走下去是我觉的真正的问题的原因没找到,选取的特征怎么知道哪些对问题是有效的,哪些是无效的,不能光靠运气取平均纳,我看到国外的队伍光是特征就用了50多种,估计训练起来也是特别费时吧,所以我们没走这条路,但是后期我觉的可以改进的话还是用机器学习比较好,实际上这本来就是一个分类问题,找到问题的一些关键点后,就可以试一试现有的模型了。在此次期间,最大的一个收获就是认识了审稿人Dan, 我能感觉到他很厉害,貌似也是谷歌的研究员,追求完美,我跟他邮件沟通来回达30多次,这就意味着论文的修改次数达到了30次,Dan人非常好,从邮件中能感觉到他对工作的认真负责,一丝不苟。后来我没事儿有疑惑也找他问问题,也是非常热心的解答,在此期间,论文的写作上他算是我的老师了,很多NLP英语用词上面也学会很多,总之如果有机会真想见见他。十分感谢Dan的热心帮助,大力感谢老师提供的这次机会,这几个月来成长了很多。