NLP经典论文:FastText 笔记

这篇博客深入解析了NLP领域的经典论文FastText,它以其快速训练和不错精度著称。模型利用n-gram特征捕获词序信息,通过分层softmax减少计算复杂度。在实际应用中,FastText能在短时间内完成大量词汇的训练,并实现高效的文本分类。此外,文章还介绍了模型的输入、隐藏和输出层结构,以及相关优化技巧。
摘要由CSDN通过智能技术生成

论文

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

原论文:《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} x1,x2,...,xN,xRh×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} WRh×V, V V V W \boldsymbol{W} W中embedding vector的个数, V 1 V_1 V1个对应uni-gram词, V 2 V_2 V2个对应bi-gram词, V 3 V_3 V3个对应tri-gram词, V m V_m Vm个对应m-gram词… V = V 1 + . . . + V m V=V_1+...+V_m V=V1+...+Vm。但 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 V2=V12,V3=V13,...,Vm=V1m,因为这样会导致 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 fastText使用的是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=x1+x2+...+xN,cRh×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 fastText在精度上与深度学习分类往往是一致的,并且在训练和测试速度上要快好几个数量级。 我们可以使用标准的多核CPU在不到十分钟的时间内对超过10亿个单词样本上对 f a s t T e x t fastText fastText模型进行训练,并在不到一分钟的时间内对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)), N1n=1Nynlog(f(BAxn)),
(注:感觉这里的N和图中的N不是指代同一个东西,图1中指的是输入n-gram词的个数,文本中的词分别以n-gram划分,即以Uni-gram、Bi-gram、Tri-gram等进行划分,都作为输入;而公式中的N指的是文本的数量,一共有多少篇文本)

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

2.1 Hierarchical softmax

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

当搜索最可能的类时,分层softmax在测试时也是有优势的。每个节点都与一个概率相关联,该概率是从根到该节点的路径的概率。如果节点位于深度 l + 1 l+1 l+1处,父节点为 n 1 , . . . , n l n_1,...,n_l n1...nl,它的概率是
P ( n l + 1 ) = ∏ i = 1 l P ( n i ) . P(n_{l+1})=\prod\limits_{i=1}^lP(n_i). P(nl+1)=i=1lP(ni).
这意味着节点的概率总是低于其父节点的概率。通过深度优先搜索和追踪树叶中的最大概率来探索树,使得我们可以丢弃概率较小的树枝。在实践中,我们观察到在测试时复杂性降低到 O ( h log ⁡ 2 ( k ) ) O(h\log_2(k)) O(hlog2(k))。该方法可进一步扩展为计算前 T T T个目标,以 O ( log ⁡ ( T ) ) O(\log(T)) O(log(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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值