本篇论文发表于2017年,由Facebook团队发表在EACL上,在阅读本篇论文之前,需要对文本分类的基本任务有一定的了解。同时需要掌握近些年经典的文本分类相关入门技术(例如:one-hot、tf-idf、Word2Vec等)。
一句话总结:输入的是文档,每一个文档有对应的类别Ci(i ∈ 1~n),输出测试集中的每一篇文档的预测类别c ∈ C.
one - hot vectors 在处理文本时首先将文本中的词语形成一个不重复的词库,one-hot的维度由词库的大小决定,有多少词语,矩阵就要扩大到多少维,对于庞大的语料库来说,计算量和存储量都是很大的问题,这是 one-hot的第一个缺点—维度灾难;第二个缺点是无法度量词语之间的相似性。
基于文本的不同特征(语言特征、位置特征、词性标签……)对文本进行分类
缺点: 基于人为手工;缺失对上下文语境的信息;特征稀疏;在任务之间的特征表征不可迁移。
缺点:虽然在性能上表现较好,但是在训练和测试时需要花费巨大的资源和时间。
本文描述了一种简单高效的基准文本分类。实验显示,快速文本分类器 fastText 通常是可以在训练的准确性上和深度学习分类器看齐,同时训练和分类速度是要快很多数量级。可以在十分钟以内使用标准的多核CPU训练上超过 10 亿字,还可以在不到一分钟的时间,对50万句子,进行多达31万总类别的分类。
首段主要描述了基于神经网络的模型在文本分类任务中虽然能够获得较好的性能,但是在训练和测试时,需要花费巨大的资源和时间,这就导致了无法在超大数据集上进行应用。
第二段引出线性分类器,也称强基线分类器,虽然线性分类器构造简单,但是若能够构造正确的特征,通常能够取得良好的效果。
第三段作者指出这篇工作的目标,在基于上下文信息的文本分类任务中,如何拓展基线算法(线性分类器)去应对大规模语料库和高纬度的输出空间。同时有效词表征学习算法给了作者启发。带有秩约束和损失快速估计的线性模型可以在十分钟内训练十亿的单词,在这篇工作中,作者从标签预测和情感分析两个不同的任务进行了模型的效果分析。
传统的线性分类器无法在特征与分类之间共享参数,这会限制高维输出分类空间上下文的泛化,在很高维度的输出分类中的某些类可能只有很少的训练样本。对于这个问题的解决方法一般是:对线性分类器进行因式分解转为低秩矩阵,或者使用多层神经网络。
上图展示了简单的带秩约束的线性模型,第一个权重矩阵A是基于单词的查找表,这样可以把单词平均转换到文本形式,这样就可以输入线性分类器。文本表征是可以共享的隐变量,这种模型架构类似于CBOW模型,采用标签取代之间的单词,使用softmax函数来计算已知分类的概率分布,对于N个文档而言,这会导致在分类上负对数似然的最小化。
其中,Xn 是第n个文档的归一化特征袋,Yn是对应的特征标签,A 和 B 权重矩阵。这个模型在多个 CPU中,使用随机梯度下降法和线性衰减的学习速率,以异步方式训练。
当分类数量庞大的时候,线性分类器的计算代价十分昂贵。更确切地说,其计算复杂度是 O(kh) ,k是分类数,h 文本表征的维度数。为了减少运行时间,使用基于哈夫曼编码树 的分层 softmax。在训练中,计算复杂度降到 O (h log2 (k))。
分层Softmax在测试分类的时候也能很快搜索相似分类。因为每个节点和从根到该节点的路径的概率在概率上关联。如果该节点是在深度 l+1 与父母 n1,…,nl关联,那么其概率是
这意味着一个节点的概率总是低于它的某一个父节点。深度优先搜索树和在树叶间跟踪最大概率允许裁剪小概率分支。在实践中,观察到测试分类的时候,计算复杂度降低到 O (h log2 (k)) 。这种方法进一步在使用二叉堆的时候,将复杂度进一步降低到 O(log(T)),T是堆顶目标数。
词袋对词序是固定不变的,但是明确地计算这种词序往往是非常复杂。相反,使用 N-gram词袋作为附加特征来留存一些相近词序的部分信息。这种做法能够和显式使用词序的方法得到非常有效和相似的效果。
使用哈希算法来维持一个高效的内存N-gram映射,同样的哈希函数也出现在 Mikolov 等人算法。这么做可以把1亿特征的映射成1千万的二元映射。
作者将FastText分类器与现有文本分类的情感分析算法进行比较,通过一个超大标签预测数据集来评估其高维输出空间的应用能力。通过实验发现,作者模型的执行速度至少是原生实现的2~5倍。
数据集和基线: 采用相同的8个数据集和评估办法,对于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%。最后,下表 显示了各类参与比较的算法的结果,这些结论描述在唐等人 (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倍的速度提升。
数据集和基线: 为了测试我们的方法的可扩展性,我们进一步评价标签预测算法。这一测试是在 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 × 加速)。下表显示了一些定性的示例。
在这项工作中,作者提出了一种文本分类的简单基准方法,与无监督的从Word2Vec词向量不同,作者提出方法可以将好句子的特征向量进行平均。
在几项任务中,fasttext获得了相比于近期基于深度学习的方法更好的性能,并且训练速度更快。尽管在理论上深度神经网络比浅层模型具有更高的表示能力,目前还不清楚简单的文本分类问题,例如情感分析是否是正确的评估方法之一。作者将会将代码开源,以以便研究社区可以轻松地在作者的工作之上进行构建。