Bag of Tricks for Efficient Text Classification(FastText)

文章目录

    • 摘要
    • 介绍
    • FastText
      • 核心思想
      • 模型结构
      • Hierarchical softmax
      • N-gram features
    • 实验
      • 任务一 sentiment analysis
      • 任务二 tag prediction
    • 总结 fasttext词向量优势

摘要

本文提出了一种简单有效的文本分类和表示学习方法。

实验表明fasttext在准确性方面与深度学习分类器保持一致,并且训练和评估的速度大大提高。可以在不到10分钟的时间内使用标准的多核CPU对超过10亿个单词进行快速文本训练,并在不到一分钟的时间内对312K类中的50万个句子进行分类。

介绍

良好的文本分类表示是许多应用程序的重要任务,如Web搜索,信息检索,排序和文档分类。

基于神经网络的模型在计算句子表示方面有很好的表现,但是训练和测试时间长,限制了它们在非常大的数据集上的使用。线性分类器通常被认为是文本分类问题的强baseline,尽管它们很简单,简单的线性模型有很好的性能,和非常高的计算效率。他们通常学习单词级别的表示,再组合起来形成句子表示。

我们提出了这些模型的扩展,以直接学习句子表示。通过引入其他统计数据(如使用n-gram包)来显示,减少了线性和深度模型之间精度的差距,同时速度提高了许多个数量级。

FastText

核心思想

将整篇文档的词及n-gram向量叠加平均得到文档向量,然后使用文档向量做softmax多分类。这中间涉及到两个技巧:字符级n-gram特征的引入以及分层softmax分类

模型结构

与word2vec里的CBOW结构一样,只不过输出结果由预测词变成了预测类别Bag of Tricks for Efficient Text Classification(FastText)_第1张图片

模型的优化函数image-20210730091309699

Hierarchical softmax

霍夫曼树:权重高的叶子节点更靠近根节点,则高权重节点权重编码较短,低权重编码较长,保证树的带权路径最短。在信息论中,即为越常用的词编码越短。

为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。

在具体实现上,fasttext和word2vec类似,使用基于霍夫曼树的层级softmax,将计算复杂度从O(Kd)(K为类别数,d是隐层维度)下降为O(d log2(K)),叶子节点为最终的类别。

层级softmax在测试阶段寻找最有可能的那一类也很有优势,每一节点概率都和该节点到根节点目录上每一节点的概率相关,若某一节点的深度为L+1,他的父节点为n1,n2…nl,那么它的概率为:

image-20210730114521612

这意味着当前节点的概率总是比其父节点概率小,使用深度优先策略遍历树并寻找拥有最大概率的叶节点,可以允许我们丢弃那些拥有较小概率的分支,从而节省很多时间。

N-gram features

word2vec直接采用bag-of-word思想:构造一个由文档关键词组成的词典,对照词典用向量表示各个文档中关键词的出现次数。缺点

  1. 语义:仅仅将文档看成是一些关键词出现的概率的集合,不考虑词之间的上下文关系,只考虑词的权重。

  2. 稀疏问题:大部分文本只会使用词典的少部分词,导致词向量中会有大量的0。

    image-20210730091222791

词袋模型不考虑词序问题,若将词序信息添加进去又会造成过高的计算代价。文章取而代之使用bag of N-gram来将词序信息引入,并使用哈希算法高效的存储N-gram信息

N-gram features:构建词典时,将训练样本中所有不重复的词以及妹N个连续词构成的基本词放到袋子中,统计出现次数,对每个样本向量化。特点:

  1. 保留了更多原始序列结构,可以提供更多信息
  2. 相应的:词典更大导致稀疏,存储建模的成本会变高

这里与word2vec不同,fasttext在训练时附加Bag-of-N-gram-Feature来捕获词序的部分信息,使得训练效果更好(使用hashing trick保持N-gram的快速和内存有效映射)。这带来两点好处

  1. 对于低频词生成的词向量效果会更好,因为它们的N-gram可以和其他词共享
  2. 对于训练词库之外的单词,仍然可以构建它们的词向量,可以叠加它们的字符级N-gram向量

实验

任务一 sentiment analysis

参数设置:epoch=5 学习率{0.05, 0.1, 0.25, 0.5}

fasttext与其他神经网络相比,不需要加载预训练模型,而且在训练同时能生成词向量Bag of Tricks for Efficient Text Classification(FastText)_第2张图片

可以看出fasttext在数据量较大的数据集上实验结果很好,同时相比于其他模型,速度非常快

任务二 tag prediction

主要是为了测试方法的可扩展性,可以看出明显的速度提高

Bag of Tricks for Efficient Text Classification(FastText)_第3张图片

总结 fasttext词向量优势

  1. 适合大量数据+高效的训练速度:特别是与深度模型对比,fasttext能将训练时间由数天缩短到几秒钟,而且不需要GPU
  2. 支持多语言表达:利用其语言形态结构,fasttext能够被设计用来支持包括英语、德语、西班牙语、法语以及捷克语等多种语言。
  3. 使用了一种简单高效的纳入子字信息的方式,在用于像捷克语这样词态丰富的语言时,这种方式表现得非常好,这也证明了精心设计的字符 n-gram 特征是丰富词汇表征的重要来源。
  4. FastText的性能要比时下流行的word2vec工具明显好上不少,也比其他目前最先进的词态词汇表征要好。

fasttext能快速在海量文本数据上进行分类任务和表示学习,可以用一个普通的多线程cpu在十分钟内训练百万级的语料,一分钟将五十万文本分类到三十万个类别中。

近几年深度学习在nlp任务上虽取得了显著成就,但此类模型无论是训练还是测试阶段都因过长的时间消耗,很难应用在更大的语料数据上。与此同时一些简单的线性模型在保持速度效率的同时也有不俗的表现,如wrod2vec学习次级别的表示并进一步融合为语句表示。文章提出的方法就是在word2vec基础上加上bag of N-grams

fasttext文本分类的模型,相比于CBOW模型,不是预测中心词而是直接预测标签。

你可能感兴趣的:(Bag of Tricks for Efficient Text Classification(FastText))