NLP入门之新闻文本分类竞赛——FastText

1、FastText简介:

fastText 文本分类算法是有Facebook AI Research 提出的一种简单的模型。通过Embeddding层将单词映射到稠密空间,然后将句子中的所有单词在Embeddding空间进行平均,进而完成分类操作。实验表明一般情况下,FastText 算法能获得和深度模型相同的精度,但是计算时间却要远远小于深度学习模型。fastText 可以作为一个文本分类的 baseline 模型。

2、FastText优点

fastText是一个快速文本分类算法,与基于神经网络的分类算法相比有两大优点:
1、fastText在保持高精度的情况下加快了训练速度和测试速度
2、fastText不需要预训练好的词向量,fastText会自己训练词向量
3、fastText两个重要的优化:Hierarchical Softmax、N-gram

3、FastText模型简介

3.1 模型架构

fastText 的模型架构和 word2vec 中的 CBOW 模型的结构很相似。CBOW 模型是利用上下文来预测中间词,而fastText 是利用上下文来预测文本的类别 ,它们都是一个三层的神经网络,输入层,隐含层和输出层。 fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。

在这里插入图片描述

3.2 层次SoftMax

softmax函数常在神经网络输出层充当激活函数,目的就是将输出层的值归一化到0-1区间,将神经元输出构造成概率分布,主要就是起到将神经元输出值进行归一化的作用 ,在标准的softmax中,计算一个类别的softmax概率时,我们需要对所有类别概率做归一化,在这类别很大情况下非常耗时,因此提出了分层softmax(Hierarchical Softmax),思想是根据类别的频率构造霍夫曼树来代替标准softmax, 霍夫曼树是从根节点开始寻找,而且在霍夫曼树中权重越大的节点越靠近根节点,这也进一步加快了搜索的速度,通过分层softmax可以将复杂度从N降低到logN。

3.3 N-gram特征

传统的词袋模型不能保存上下文的语义,例如“我爱你”和“你爱我”在传统的词袋模型中表达的意思是一样的,N-grams 模型能很好的保存上下文的语义,能将上面两个短语给区分开, n-gram是基于语言模型的算法,基本思想是将文本内容按照子节顺序进行大小为N的窗口滑动操作,最终形成窗口为N的字节片段序列 。而且在这里使用了 hash trick 进行特征向量降维。hash trick 的降维思想是讲原始特征空间通过 hash 函数映射到低维空间。

3.4 FastText代码实现

3.4.1 参数调节

from fastText import train_unsupervised
model = train_unsupervised(input, model='skipgram', lr=0.05, 
                            dim=100, ws=5, epoch=5, minCount=5, 
                            wordNgrams=1, loss='ns', bucket=2000000, 
                            thread=12, lrUpdateRate=100, t=0.0001, 
                            label='__label__', verbose=2, 
                            pretrainedVectors='')
  1. model: 首先是模型的选择,skip-gram 以及 CBOW。其中skip-gram是给定当前词汇预测上下文单词,而CBOW则是通过上下文预测当前单词。官方给的建议是 skip-gram比较快,但是CBOW虽然比较慢,但是精度会高一点。
  2. lr: 学习率的选择需要调试,一般会在0.1左右,太高会报错,太低会训练的比较慢。
  3. epoch: epoch 要与 lr 结合考虑,一般不需要超过50次。
  4. dim: 得到的向量的维度,语料比较大的话,设置为300,一般语料相应的降低,具体的多大规模设置多少维度,可以尝试50到300,step=50 测试。
  5. ws, window size, 表示当前词与预测词在一个句子中的最大距离是多少。context window,比如 ws=5,那么是只考虑前后各两个单词 + 当前单词=5, 还是前后各5个单词+当前=11个单词? 这个需要看源码确认一下。
  6. wordNgrams,默认是使用 1-gram,也就是单独的词,可以尝试 bi-gram(也就是wordNgrams=2),也就是每两个word作为一个unit,会导致词数增加。如果英文的可以考虑,因为英文的每个word就是一个单词,而**中文(建议是1)**的话则是再分好词的基础上进行训练,可以直接设置为1就好,当然可以测试 bi-gram 的情况。
  7. loss 默认是 negtive sample, 含义是普通的softmax方法,再输出层每次再保留目标单词的同时,不采用所有的词,而是仅激活其中的一部分(比如100个)单词同 目标单词 作为输出层维度(总词数)。这个可以进行测试,虽然默认的是 ns, 但是看网上
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值