NLP经典论文:FastText 笔记
- 论文
- 介绍
- 模型结构
* - 整体结构
- 整体流程
- 输入层
- 隐藏层
- 输出层
- 文章部分翻译
* - Abstract
- 2 Model architecture
– - 相关的视频
- 相关的笔记
- 相关代码
* - pytorch
- tensorflow
– - pytorch API:
论文
原论文:《Bag of Tricks for Efficient Text Classification》
介绍
2016-07发表的文章,特点就是快,精度还不错,使用了简单的模型结构,并使用n-gram 特征作为额外输入以表征词序信息,优化上用分层softmax减少了计算量,加速了训练。
模型结构
整体结构
; 整体流程
输入层
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变得小的方法:
- 低频词舍弃
- 多个词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:分层softmax
- 方式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)。对于神经网络,信息通过隐藏层共享。
图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:
- 把数据准备为需要的格式,数据准备最终需要的形式如下:
特征值\t__label__目标值
机器学习 应 补充 哪些 数学 基础 ? __label__QA - 进行模型的训练、保存和加载、预测
#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/
转载文章受原作者版权保护。转载请注明原作者出处!