1. 学习任务
????《 Bag of Tricks for Efficient Text Classification 》
《FastText: 对于高效率文本分类的一揽子技巧》Armand Joulin 等 ?单位:Facebook ? 会议:EACL 2017
?? 开源项目网页 fasttext.cc
1.1 论文结构
1.2 学习目标
? 文章 摘要 部分
- 本文为文本分类任务提出了一种简单并且高效的基准模型——FastText。
- FastText模型在精度上和基于深度学习的分类器平分秋色,但是在训练和测试 速度 上 FastText 快上几个数量级。
- 我们使用标准的多核CPU在10亿词的数据集上训练 FastText,用时少于10分钟,并且在一分钟内分类好具有312K类别的50万个句子。
? 文章 Introduction 部分
- 文本分类是自然语言处理的重要任务,可以用于信息检索、网页搜索、文档分类等。
- 基于深度学习的方法可以达到非常好的效果,但是速度很慢,限制了文本分类的应用。
- 基于机器学习的线性分类器效果也很好,有用于大规模分类任务的潜力。
- 从现在词向量学习中得到的灵感,我们提出了一种新的文本分类方法FastText,这种方法能够快速的训练和测试并且达到和最优结果相似的效果。
1.3 背景知识
1.3.1 基于深度学习文本分类模型优缺点
? 如:基于卷积神经网络的文本分类模型 TextCNN 和 字符级别卷积神经网络的文本分类模型 CharTextCNN 。
优点:
- 效果好,一般能达到了目前最好的分类效果。
- 不用做特征工程,模型简洁。
缺点:
1.3.2 基于机器学习文本分类模型优缺点
? 如:TF-IDF
优点:
- 一般速度都很快,TF-IDF 就相当于特征工程,模型都是线性分类器,所以比较简单。
- 效果还可以,在某些任务上也能取得最好的效果。
缺点:
1.3.3 FastText 动机:
? 结合深度学习的文本分类模型和机器学习的文本分类模型的优点,达到 速度快、效果好、自动特征工程。
1.4 研究成果及意义
- FastText 在多个任务上表现很好。(下图中8个数据集)
- FastText 在效果很好的同时,速度非常快。单个
epoch 的训练时间(char-CNN 、VDCNN 和 fastText ):
1.4.1 FastText 历史意义
- 提出了一种新的文本分类方法——FastText,能够进行快速的文本分类,并且效果很好。
- 提出了一种新的使用 子词 (词的前缀、后缀等)的词向量训练方法——FastText,能够一定程度上解决
OOV 问题。 - 将FastText 开源,使得工业界和学术界能够快速使用 FastText。
2. FastText 模型
? FastText 的网络结构与 word2vec 的 CBOW 非常相似。CBOW介绍 - 链接
联系:
- 都是
Log-linear 模型,在最后一层加上softmax ,实现权重到概率的非线性变换,模型非常简单。 - 都是对输入的 词向量 做平均,然后进行预测。
- 模型结构完全一样。
区别:
FastText 提取的是句子特征,CBOW 提取的是上下文特征。FastText 需要标注语料,将每个句子标注成一个句子,是监督学习;CBOW 不需要标注语料,是无监督学习。
目前的 FastText 存在的问题
? 问题:
- 当类别非常多的时候,最后的
softmax 速度依旧非常慢。 - 使用的是 词袋模型,没有词序信息。
? 解决方法:
- 对问题1,类似于
word2vec ,使用 层次softmax。 - 对问题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 应用
- 文本特别多,对分类速度要求很高的场合。
- 作为一个基准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()
embeding_size , 控制你的词向量矩阵大小,词向量矩阵在 GPU 里面batch_size ,batch_size 代表一次往 GPU 里面装入多少条数据max_length ,max_length 也决定了你输入的大小min_count , 显存小,可以将min_count 调大,过滤更多的词n_gram ,显存小,将 n_gram 调大
参考链接- 深度之眼 - NLP baseline 参考链接- FastText 项目地址 参考链接- huaxiaozhuan-word representation_5 FastText
|