这篇论文挂在arxiv上已经一年了,第一版并没有引起我太多的注意,因为那个时候fastText看上去更像是一个实验室的helloWorld,直到最近我被一遍又一遍刷屏的CNN文本分类弄得有点烦躁,所以想用这篇脸书的软文来平衡一下,同时也让我自己思考,深水区的文本分类怎么做。
本文探讨了一种简单高效的基线文本分类。我们的实验显示,我们的快速文本分类器 fastText 通常是可以在训练的准确性上和深度学习分类器看齐,同时训练和分类速度是要快很多数量级。我们可以在十分钟以内使用标准的多核CPU训练上超过 10 亿字,还可以在不到一分钟的时间,对50万句子,进行多达31万总类别的分类。
1. 介绍
文本分类在自然语言处理的许多应用,例如 web 搜索、 信息检索、 排序和文档分类 (迪尔韦斯特 et al.,1990 年;彭和李,2008年)中发挥重要作用。近年来,基于神经网络的模型已经成为越来越受欢迎 (Kim,2014;张和 LeCun,2015;Conneau et al.,2016年)。尽管这些模型实现很好的性能,在实践中,训练和测试的速度往往是不尽人意,这就极大限制他们在超大数据集上的应用。同时,在文本分类问题里,线性分类器常常被视为强基线分类器 (Joachims,1998 年;麦卡勒姆和噶,1998 年;风扇 et al.,2008年)。虽然它们构造简单,如果能够构造正确的特征,往往能够取得很好的效果 (王和曼宁,2012年)。所以,这些算法也是有可能应用到超大语料库 (Agarwal et al.,2014年)。
在本文描述的工作中,我们探讨了在基于上下文的文本分类问题中,如何扩展这些基线算法去应对大规模语料库与高纬度的输出空间。这些工作的灵感来源于这个有效词表征学习算法 (Mikolov et al.,2013;开徵 et al,2015年),我们发现,带有秩约束和损失快速估计的线性模型可以在十分钟内训练10亿单词。在这篇文中,我们对两个不同的任务,标签预测和情感分析进行了质量评价。
2. 模型架构
本文描述的简单高效句子分类器是使用词袋(BoW)表征句子,然后使用一个线性分类器对词袋表征的句子进行训练。这个线性训练器可以是,逻辑回归或支持向量机 (Joachims,1998 年;风扇 et al.,2008年)。然而,传统的线性分类器在特征和分类之间不共享参数,这可能限制高维输出分类空间上下文的泛化,在很高纬度的输出分类中的某些类可能只有很少的训练样本。通常对这一问题的解决办法是为线性分类器因式分解进低秩矩阵 (Schutze,1992 年;Mikolov et al.,2013年) 或使用多层神经网络 (Collobert 和韦斯顿,2008 年;张 et al.,2015年)。图 1 显示了一个简单的带秩约束的线性模型。第一个权重矩阵 A 是基于单词的查找表,这样可以把单词平均转换到文本形式,这样就可以输入线性分类器。
文本表征是可以重用的隐变量。这种模型架构类似于Mikolov 等人提出的CBOW模型 (2013 年),也就是用标签取代之间的单词。我们使用 softmax 函数 f 来计算已知分类的概率分布。对于 N 个文档而言,这就会导致在分类上负对数似然的最小化,公式如下图:
其中,Xn 是第n个文档的归一化特征袋,Yn是对应的特征标签,A 和 B 权重矩阵。这个模型在多个 CPU中,使用随机梯度下降法和线性衰减的学习速率,以异步方式训练。
2.1 分层Softmax
当分类数量庞大的时候,线性分类器的计算代价十分昂贵。更确切地说,其计算复杂度是 O(kh) ,k是分类数,h 文本表征的维度数。为了提高我们的运行时间,我们使用基于哈夫曼编码树 (Mikolov et al.,2013年) 的分层 softmax (古德曼,2001年)。在训练中,计算复杂度降到 O (h log2 (k))。
分层Softmax在测试分类的时候也能很快搜索相似分类。因为每个节点和从根到该节点的路径的概率在概率上关联。如果该节点是在深度 l 1 与父母 n1,...,nl关联,那么其概率是
这意味着一个节点的概率总是低于它的某一个父节点。深度优先搜索树和在树叶间跟踪最大概率允许我们裁剪小概率分支。在实践中,我们观察到测试分类的时候,计算复杂度降低到 O (h log2 (k)) 。这种方法进一步在使用二叉堆的时候,将复杂度进一步降低到 O(log(T)),T是堆顶目标数。
2.2 N-gram 特征
词袋对词序是固定不变的,但是明确地计算这种词序往往是非常复杂。相反,我们使用 N-gram袋作为附加特征来留存一些相近词序的部分信息。这种做法能够和显式使用词序 (王和曼宁,2012年) 的方法得到非常有效和相似的效果。
我们使用哈希算法 (温伯格 et al.2009年) 来维持一个高效的内存N-gram映射,同样的哈希函数也出现在 Mikolov 等人 (2011 年)算法。这么做,我们可以把1亿特征的映射成1千万的二元映射。
3. 实验过程
我们使用 fastText 对两个不同的任务进行了评估。首先,我们将它和现有文本分类的情感分析算法进行比较,然后,我们通过一个超大标签预测数据集来评估其高维输出空间应用能力。请注意,我们的模型可以与 Vowpal Wabbit库一起工作,但我们的实践观察来看,我们的执行速度至少是原生实现2到5倍。
3.1 情感分析
数据集和基线。我们采用相同 的8个数据集和评估办法(张等 2015 年),对于N-gram和TF-IDF算法评估结果,直接采用张等人的研究 (2015 年)。字符级卷积模型 (char CNN)采用 张和 LeCun (2015 年)的结论,字符基于卷积递归网络 (char-CRNN)模型采用 (肖和 Cho,2016年)的研究结论,超深积网络 (VDCNN) 模型采用 Conneau 等人 (2016 年)的研究结论。
我们采纳了唐等人 (2015 年)的评估办法,我们也在报告中采用他们的基线,以及基于递归网络 (Conv GRNN 和 LSTM-grnn 神经网络) 的两种方法。
结论。在下图中显示的是我们的结果。我们使用 10 个隐藏的单位并运行 fastText 5遍,同时设置学习速率 {0.05、 0.1、 0.25、 0.5}。在此任务中,增加双向映射信息,可以提高性能 1-4%。总体而言,我们算法的精度优于 char CNN 和 char CRNN,稍差 VDCNN。请注意,我们可以通过使用更多的N-gram来提升精度,例如使用三元映射,这样做,在Sogou数据集上的性能高达 97.1%。最后,表 3 显示了各类参与比较的算法的结果,这些结论描述在唐等人 (2015 年)的研究。我们调整对验证集的超参,观察到使用 N-gram到五元的时候,可以达到最佳的性能。同时,不像唐等人 (2015 年)的研究,fastText 不使用预先训练的 词嵌入,这就是大家在精度上有 1%差异的原因。
训练时间。不管是Char CNN 还是 VDCNN,它们都是在NVIDIA Tesla K40 GPU上训练的。但是,我们的模型只是在一个20逻辑核的CPU 上运行。上面表 2 显示了使用卷积的方法是比 fastText 慢几个数量级。使用更新版本的CUDA可以对于char CNN提速十倍,fastText还是要快一分钟。GRNNs 方法的唐等人 (2015 年) 每一遍训练在单CPU单线程要花大约 12 小时,我们的算法可以达到15000倍的速度提升。
3.2 标签预测
数据集和基线。为了测试我们的方法的可扩展性,我们进一步评价标签预测算法。这一测试是在 YFCC100M 数据集 (Thomee et al.,2016年)上完成的。这是一个1亿幅具有标题、 标题和标签图像的数据集。我们专注于预测 (我们不使用图像数据) 标题和标题标签。我们删除出现频率低于100的。并且把数据分成训练、 验证和测试三类。训练集包含 91,188,648 个样本 (150亿个标记)。验证集包含930,497 个样本,测试集包含 543,424个样本。字典的大小是 297,141和312,116 的独特标记。我们将发布一个脚本用于重新创建此数据集,以便可以重现我们的运行结果。我们的算法精度达到了 1。
我们考虑一种基于频率的基线预测来检测高频标签。我们还比较了 Tagspace (韦斯顿等人,2014年)的研究,这是一种与我们类似的标签预测模型,但它是基于 Wsabie 模型的韦斯顿等人 (2011 年)的研究。虽然 Tagspace 模型描述了使用卷积,我们的线性版本能够以更快的运算速度达到差不多的性能。
结果和培训时间。表 5 给出了 fastText 和基线的比较。我们为 5 世纪运行 fastText 并把它比作 Tagspace 两种大小的隐藏层,即 50 和 200。这两种模型实现类似的性能与小隐藏图层,但添加这种组给我们的精度显著提高。在测试时,Tagspace 需要为所有的类使它相对较慢,而我们快速推理给明显提速,当班级数目较大时 (超过 300 K 这里) 计算分数。总体而言,我们在一个数量级以上更快地获得更好的质量模型。加速的测试阶段是更多拦蓄 (600 × 加速)。表 4 显示了一些定性的示例。
在这项工作,我们提出一种文本分类的简单的基准方法。与 unsupervisedly 训练的词向量从 word2vec,不同我们 word 功能可以将平均在一起到形式好句子的表述方式。在几项任务,fastText 获取与最近提出的方法启发通过深入学习,同时更快的性能。虽然深神经网络理论在多高的表达能力比浅模型,它是不清楚如果情绪分析简单的文本分类问题是正确的对它们进行评估。我们将发布我们的代码,以便研究社区可以轻松地构建在我们的工作。
感谢和参考文献没有列出,大家可以自己去看论文。