论文阅读:《Bag of Tricks for Efficient Text Classification》

2018-04-25 11:22:29 卓寿杰_SoulJoy 阅读数 954更多

 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

https://blog.csdn.net/u011239443/article/details/80076720 
论文地址:https://arxiv.org/pdf/1607.01759v2.pdf

摘要

本文提出了一种简单而有效的文本分类和表示学习方法。 我们的实验表明,我们的快速文本分类器fastText在准确性方面通常与深度学习分类器保持一致,并且在训练和评估中速度快很多。 我们可以在不到10分钟的时间内使用标准的多核CPU对超过10亿个单词进行快速文本训练,并在不到一分钟的时间内对312K类中的50万个句子进行分类。

介绍

建立良好的文本分类表示是许多应用程序的重要任务,如Web搜索,信息检索,排序和文档分类。 最近,基于神经网络的模型在计算句子表示方面越来越受欢迎。 虽然这些模型在实践中取得了非常好的表现,但是在训练和测试时间,它们往往相对较慢,限制了它们在非常大的数据集上的使用。

与此同时,简单的线性模型也显示出令人印象深刻的性能,同时计算效率非常高。 他们通常学习单词级别的表示,后来组合起来形成句子表示。 在这项工作中,我们提出了这些模型的扩展,以直接学习句子表示。 我们通过引入其他统计数据(如使用n-gram包)来显示,我们减少了线性和深度模型之间精度的差距,同时速度提高了许多个数量级。

我们的工作与标准线性文本分类器密切相关。 与Wang和Manning类似,我们的动机是探索由用于学习无监督词表示的模型启发的简单基线。 与Le和Mikolov不同的是,我们的方法在测试时不需要复杂的推理,使得其学习表示很容易在不同问题上重复使用。 我们在两个不同的任务中评估模型的质量,即标签预测和情感分析。

模型架构

句子分类的简单而有效的基线是将句子表示为词袋(BoW)并训练线性分类器,例如逻辑回归或支持向量机。 但是,线性分类器不能在特征和类之间共享参数,可能会限制泛化。 这个问题的常见解决方案是将线性分类器分解成低秩矩阵或使用多层神经网络。在神经网络的情况下,信息通过隐藏层共享。

图1显示了一个带有1个隐藏层的简单模型。 第一个权重矩阵可以看作是一个句子单词的查找表。 词表示被平均为文本表示,然后反馈给线性分类器。 这种结构类似于Mikolov等人的cbow模型,其中中间的单词被标签取代。 该模型将一系列单词作为输入,并在预定义的类上生成概率分布。 我们使用softmax函数来计算这些概率。

训练这样的模型本质上与word2vec相似,也就是说,我们使用随机梯度下降和反向传播以及线性衰减的学习速率。 我们的模型在多个CPU上异步训练。

分层softmax

当目标数量很大时,计算线性分类器的计算量很大。 更准确地说,计算复杂度为O(Kd)O(Kd),其中K是目标的数量,d是隐藏层的维数。 为了改善我们的运行时间,我们使用基于霍夫曼编码树的分层softmax。 在训练期间,计算复杂度降至O(dlog2(K))O(dlog2(K))。 在这棵树上,目标是树叶。

当搜索最可能的类别时,分层softmax在测试时间也是有利的。 每个节点都与从根节点到该节点的路径概率相关联。 如果节点与父节点n1,…,nl处于深度l + 1,则其概率为

这意味着节点的概率总是低于其父节点的概率。 通过深度遍历探索树并跟踪叶子之间的最大概率允许我们丢弃与较小概率相关的任何分支。 在实践中,我们观察到在测试时O(dlog2(K))O(dlog2(K))的复杂度降低。 这种方法进一步扩展到以O(log(T))O(log(T))为代价,使用二进制堆计算T-top目标。

N-gram特征

单词包对于词序是不变的,但考虑到这个顺序通常在计算上非常昂贵。 相反,我们使用一袋n-gram作为附加功能来捕获有关本地词序的部分信息。 这在实践中非常高效,同时实现了与明确使用订单的方法类似的结果。

如果我们只使用bigrams,则使用与Mikolov和10M bin相同的哈希函数,否则我们使用哈希函数保持n-gram的快速和高效内存映射。

实验

情绪分析

数据集和基线 我们使用Zhang等人的相同的8个数据集和评估协议。我们报告Zhang等人的N-gram和TFI-DF基线以及Zhang和LeCun的字符级卷积模型(char-CNN)和 Conneau等人的非常深的卷积网络(VDCNN)。我们还与Tang等人的评估协议进行了比较。 我们报告他们的主要基线以及基于递归网络(Conv-GRNN和LSTM-GRNN)的两种方法。

结果 我们在图1中给出了结果。我们使用10个隐藏单元并运行5个纪元的fastText,并在{0.05,0.1,0.25,0.5}的验证集上选择了一个学习率。 在这项任务中,添加bigram信息将使性能提高1 - 4%。 总体而言,我们的准确度略好于char-CNN,稍差于VDCNN。 请注意,我们可以通过使用更多的n-gram来稍微提高精度,例如,搜狗的性能上升到97.1%。 最后,图3(文中找不到图3 = =,说的应该是表1吧)表明我们的方法与Tang等人提出的方法相比是有竞争力的。

表1:情绪数据集的测试准确度[%]。 所有数据集都使用相同的参数运行FastText。 它有10个隐藏的单位,我们评估它有没有bigrams。 对于VDCNN和char-CNN,我们显示没有数据增加的最佳报告数字。

表3:与Tang等人的比较。在验证集上选择超参数。

我们调整验证集上的超参数,并观察使用多达5个导联的n-grams 达到最佳性能。 与Tang等人不同,fastText不使用预先训练的词嵌入,这可以解释1%的差异。

训练时间 char-CNN和VDCNN都使用NVIDIA Tesla K40 GPU进行培训,而我们的模型则使用20个线程在CPU上进行培训。 表2显示使用卷积的方法比fastText慢几个数量级。 

表2:与char-CNN和VDCNN相比,情绪分析数据集的训练时间。 我们报告整个培训时间,除了char-CNN,我们报告每个时间。

请注意,对于char-CNN,我们报告每个时期的时间,同时报告其他方法的整体训练时间。 虽然使用更新的CUDA实现的卷积可以使char-CNN的速度提高10倍,但fastText只需不到一分钟的时间就可以训练这些数据集。 与基于CNN的方法相比,我们的加速比随着数据集的大小而增加,至少达到15,000倍的加速。

标签预测

数据集和基线为了测试我们方法的可伸缩性,对YFCC100M数据集进行了进一步评估,该数据集由几乎100M的带有字幕,标题和标签的图像组成。我们专注于根据标题和标题预测标签(我们不使用图像)。我们删除少于100次的字词和标签,并将数据分成训练,验证和测试集。该训练集包含91,188,648个样本。验证有930,497个样本和测试集543,424个样本。词汇大小为297,141,并且有312,116个标签。我们将发布一个脚本来重新创建这个数据集,以便我们的数据可以被复制。

我们考虑预测最频繁标签的基于频率的基线。我们还将它与标签预测模型Tagspace进行了比较,标签预测模型与我们的标签预测模型相似,但基于Weston等人的Wsabie模型。虽然使用卷积描述了标签空间模型,但我们认为线性版本具有可比较的性能,更快。

结果和训练时间 表5给出了fastText和基线的比较。 

表5:YFCC100M上用于标记预测的测试集上的Prec @ 1。 我们还会报告训练时间和测试时间。 测试时间是单线程的报告,而两种模式的训练使用20个线程。

我们运行5个周期的fastText,并将它与Tagspace的两种尺寸的隐藏层(即50和200)进行比较。两种模型都实现了与隐藏层相似的性能,但增加了巨大值使我们在精度上有了显着提升。 在测试时间,Tagspace需要计算所有类别的分数,这使得它相对较慢,而当类别数量很多(此处超过300K)时,我们的快速推理会显着提高速度。 总体而言,获得质量更好的模型的速度要快一个数量级。 测试阶段的加速更加重要(600倍加速)。

表4显示了一些定性的例子。 

表4:使用具有200个隐藏单元和两个bigrams的fastText获取的YFCC100M数据集验证集的示例。 我们展示了一些正确和不正确的标签预测。

FastText学习将标题中的单词与他们的主题标签相关联,例如“christmas”与“#christmas”。 它还捕捉单词之间的简单关系,如“snowfall”和“#snow”。 最后,使用bigrams还可以捕捉诸如“twin cities”和“#minneapolis”之类的关系。

讨论和结论

在这项工作中,我们开发了fastText,它扩展了word2vec来处理句子和文档分类。 与来自word2vec的无监督训练的单词向量不同,我们的单词特征可以平均在一起形成好的句子表示。 在几项任务中,我们获得的性能与最近提出的深度学习方法相媲美,同时观察到了大幅度的加速。 尽管深层神经网络在理论上比浅层模型具有更高的表征能力,但是如何分析简单的文本分类问题(如情感分析)是否正确评估它们并不明确。 我们将发布我们的代码,以便研究团体可以轻松构建我们的工作。

FastText词向量与word2vec对比

FastText= word2vec中 cbow + h-softmax的灵活使用 
灵活体现在两个方面: 
1. 模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是 分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用; 
2. 模型的输入层:word2vec的输出层,是 context window 内的term;而fasttext 对应的整个sentence的内容,包括term,也包括 n-gram的内容;

两者本质的不同,体现在h-softmax的使用: 
Wordvec的目的是得到词向量,embedding层 到 input层的 共享权重矩阵 就是 词向量矩阵,输出层对应的 h-softmax 也会生成一系列的向量,但最终都被抛弃,不会使用。 
fasttext则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

论文阅读:《Bag of Tricks for Efficient Text Classification》的更多相关文章

  1. 《Deep Learning of Graph Matching》论文阅读

    1. 论文概述 论文首次将深度学习同图匹配(Graph matching)结合,设计了end-to-end网络去学习图匹配过程. 1.1 网络学习的目标(输出) 是两个图(Graph)之间的相似度矩阵 ...

  2. Deep Learning of Graph Matching 阅读笔记

    Deep Learning of Graph Matching 阅读笔记 CVPR2018的一篇文章,主要提出了一种利用深度神经网络实现端到端图匹配(Graph Matching)的方法. 该篇文章理 ...

  3. Deep Reinforcement Learning for Dialogue Generation 论文阅读

    本文来自李纪为博士的论文 Deep Reinforcement Learning for Dialogue Generation. 1,概述 当前在闲聊机器人中的主要技术框架都是seq2seq模型.但 ...

  4. Deep Learning 33:读论文“Densely Connected Convolutional Networks”-------DenseNet 简单理解

    一.读前说明 1.论文"Densely Connected Convolutional Networks"是现在为止效果最好的CNN架构,比Resnet还好,有必要学习一下它为什么 ...

  5. Deep Learning 26:读论文“Maxout Networks”——ICML 2013

    论文Maxout Networks实际上非常简单,只是发现一种新的激活函数(叫maxout)而已,跟relu有点类似,relu使用的max(x,0)是对每个通道的特征图的每一个单元执行的与0比较最大化 ...

  6. Discriminative Learning of Deep Convolutional Feature Point Descriptors 论文阅读笔记

    介绍 该文提出一种基于深度学习的特征描述方法,并且对尺度变化.图像旋转.透射变换.非刚性变形.光照变化等具有很好的鲁棒性.该算法的整体思想并不复杂,使用孪生网络从图块中提取特征信息(得到一个128维的 ...

  7. Sequence to Sequence Learning with Neural Networks论文阅读

    论文下载 作者(三位Google大佬)一开始提出DNN的缺点,DNN不能用于将序列映射到序列.此论文以机器翻译为例,核心模型是长短期记忆神经网络(LSTM),首先通过一个多层的LSTM将输入的语言序列 ...

  8. Deep Learning 24:读论文“Batch-normalized Maxout Network in Network”——mnist错误率为0.24%

    读本篇论文“Batch-normalized Maxout Network in Network”的原因在它的mnist错误率为0.24%,世界排名第4.并且代码是用matlab写的,本人还没装caf ...

  9. Deep Learning 25:读论文“Network in Network”——ICLR 2014

    论文Network in network (ICLR 2014)是对传统CNN的改进,传统的CNN就交替的卷积层和池化层的叠加,其中卷积层就是把上一层的输出与卷积核(即滤波器)卷积,是线性变换,然后再 ...

  10. Deep Learning 28:读论文“Multi Column Deep Neural Network for Traffic Sign Classification”-------MCDNN 简单理解

    读这篇论文“ Multi Column Deep Neural Network for Traffic Sign Classification”是为了更加理解,论文“Multi-column Deep ...

随机推荐

  1. NOI2019 游记——一切都是最好的安排

    有幸运有遗憾 一切都是最好的安排. Day-3 临近NOI了,机房都在狂奶某某同学进队稳了 HE省队垫底,THUSC面试都没进 作为一个有自知之明的人 也就指望着能拼进前100,至少也拿个银牌. 心态 ...

  2. MapReduce Combiner

    Combiner编程(可选步骤,视情况而定!) combiner最基本是实现本地key的归并,combiner具有类似本地的reduce功能. 如果不用combiner,那么所有的结果都是reduce ...

  3. flask的post,get请求及获取不同格式的参数

    flask的post,get请求及获取不同格式的参数 1 获取不同格式参数 1.0 获取json参数 Demo from flask import Flask, request, jsonify ap ...

  4. MyEclipse环境的项目改为在Eclipse中运行爬坑记【我】

      新检出一个web项目,同事都是运行在MyEclipse中的,我用Eclipse启动, 1.首先是许多jar包报错: 处理方法为 remove掉,然后 选 WEB-INF 下的所有 jar 重新添加 ...

  5. 22 Flutter仿京东商城项目 inappbrowser 加载商品详情、保持页面状态、以及实现属性筛选业务逻辑

    加群452892873 下载对应21可文件,运行方法,建好项目,直接替换lib目录,在往pubspec.yaml添加上一下扩展. cupertino_icons: ^0.1.2 flutter_swi ...

  6. 为TMenuItem增加指针Data属性

    Delphi的有些组件中都包含.Data属性,比如TTreeNode,.Data属性可以认为是一个指针,可以指向任何类或者结构,方便后续操作. 但是TMenuItem没有.Data属性,下面介绍最简单 ...

  7. Django setting 常用配置

    setting.py           这个文件包含了所有有关这个Django项目的配置信息,均大写:   TEMPLATE_DIRS , DATABASE_NAME , 等. 最重要的设置是 RO ...

  8. elasticsearch启动日志报错not enough master nodes discovered during pinging (found [[]], but needed [-1]), pinging again

    排查步骤 逻辑上讲是,一个节点去ping  master节点,结果却没有得到回应,多次重试依旧失败.应该重点观察: 1.master启动后,IP是否可以有防火墙权限,设置防火墙规则或则直接关闭防火墙 ...

  9. 推荐一个好用的免费开源的笔记本软件CherryTree

    我是一个好奇心很强的人,对未知的事物总有一种想要追根究底的冲动.多年以来,我学了很多东西,也学的很杂,积累了很多领域的知识.但不得不承认,人的记忆力很有限,学的越多忘的就越多.很久以前我就在想,怎么样 ...

  10. windows下libnet ARP

    查找自己的网卡: #include <libnet.h> #include <stdio.h> #include <iostream> #pragma commen ...