FastText

1. 学习任务

    《 Bag of Tricks for Efficient Text Classification 》

《FastText: 对于高效率文本分类的一揽子技巧》Armand Joulin 等  单位:Facebook   会议:EACL 2017


   开源项目网页 fasttext.cc

1.1 论文结构

在这里插入图片描述

1.2 学习目标

在这里插入图片描述


文章 摘要 部分

  1. 本文为文本分类任务提出了一种简单并且高效的基准模型——FastText。
  2. FastText模型在精度上和基于深度学习的分类器平分秋色,但是在训练和测试 速度 上 FastText 快上几个数量级。
  3. 我们使用标准的多核CPU在10亿词的数据集上训练 FastText,用时少于10分钟,并且在一分钟内分类好具有312K类别的50万个句子。


文章 Introduction 部分

  1. 文本分类是自然语言处理的重要任务,可以用于信息检索、网页搜索、文档分类等。
  2. 基于深度学习的方法可以达到非常好的效果,但是速度很慢,限制了文本分类的应用。
  3. 基于机器学习的线性分类器效果也很好,有用于大规模分类任务的潜力。
  4. 从现在词向量学习中得到的灵感,我们提出了一种新的文本分类方法FastText,这种方法能够快速的训练和测试并且达到和最优结果相似的效果。

1.3 背景知识

1.3.1 基于深度学习文本分类模型优缺点

  如:基于卷积神经网络的文本分类模型 TextCNN 和 字符级别卷积神经网络的文本分类模型 CharTextCNN

优点:

  • 效果好,一般能达到了目前最好的分类效果。
  • 不用做特征工程,模型简洁。

缺点:

  • 速度太慢,无法在大规模的文本分类任务上使用。

1.3.2 基于机器学习文本分类模型优缺点

  如:TF-IDF

优点:

  • 一般速度都很快,TF-IDF 就相当于特征工程,模型都是线性分类器,所以比较简单。
  • 效果还可以,在某些任务上也能取得最好的效果。

缺点:

  • 需要做特征工程,分类效果依赖于有效特征的选取。

1.3.3 FastText 动机:

  结合深度学习的文本分类模型和机器学习的文本分类模型的优点,达到 速度快效果好自动特征工程

1.4 研究成果及意义

  1. FastText 在多个任务上表现很好。(下图中8个数据集)

    在这里插入图片描述
  2. FastText 在效果很好的同时,速度非常快。单个 epoch 的训练时间(char-CNNVDCNNfastText ):

在这里插入图片描述

1.4.1 FastText 历史意义

  • 提出了一种新的文本分类方法——FastText,能够进行快速的文本分类,并且效果很好。
  • 提出了一种新的使用 子词 (词的前缀、后缀等)的词向量训练方法——FastText,能够一定程度上解决OOV问题。
  • 将FastText 开源,使得工业界和学术界能够快速使用 FastText。

2. FastText 模型

在这里插入图片描述
FastText 的网络结构与 word2vecCBOW 非常相似。CBOW介绍 - 链接

联系

  1. 都是Log-linear模型,在最后一层加上softmax,实现权重到概率的非线性变换,模型非常简单。
  2. 都是对输入的 词向量 做平均,然后进行预测。
  3. 模型结构完全一样。

区别

  1. FastText提取的是句子特征,CBOW提取的是上下文特征。
  2. FastText需要标注语料,将每个句子标注成一个句子,是监督学习;CBOW不需要标注语料,是无监督学习。

目前的 FastText 存在的问题

问题:

  1. 当类别非常多的时候,最后的 softmax速度依旧非常慢。
  2. 使用的是 词袋模型,没有词序信息。

解决方法:

  1. 对问题1,类似于word2vec,使用 层次softmax
  2. 对问题2, 使用 n-gram 模型。

  文章中N-gram features中使用的 hashing trick (Weinberger et al., 2009) 方法举例,

1-gram   3万词
2-gram   10万词
3-gram   40万词


  假设词表大小是10万,前3万个仍是1-gram,一个词映射成一个向量;后面7万个分给 2-gram 和 3-gram, ( 10 + 40 ) % 7 = 7 (10+40) \%7=7 (10+40)%7=7 取余,进行了一个折中,[ 如果每个词对应一个向量,词表太大;如果多个词对应一个向量,不准确。] 这里 7 个词对应一个向量。

FastText 模型优缺点

优点: 1. 速度非常快,并且效果还可以。2. 有开源实现,可以快速上手使用。

缺点: 1. 模型结构简单,所以目前来说,不是最优的模型。2. 因为使用词袋思想,所以语义信息获取有限。

FastText 应用

  1. 文本特别多,对分类速度要求很高的场合。
  2. 作为一个基准baseline。

2.1 Subword 词向量

  Subword model 可参考文章 Enriching Word Vectors with Subword Information

2.3 Pytorch编程,显存不够大,调哪些参数?

import argparse

def ArgumentParser():
    parser = argparse.ArgumentParser()
    parser.add_argument('--embed_size', type=int, default=10, help="embedding size of word embedding")
    parser.add_argument("--epoch",type=int,default=200,help="epoch of training")
    parser.add_argument("--cuda",type=bool,default=True,help="whether use gpu")
    parser.add_argument("--gpu",type=int,default=1,help="whether use gpu")
    parser.add_argument("--label_num",type=int,default=4,help="the label number of samples")
    parser.add_argument("--learning_rate",type=float,default=0.02,help="learning rate during training")
    parser.add_argument("--batch_size",type=int,default=64,help="batch size during training")
    parser.add_argument("--seed",type=int,default=1,help="seed of random")
    parser.add_argument("--max_length",type=int,default=100,help="max length of sentence")
    parser.add_argument("--min_count",type=int,default=3,help="min_count of word")
    parser.add_argument("--n_gram",type=int,default=2,help="num gram of word")
    return parser.parse_args()  # pycharm中不加 args=[],jupyter 中加上
  1. embeding_size, 控制你的词向量矩阵大小,词向量矩阵在 GPU 里面
  2. batch_size,batch_size 代表一次往 GPU 里面装入多少条数据
  3. max_length,max_length 也决定了你输入的大小
  4. min_count, 显存小,可以将min_count 调大,过滤更多的词
  5. n_gram,显存小,将 n_gram 调大

参考链接- 深度之眼 - NLP baseline
参考链接- FastText 项目地址
参考链接- huaxiaozhuan-word representation_5 FastText

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值