NLP经典论文:FastText 笔记

NLP经典论文:FastText 笔记

论文

NLP论文笔记合集(持续更新)

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

介绍

2016-07发表的文章,特点就是快,精度还不错,使用了简单的模型结构,并使用n-gram 特征作为额外输入以表征词序信息,优化上用分层softmax减少了计算量,加速了训练。

模型结构

整体结构

NLP经典论文:FastText 笔记

; 整体流程

NLP经典论文:FastText 笔记

输入层

NLP经典论文:FastText 笔记

x 1 , x 2 , . . . , x N , x ∈ R h × 1 \boldsymbol{x}_1, \boldsymbol{x}_2, …, \boldsymbol{x}_N, \boldsymbol{x} \in R^{h\times 1}x 1 ​,x 2 ​,…,x N ​,x ∈R h ×1,为一个embedding vector,h h h为一个embedding vector的维度。

n-gram包含uni-gram、bi-gram、tri-gram等。假如文本划分最小的单位token是词,uni-gram就是一个词、bi-gram就是两个词连到一起组成一个bi-gram词、tri-gram就是三个词连到一起组成一个tri-gram词,这些统称为n-gram词。

lookup table W \boldsymbol{W}W中包含了n-gram词的embedding vector,W ∈ R h × V \boldsymbol{W} \in R^{h\times V}W ∈R h ×V,V V V为W \boldsymbol{W}W中embedding vector的个数,V 1 V_1 V 1 ​个对应uni-gram词,V 2 V_2 V 2 ​个对应bi-gram词,V 3 V_3 V 3 ​个对应tri-gram词,V m V_m V m ​个对应m-gram词…V = V 1 + . . . + V m V=V_1+…+V_m V =V 1 ​+…+V m ​。但V 2 ≠ V 1 2 , V 3 ≠ V 1 3 , . . . , V m ≠ V 1 m V_2 \neq V_1^2, V_3 \neq V_1^3, …,V_m \neq V_1^m V 2 ​​=V 1 2 ​,V 3 ​​=V 1 3 ​,…,V m ​​=V 1 m ​,因为这样会导致W \boldsymbol{W}W变得非常大,中文常用uni-gram词就有6w个。

使W \boldsymbol{W}W变得小的方法:

  1. 低频词舍弃
  2. 多个词n-gram词映射到同一个embedding vector

这样既可以保存词序信息,又不会使embedding空间变得太大。关于除uni-gram的n-gram词从one-hot空间映射到word embedding空间的过程中,f a s t T e x t fastText f a s t T e x t使用的是hashing function,保持了n-gram的快速和内存效率映射。

; 隐藏层

c = x 1 + x 2 + . . . + x N , c ∈ R h × 1 \boldsymbol{c}=\boldsymbol{x}_1+ \boldsymbol{x}_2+ …+\boldsymbol{x}_N, \boldsymbol{c} \in R^{h\times 1}c =x 1 ​+x 2 ​+…+x N ​,c ∈R h ×1

将输入的N个n-gram特征进行叠加,包含了所有的文本信息。

输出层

隐藏层的输出c \boldsymbol{c}c,之后经过:

  1. 方式1:分层softmax
  2. 方式2:负采样Negative Sampling

就可得到每个预定义类别的预测概率。

分层softmax和负采样Negative Sampling具体参考:NLP经典论文:Word2vec、CBOW、Skip-gram 笔记
作者原文:《Distributed Representations of Words and Phrases and their Compositionality》

文章部分翻译

Abstract

本文探讨了一种简单有效的文本分类基本方法。我们的实验表明,我们的快速文本分类法f a s t T e x t fastText f a s t T e x t在精度上与深度学习分类往往是一致的,并且在训练和测试速度上要快好几个数量级。 我们可以使用标准的多核CPU在不到十分钟的时间内对超过10亿个单词样本上对f a s t T e x t fastText f a s t T e x t模型进行训练,并在不到一分钟的时间内对312K类中的50万个句子进行分类。

2 Model architecture

句子分类的一个简单而有效的基线是将句子表示为词袋(BoW)并训练线性分类器,例如逻辑回归或支持向量机(Joachims,1998;Fan等人,2008)。然而,线性分类器不在特征和类之间共享参数,这可能会限制泛化。该问题的常见解决方案是将线性分类器分解为低秩矩阵(Schutze,1992;Mikolov等人,2013)或使用多层神经网络(Collobert和Weston,2008;Zhang等人,2015)。对于神经网络,信息通过隐藏层共享。

NLP经典论文:FastText 笔记

图1显示了一个带有秩约束的简单线性模型。第一个权重矩阵A是单词的查找表。然后将单词表示式平均化为文本表示式,再将文本表示式输入线性分类器。文本表示是一个隐藏变量,可能会被再次使用。该架构类似于Mikolov等人(2013年)的CBOW模型,其中中间的单词由标签代替。我们使用softmax函数f f f来计算预先定义的类的概率分布。对于一组N个文档,这将使类上的负对数似然最小化:
− 1 N ∑ n = 1 N y n log ⁡ ( f ( B A x n ) ) , -\frac{1}{N}\sum\limits_{n=1}^Ny_n\log (f(BAx_n)),−N 1 ​n =1 ∑N ​y n ​lo g (f (B A x n ​)),
(注:感觉这里的N和图中的N不是指代同一个东西,图1中指的是输入n-gram词的个数,文本中的词分别以n-gram划分,即以Uni-gram、Bi-gram、Tri-gram等进行划分,都作为输入;而公式中的N指的是文本的数量,一共有多少篇文本)

其中x n x_n x n ​是第n个文档的标准化特征袋,y n y_n y n ​是标签,A和B是权重矩阵。该模型使用随机梯度下降和线性衰减学习率在多个CPU上异步训练。

; 2.1 Hierarchical softmax

当目标数量较大时,计算线性分类器的计算成本较高。更精确地说,计算复杂度是O ( k h ) O(kh)O (k h ),其中k k k是目标数,h h h是隐藏层的维数(一层有多少个神经元)。为了改善运行时间,我们使用了基于哈夫曼编码树的分层softmax(Goodman,2001)(Mikolov等人,2013)。在训练过程中,计算复杂度下降到O ( h log ⁡ 2 ( k ) ) O(h\log_2(k))O (h lo g 2 ​(k ))。在这棵树中,目标是叶节点。

当搜索最可能的类时,分层softmax在测试时也是有优势的。每个节点都与一个概率相关联,该概率是从根到该节点的路径的概率。如果节点位于深度l + 1 l+1 l +1处,父节点为n 1 , . . . , n l n_1,…,n_l n 1 ​,…,n l ​,它的概率是
P ( n l + 1 ) = ∏ i = 1 l P ( n i ) . P(n_{l+1})=\prod\limits_{i=1}^lP(n_i).P (n l +1 ​)=i =1 ∏l ​P (n i ​).

这意味着节点的概率总是低于其父节点的概率。通过深度优先搜索和追踪树叶中的最大概率来探索树,使得我们可以丢弃概率较小的树枝。在实践中,我们观察到在测试时复杂性降低到O ( h log ⁡ 2 ( k ) ) O(h\log_2(k))O (h lo g 2 ​(k ))。该方法可进一步扩展为计算前T T T个目标,以O ( log ⁡ ( T ) ) O(\log(T))O (lo g (T ))为代价,通过使用二进制堆的方法。

2.2 N-gram features

词袋模型是不考虑单词顺序的,但是明确地考虑到这个顺序通常在计算上非常昂贵。取而代之的是,我们使用n-gram包作为附加特征来捕获关于局部词序的部分信息。这在实践中非常有效,同时实现了与明确使用顺序的方法相当的结果(Wang和Manning,2012)。

通过使用 hashing trick(Weinberger et al.,2009),我们保持了n-gram的快速和内存效率映射,其 hashing function 与Mikolov et al.(2011)中的相同且只需要10M个bin来储存如果我们只使用Bigram,不使用 hashing trick则需要100M个bin。

相关的视频

相关的笔记

玩转Fasttext
word2vec原理(三) 基于Negative Sampling的模型
读FastText文章
fastText原理及实践
fastText原理和文本分类实战,看这一篇就够了
FastText:快速的文本分类器
NLP︱高级词向量表达(二)——FastText(简述、学习笔记)
Hierarchical Softmax(层次Softmax)
翻译:(36)[EACL] Bag of Tricks for Efficient Text Classification

相关代码

pytorch

https://github.com/649453932/Chinese-Text-Classification-Pytorch

tensorflow

keras

pytorch API:

FastText官方网站

  1. 把数据准备为需要的格式,数据准备最终需要的形式如下:
    特征值\t__label__目标值
    机器学习 应 补充 哪些 数学 基础 ? __label__QA
  2. 进行模型的训练、保存和加载、预测
#1. 训练
model = fastText.train_supervised("classify.txt",wordNgrams=1,epoch=20)
#2. 保存
model.save_model("classify.model")
#3. 加载
model = fastText.load_model("classify.model")

textlist = [句子1,句子2]
#4. 预测,传入句子列表
result = model.predict(textlist)

Original: https://blog.csdn.net/sinat_39448069/article/details/121183891
Author: 电信保温杯
Title: NLP经典论文:FastText 笔记

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/531716/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球