0
点赞
收藏
分享

微信扫一扫

fasttext论文笔记

Star英 2022-01-10 阅读 147

fastText

Fasttext是一个专门用于文本分类和文本表示的模型,由于它模型结构非常的简单,训练效率很高,分类效果也非常好,因此是一个非常热门的模型。

Background

这是一篇2017年的文章,所以作者首先提到了当时神经网络已经在NLP领域流行了,但是神经网络训练起来太慢,因此很难使用庞大的数据集。接着作者提到文本分类中的一个非常实用的baseline就是线性分类器。举例来说,用Bag-of-Words + LR / SVM 训练一个线性模型往往已经能得到一个不错的效果,同时训练速度是非常快的。但是线性模型有一个缺点就是不能参数共享,因此泛化能力受到了限制。解决这一问题的两种方案是:使用低秩矩阵或使用多层神经网络。

本文作者提出了一个线性模型,该模型速度非常快,同时能够在文本分类和情感分析任务上达到SOTA。他们把这个模型叫做fastText

Model Architecture

fasttext模型的结构十分简单,Embedding之后就只有一个线性层得到结果,非常像CBOW模型,只不过CBOW是用上下文预测中心词,而fasttext是用句子表示预测标签。

在这里插入图片描述

首先我们得到每一个单词的词向量表示,然后取平均作为整个句子的向量化表示。将句向量输入线性分类器得到输出,用softmax将模型输出结果转化为各类别的概率分布,然后用CrossEntropy作为损失函数。
− 1 N ∑ n = 1 N y n l o g ( f ( B A x n ) ) -\frac{1}{N}\sum_{n=1}^{N}y_nlog(f(BAx_n)) N1n=1Nynlog(f(BAxn))
为了使模型效果更好,作者加入了两个trick

Hierarchical Softmax

这篇文章的作者之一就是Word2vec的作者***Mikolov***,因此fasttext也借鉴了SkipGram中的Hierarchical Softmax。朴素的softmax计算方法时间复杂度是 O ( k h ) O(kh) O(kh) k k k是类别数量, h h h是文本向量的维度。而使用基于Huffman coding tree的Hierarchical Softmax能将复杂度降到 O ( h l o g 2 k ) O(hlog_2{k}) O(hlog2k),这对于类别数量很多的情况帮助很大。

n-gram feature

Bag-of-word会忽视单词的顺序,对效果有影响,因此作者提出加入n-gram特征来学习到局部单词的顺序关系。但是一旦加入n-gram特征,就会导致极大的内存开销。举例来说,假设unigram有2万个,那么bi-gram就有4万个,tri-gram就有8万个,加起来有将近15万,语料库太大。因此作者又使用了一种hashing trick来节省内存开销。具体做法是,unigram该怎么存怎么存,bi-gram及以上用取模的方式在剩下的位置进行存储

Experiment

在这里插入图片描述

在这里插入图片描述

Table 2也可以看出fastText的训练效率是非常高的

同样,对于标签预测任务,fastText也表现优异

在这里插入图片描述

在这里插入图片描述

Reflection

这篇文章主要提出了一个非常轻量化的文本分类模型并达到了SOTA的效果。对于这篇文章,我的反思感悟如下:

  1. 文章中的加入n-gram特征来学习局部单词顺序值得参考借鉴
  2. 在词向量取平均的部分是否可以加以改进?比如使用加权平均来突出部分单词对整个句子结果的重要性。
  3. Hierarchical softmax是一个常用的提升模型速度的手段
  4. 如此简单的模型结构就能取得这么好的分类效果,证明模型不是越复杂越好,轻量化是一个值得研究的方向。
举报

相关推荐

0 条评论