在深度学习遍地开花的今天,浅层的网络结构甚至是传统的机器学习算法被关注得越来越少,但是在实际的工作中,这一类算法依然得到广泛的应用,或者直接作为解决方案,或者作为该问题的baseline,fastText就是这样的一个文本分类工具。fastText是2016年由facebook开源的用于文本分类的工具,fastText背后使用的是一个浅层的神经网络,在保证准确率的前提下,fastText算法的最大特点是快。
fastText是如何保证速度的呢?首先fastText的模型结构如下所示:
假设文本有N 个词,如上图所示,首先将这N个词映射成词向量,可以通过矩阵A 实现,得到N 个词的向量后,将这些向量相加并取均值,得到该段文本的向量表示,最后输入到线形分类器中,得到最终的分类。从模型结构上来看,模型结构也是相当简单,只是是逻辑回归LR模型的基础上增加了句子向量的计算。对于分类问题,其损失函数为:
其中,c 表示的是类别,\sigma 为激活函数,通常采用sigmoid函数。
为了简化问题,假设隐含层的为x ,那么对于x ,其属于第i 个类别的概率为:
如果类别较多时,上述公式的分母的计算会严重降低算法的速度,借鉴word2vec中的经验,使用层次softmax可以加速计算,带有层次softmax加速的fastText结构可以表示为:
如上图,最下面是一个Huffman树,每个叶子节点代表一个类别,这样可以对每一个叶子节点编号。同时,假设一个Huffman树有V 个叶子节点,那么该树有V-1 个非叶子节点,将上述的Huffman树抽象出来,如下图所示:
对于特征x 该如何计算类别,如上图中,对于每一个叶子节点,都有对应的编码,如叶子节点c_1 的编码为:0000,叶子节点c_7 的编码为:11。对于Huffman树的构建过程非本文的重点,不在本文中重复。在模型参数初始化过程中,需要同时初始化非叶子节点的向量表示,如图中的a_1,a_2,\cdots ,a_6 ,假设对于特征x ,其所属的类别为c_3 ,因此找到c_3 的编码和路径,我们发现需要经过的非叶子节点为:a_1,a_2,a_4 ,其对应的编码为:001,因此计算过程为:
同样,每一个非叶子节点的向量也参与模型的训练。在预测过程中,直接可以计算出属于每一个叶子节点的概率。
更多内容请访问:www.felixzhao.cn
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有