技术解读 | 基于fastText和RNN的语义消歧实战

标签: 技术 fasttext rnn | 发表时间:2018-07-16 17:04 | 作者:云脑科技
出处:https://www.jiqizhixin.com/

1.问题的引入

在我们云脑科技最近的一个项目中,需要对文本中提取的实体进行消歧(WSD, Word Sense Disambiguation),即确定某个实体在当前上下文中是我们期望的一个意义。

比如,

美国电影《坏女孩》由Myriad Pictures Inc.于2013年出品。讲述雅蕾克丝,一个女同性恋,父母离异,母亲重新找了一个继父,却又早早自杀身亡;父亲也重新找了个继母,继母对她百般刁难。

其中坏女孩、继父、继母、同性恋都是候选的电影作品名。但结合上下文,如何去掉歧义候选,只保留坏女孩,这就是我们需要解决的消歧问题。

2.解决消歧问题的一般思路

2.1 基线算法

机器学习任务一般需要对效果有简单的基线设置,WSD的基线可以用Lesk算法确定。人类在类似WordNet的词汇释义标注语料上的共识大概75%-80%,这可以作为WSD任务的上限参考。

Lesk是一个经典的算法。它的主要思想是:在词典中,常常需要借助若干其它词汇来对一个词进行解释。因此针对一条语料,我们可以选取它与词典中词汇重叠最多的那条释义。如果词典中的解释太过简单,可以把已标注释义的例句也当做释义内容。

2.2 监督学习算法

监督学习算法一般涉及如下步骤:

a.确定词表释义表,eg: 目标词bass, 两个释义:乐器-贝斯、鱼类-鲈鱼;

b.获取训练语料:google、crawl;

c.特征提取:一般先设定一个窗口(window),只关心这个窗口内的词。常用的两种提取:窗口内每一个位置的词汇、相对位置、词性;以及忽略位置和词性的词袋表示,即词典内词的出现计数;

d.分类器选择朴素贝叶斯逻辑回归、SVM、KNN、神经网络

2.3 半监督学习算法

如果对于目标问题没有足够的标注语料,如何启动呢?

一般可以从少量的手动标注启动,按照同一共现释义相同进行标注扩展,例如:bass的鲈鱼解释一般与fish共现;乐器贝斯解释一般与play共现。因此可以标注所有<fish, bass> 和 <play, bass>的语句。

还可以按照同一文章释义相同进行标注扩展,例如利用共现词标注了某个句子,那么可以确定这个文章中其他的目标词的同释义标注。

3.fastText和RNN的组合消歧方法

3.1 选型思路

在本文的应用场景下,我们对于词汇的候选释义集合是固定的。比如候选词坏女孩来说,我们并不关心它的实际解释,只关心它在当前语境中是否代表一个电影名。

因此,与上述一般化的消歧思路不同,我们可以先把问题转化成一个语境分类问题。fastText在这种近乎端到端的文本分类问题上有非常不错的效果,模型尺寸较小而且训练速度也很快。在fastText分类器对候选词的上下文进行领域分类后,基本能够排除掉大部分的非目标领域候选,比如示例语句中的继父/继母/同性恋等等。

但是在拿到最终的目标词提取结果后,发现还有一些电影语境中的其他歧义候选词。比如美国电影《坏女孩》这个例句,能够通过电影领域上下文分类,但是候选词中有电影,没错,电影也是一个影片的候选词。因此,我们还需要更精细化的消歧处理。因此,我们在此处引入了基于RNN的序列标注算法,在确定语境范围后,进一步在语境内标注合理的出现位置。

3.2 fastText语境分类

训练语料

我们的训练语料是来自一些公开网站的影视信息和资讯信息,利用中文标点进行了语句切分。由于我们的语料中绝大多数的作品名是由书名号扩起的,可以利用这一点将语句进一步标注为包含领域关键词的短句。

特征处理

为了简化处理,直接将原始语句做了bigram切分。此时我们去掉了语料中的书名号,因为语料的标注是用书名号这种强规则来标注的,因此模型很可能只学到书名号这个特征。并且在做中文bigram切分时,非中文的数字/英文单词也需要作为一个整体处理。

训练模型

利用官方的源码编译二进制工具进行训练,以下是训练调参过程中的一些小tips。

a.使用epoch参数来更好的拟合训练集;

b.使用wordGram参数,让fastText学习到连续的切分嵌入,弥补分词不足和语序的缺失,但是模型大小会飞速增长,我只用到了wordGram=3;

c.使用minCount参数对词表词频进行过滤,避免词表过于庞大。以我们的语料为例,过滤效果是词表从75w减少到7w,我选取的minCount=5;

d.使用quantize命令压缩最终的模型,尺寸会小很多,本例中是300m到7.5m;

e.使用test命令进行验证集验证时,会发现准确P和召回R是相等的,这是因为fastText把分类问题都当做多分类来处理,不会输出针对每个分类的PR,最终会用所有分类的PR进行某种平均。因此需要手动编写一个基于predict命令的验证过程;

f.注意语料的设计,起初只用了电影语料的作品句子和非作品句子,结果发现在普通文本上的表现并不好。因此又加入了一部分的社会新闻语料,让模型能有更好的泛化效果。

3.3 RNN序列标注

训练语料

语料部分还是采用了fastText相同的规则,利用书名号这种强特征标注了作品名部分。由于序列标注的分类不平衡问题非常明显,因此决定用RNN的序列标注作为fastText的一个补充,训练语料中没有添加不含作品名的语句。

特征处理

直接采用字符级别的切分,同时和fastText一样去掉了书名号,此处将连续的字母和英文单词都做了特殊标签的处理,可谓一切从简。同时将训练语料统一在长度30上,超长的截断,不足的补充[eos]。

训练模型

a.采用多层的双向RNN+softmax分类;

b.引入了dropout进行正则化处理;

c.针对序列标注的类不平衡问题,起初尝试了针对分类配置loss权重的方法,但是权重设置过于主观。最终我们使用了focal loss。Focal Loss的核心思想是样本因为分类难度的不同对损失函数的贡献是不同的。鼓励模型把难分类的分对,而不是进一步优化易分类的效果。

4.小结

最后回顾一下我们在这项任务中的若干做法。

1.消歧问题的基线可以借助贝叶斯、Lesk等简单算法来设计;

2.语料不足时可以采用一些半监督的方法来扩充标注样本,人为总结标注规则;

3.利用fastText做短句分类,确定候选词所在上下文是否是目标领域;

4.利用RNN在短句中做关键信息标注,过滤掉领域上下文中非关键信息的候选;

5.利用focal loss改善序列标注中的类别不均衡问题,提升模型的召回表现。


欢迎探讨。

作者介绍

Amow,云脑科技机器学习算法工程师,负责开发NLP方向的基础服务。

相关 [技术 fasttext rnn] 推荐:

技术解读 | 基于fastText和RNN的语义消歧实战

- - 机器之心
在我们云脑科技最近的一个项目中,需要对文本中提取的实体进行消歧(WSD, Word Sense Disambiguation),即确定某个实体在当前上下文中是我们期望的一个意义. 美国电影《坏女孩》由Myriad Pictures Inc.于2013年出品. 讲述雅蕾克丝,一个女同性恋,父母离异,母亲重新找了一个继父,却又早早自杀身亡;父亲也重新找了个继母,继母对她百般刁难.

Facebook词向量工具FastText

- - 标点符
fastText是Facebook于2016年开源的一个词向量计算和文本分类工具,在文本分类任务中,fastText(浅层网络)往往能取得和深度网络相媲美的精度,却在训练时间上比深度网络快许多数量级. 在标准的多核CPU上, 能够训练10亿词级别语料库的词向量在10分钟之内,能够分类有着30万多类别的50多万句子在1分钟之内.

[转][转]Facebook 开源的快速文本分类器 FastText

- - heiyeluren的blog(黑夜路人的开源世界)
比深度学习快几个数量级,详解Facebook最新开源工具——fastText. 导读:Facebook声称fastText比其他学习方法要快得多,能够训练模型“在使用标准多核CPU的情况下10分钟内处理超过10亿个词汇”,特别是与深度模型对比,fastText能将训练时间由数天缩短到几秒钟. Facebook FAIR实验室在最新博客中宣布将开源资料库fastText,声称相比深度模型,fastText能将训练时间由数天缩短到几秒钟.

FastText 文本分类使用心得 - CSDN博客

- -
最近在一个项目里使用了fasttext[1], 这是facebook今年开源的一个词向量与文本分类工具,在学术上没有什么创新点,但是好处就是模型简单,训练速度又非常快. 我在最近的一个项目里尝试了一下,发现用起来真的很顺手,做出来的结果也可以达到上线使用的标准. 其实fasttext使用的模型与word2vec的模型在结构上是一样的,拿cbow来说,不同的只是在于word2vec cbow的目标是通过当前词的前后N个词来预测当前词,在使用层次softmax的时候,huffman树叶子节点处是训练语料里所有词的向量.

NLP︱高级词向量表达(二)——FastText(简述、学习笔记) - CSDN博客

- -
FastText是Facebook开发的一款快速文本分类器,提供简单而高效的文本分类和表征学习的方法,不过这个项目其实是有两部分组成的,一部分是这篇文章介绍的. fastText 文本分类(paper:. Classification(高效文本分类技巧)),. 另一部分是词嵌入学习(paper:. Information(使用子字信息丰富词汇向量)).

前端技术

- - CSDN博客综合推荐文章
随着互联网产业的爆炸式增长,与之伴生的Web前端技术也在历经洗礼和蜕变. 尤其是近几年随着移动终端的发展,越来越多的人开始投身或转行至新领域,这更为当今的IT产业注入了新的活力. 尽管Web前端技术诞生至今时日并不长,但随着Web技术的逐渐深入,今后将会在以下几方面发力. JavaScript的兄弟们.

SSI技术

- - 开源软件 - ITeye博客
1.       SSI,通常称为“服务器端包含”技术. 使用了SSI技术的文件默认的后缀名为.shtml,SSI技术通过在html文件中加入SSI指令让web服务器在输出标准HTML代码之前先解释SSI指令,并把解释完后的输出结果和HTML代码一起返回给客户端. 2.       SSI技术的优点:SSI技术是通用技术,它不受限于运行环境,在java、dotnet、CGI、ASP、PHP下都可以使用SSI技术;解释SSI的效率比解释JSP的效率快很多,因为JSP规范提供了太多的功能,这些功能都需要servlet引擎一一进行解释,所以效率比较低.

技术选型

- - 企业架构 - ITeye博客
MVC Framwork: SpringMVC3.0 Restful的风格终于回归了MVC框架的简单本质,对比之下Struts2概念太复杂更新又太懒了. Template:JSP2.0且尽量使用JSP EL而不是taglib,万一要写taglib也用纯JSP来编写,一向是SpringSide的推荐,Freemarker们始终有点小众, 而Thymeleaf与美工配合度非常高,可惜也是太少用户了.

技术 in Netflix

- - 后端技术杂谈 | 飒然Hang
综合市面上的公开资料总结了Netflix在技术上面的一些实践和创新,从中能够得到不少启发和提示.

技术的异化:读《技术垄断》

- Dynamic - It Talks--上海魏武挥的博客
事实上,我认为国内对马克思或神圣化或妖魔化,都是要不得的. 我们应该还马克思一个伟大的社会学(当然还有哲学、经济学之类)学者的本来面目,而不是把他的话当成教义. 异化就是一个相当精到的学术词语,它所描述的是人们创造发明某物本来为了让人们自己更好地工作生活,结果该物却成了人的主宰. 在很多领域,都有异化的影子,比如宗教,比如官僚体系,当然,也包括技术.