1.FastText原理
1.1 fasttext简介
fasttext是一个快速文本分类的算法,有几个优点:
- fastText 在保持精确度的条件下加快了训练和测试的速度
- fastText 不需要预先训练好的词向量,fasttext可以自己训练词向量
- fastText 使用了层级softmax和字符级N-gram
1.2 fasttext 的网络模型结构
fasttext模型与word2vec中的CBOW很相似,不同之处是fastText预测标签而CBOW预测的是中间词,即模型架构类似但是模型的任务不同。下面我们先看一下CBOW的架构:
通常的词库少则数万,多则数百万,在训练中直接训练多分类逻辑回归并不现实,Word2vec提供两种优化手段,Nagetive sampling和hierarchical softmax,在优化中negative sampling只取少量的负面类,从而减轻了计算量,hierarchical softmax将词库表示成霍夫曼树,从根到叶子表示成一个二分类器,一次多分类的复杂度降低到了树的深度。
fastText模型架构:其中x1,x2,…,xN−1,xN表示一个文本中的n-gram向量,每个特征是词向量的平均值。这和前文中提到的cbow相似,cbow用上下文去预测中心词,而此处用全部的n-gram去预测指定类别
1.2.1 层级softmax
softmax函数常在神经网络输出层充当激活函数,目的就是将输出层的值归一化到0-1区间,将神经元输出构造成概率分布,主要就是起到将神经元输出值进行归一化的作用.
在标准的softmax中,计算一个类别的softmax概率时,我们需要对所有类别概率做归一化,在这类别很大情况下非常耗时,因此提出了分层softmax(Hierarchical Softmax),思想是根据类别的频率构造霍夫曼树来代替标准softmax,通过分层softmax可以将复杂度从N降低到logN,下图给出分层softmax示例: