重磅!!|“自然语言处理(NLP)系列07”之 fastText模型详解

2019-08-08 15:49:05 浏览数 (2)

引言

本次文章将主要介绍fastText模型,首先会从模型的简介开始,然后进行模型原理分析,最后与Wordvec(跳字模型(Skip-Gram)、连续词袋模型(CWOB))做对比。

注:Word2vec主要指跳字模型(Skip-Gram)、连续词袋模型(CWOB)

本文概要

1

fastText模型的概述

2

fastText基本原理分析

3

fastText模型分析

4

fastText和Word2vec模型对比

5

参考文献

正文开始

1

fastText模型的概述

fastText是facebook开源的一个词向量与文本分类工具,在2016年开源,典型应用场景是“带监督的文本分类问题”。提供简单而高效的文本分类和表征学习的方法,性能比肩深度学习而且速度更快。

fastText结合了自然语言处理和机器学习中最成功的理念。这些包括了使用词袋以及n-gram袋表征语句,还有使用子字(subword)信息,并通过隐藏表征在类别间共享信息。

2

fastText基本原理分析

英语单词通常有其内部结构和形成方式。例如,我们可以从“dog”,“dogs”和“dogcatcher”的字面上推测它们的关系。这些词都有同一个词根“dog”,但使用不同的后缀来改变词的含义。而且,这个关联可以推广至其他词汇。例如,“dog”和“dogs”的关系如同“cat”和“cats”的关系,“boy”和“boyfriend”的关系如同“girl”和“girlfriend”的关系。这一特点并非为英语所独有。在法语和西班牙语中,很多动词根据场景不同有40多种不同的形态,而在芬兰语中,一个名词可能有15种以上的形态。事实上,构词学(morphology)作为语言学的一个重要分支,研究的正是词的内部结构和形成方式

在fastText中,每个中心词被表示成子词的集合。下面我们用单词“where”作为例子来了解子词是如何产生的。首先,我们在单词的首尾分别添加特殊字符“<”和“>”以区分作为前后缀的子词。然后,将单词当成一个由字符构成的序列来提取n元语法。例如,当n=3时,我们得到所有长度为3的子词:“<wh>”“whe”“her”“ere”“<re>”以及特殊子词“<where>”。

‍‍在fastText中,对于一个词w,我们将它所有长度在3∼6的子词和特殊子词的并集记为Gw。那么词典则是所有词的子词集合的并集。假设词典中子词g的向量为zg,那么跳字模型中词w的作为中心词的向量vw则应该表示成:‍‍

fastText的其余部分同跳字模型(Skip-Gram)一致。

note:如果不明白跳字模型(Skip-Gram),可以看一下前面发的文章,有一篇专门讲跳字模型的。

3

fastText模型分析

fastText方法包含三部分,模型架构层次SoftMaxN-gram特征

  • 模型架构

fastText的架构和word2vec中的CBOW的架构类似,因为它们的作者都是Facebook的科学家Tomas Mikolov,而且确实fastText也算是words2vec所衍生出来的。

连续词袋模型(CWOB)模型图如下:

fastText模型如下:

fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。 fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。

  • 层序softmax

关于层序softmax,其目的就是减少计算量。这个问题前面也已经介绍过了,不过为了文章的完整性,这里重复再写一次。

在某些文本分类任务中类别很多,计算线性分类器的复杂度高。为了改善运行时间,fastText 模型使用了层次 Softmax 技巧。层次 Softmax 技巧建立在哈弗曼编码的基础上,对标签进行编码,能够极大地缩小模型预测目标的数量。

fastText 也利用了类别(class)不均衡这个事实(一些类别出现次数比其他的更多),通过使用 Huffman 算法建立用于表征类别的树形结构。因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高。

其中构造Huffman树的方法为:假设有n个权值,则构造出来的Huffman树有n个叶子结点。若n个权值分别为{w1,w2,…,wn}。

  • 将{w1,w2,…,wn}当做n棵树(每棵树1个结点)组成的森林。
  • 选择根结点权值最小的两棵树,合并,获得一棵新树,且新树的根结点权值为其左、右子树根结点权值之和。词频大的结点作为左孩子结点,词频小的作为右孩子结点。
  • 从森林中删除被选中的树,保留新树。
  • 重复2、3步,直至森林中只剩下一棵树为止。
  • N-Gram特征

fastText 可以用于文本分类和句子分类。不管是文本分类还是句子分类,我们常用的特征是词袋模型。但词袋模型不能考虑词之间的顺序,因此 fastText 还加入了 N-gram 特征。“我 爱 她” 这句话中的词袋模型特征是 “我”,“爱”, “她”。这些特征和句子 “她 爱 我” 的特征是一样的。如果加入 2-Ngram,第一句话的特征还有 “我-爱” 和 “爱-她”,这两句话 “我 爱 她” 和 “她 爱 我” 就能区别开来了。当然啦,为了提高效率,我们需要过滤掉低频的 N-gram。

4

fastText和Word2vec模型对比

在word2vec中,我们并没有直接利用构词学中的信息。无论是在跳字模型还是连续词袋模型中,我们都将形态不同的单词用不同的向量来表示。例如,“dog”和“dogs”分别用两个不同的向量表示,而模型中并未直接表达这两个向量之间的关系。

与跳字模型相比,fastText要表示向量之间的关系,所以其词典规模更大,造成模型参数更多,同时一个词的向量需要对所有子词向量求和,继而导致计算复杂度更高。但与此同时,较生僻的复杂单词,甚至是词典中没有的单词,可能会从同它结构类似的其他词那里获取更好的词向量表示。

5

参考文献

[1]http://www.hankcs.com/nlp/word-vector-representations-word2vec.html

[2]http://zh.d2l.ai/chapter_natural-language-processing/index.html

[3]https://blog.csdn.net/john_bh/article/details/79268850【本文主要参考此篇文章】

0 人点赞