1.引言
文本分类是NLP很多任务中都作为一项基本的任务,也是一项非常重要的任务,比如文本检索、情感分析、对话系统中的意图分析、文章归类等等,随着深度学习的发展,神经网络在NLP文本分类中的模型越来越多,也取得了比较不错的效果,但是,当语料和类别比较大时,很多深度学习方法不管在训练还是预测时,速度都非常慢,因此,为了克服该缺点,facebook在16年提出了一个轻量级的模型——FastText,该方法在标准的多核CPU上训练10亿级的词汇只需要10分钟,并且准确率可以与很多深度学习方法相媲美,论文的下载地址如下:
下面我们将具体介绍一下该模型的原理和结构,并用tensorflow来实现它。
2.FastText原理介绍
2.1 模型结构
FastText的网络结构与word2vec中的CBOW很相似,如图1所示。模型主要包含一个投影层和一个输出层,与CBOW的结构一样,其中,与CBOW主要有两点不同:第一个是CBOW的输入是每个单词的上下文单词,而FastText的输入的一个文本中的特征,可以是Ngram语言模型的特征;第二个是CBOW的输出的目标词汇,而FastText的输出则是文本的类别。
假设对于N个文本或文档,记为单个文本或文档的ngram特征,为隐藏层(投影层)的权重矩阵,为输出层的权重矩阵,则对于文本或文档的特征向量,每个特征会首先根据id映射到中对应的向量,然后,对这个特征向量计算平均作为整个文本或文档的向量表示,最后,将该文本或文档向量经过输出层,采用softmax函数计算得到该文本或文档在每个类别对应的概率表示。可以发现,FastText在输出层中并没有采用非线性函数,因此,在训练和预测时速度非常快。
在损失函数的选择方面,FastText选取的是负对数损失函数,其计算公式如下: