【文本分类】Bag of Tricks for Efficient Text Classification

简介: 【文本分类】Bag of Tricks for Efficient Text Classification

·阅读摘要:

 本文主要提出fastText模型。

·参考文献:

 [1] Bag of Tricks for Efficient Text Classification

[0] 摘要


  文章提出fastText模型,效果接近深度学习基线模型,但是速度非常快。

[1] 介绍


 深度学习模型在实践中取得了非常好的性能,但它们在训练和测试时往往相对较慢,从而限制了它们在非常大的数据集上的使用。


 线性分类器通常被认为是文本分类问题的强基线。如果使用得当,它们通常会有最先进的性能,从而应用到大语料库。


 论文提出的fastText模型表明,线性模型与秩约束和快速损失近似可以在十分钟内训练十亿字,同时实现高性能的表现。

[2] 模型结构


image.png

 这里从代码的角度上来讲解会更清楚。

image.png

  pytorch版本的fastText代码如下:

class Model(nn.Module):
    def __init__(self, config):
        super(Model, self).__init__()
        if config.embedding_pretrained is not None:
            self.embedding = nn.Embedding.from_pretrained(config.embedding_pretrained, freeze=False)
        else:
            self.embedding = nn.Embedding(config.n_vocab, config.embed, padding_idx=config.n_vocab - 1)
        self.embedding_ngram2 = nn.Embedding(config.n_gram_vocab, config.embed)
        self.embedding_ngram3 = nn.Embedding(config.n_gram_vocab, config.embed)
        self.dropout = nn.Dropout(config.dropout)
        self.fc1 = nn.Linear(config.embed * 3, config.hidden_size)
        # self.dropout2 = nn.Dropout(config.dropout)
        self.fc2 = nn.Linear(config.hidden_size, config.num_classes)
    def forward(self, x):
        out_word = self.embedding(x[0])
        out_bigram = self.embedding_ngram2(x[2])
        out_trigram = self.embedding_ngram3(x[3])
        out = torch.cat((out_word, out_bigram, out_trigram), -1)
        out = out.mean(dim=1)
        out = self.dropout(out)
        out = self.fc1(out)
        out = F.relu(out)
        out = self.fc2(out)
        return out

  可以看到,一元语法的embedding可以从预训练词向量获取,二元语法、三元语法就只能模型自己来训练了。

  但随着语料库的增加,由于二元语法、三元语法的存在,内存需求也会不断增加,严重影响模型构建速度,针对这些问题我们使用以下几种解决方案:

  1、使用hash来存储二元语法、三元语法

  2、由采用字粒度变化为采用词粒度

  构建数据集时,我们把二元语法、三元语法通过Hash整合到一起,变成一个索引值,操作如下:

    def biGramHash(sequence, t, buckets):
        t1 = sequence[t - 1] if t - 1 >= 0 else 0
        return (t1 * 14918087) % buckets
    def triGramHash(sequence, t, buckets):
        t1 = sequence[t - 1] if t - 1 >= 0 else 0
        t2 = sequence[t - 2] if t - 2 >= 0 else 0
        return (t2 * 14918087 * 18408749 + t1 * 14918087) % buckets
相关文章
|
1月前
|
机器学习/深度学习 数据挖掘 API
[FastText in Text Classification]论文实现:Bag of Tricks for Efficient Text Classification
[FastText in Text Classification]论文实现:Bag of Tricks for Efficient Text Classification
20 2
|
10月前
|
自然语言处理 算法
SIFRank New Baseline for Unsupervised Keyphrase Extraction Based on Pre-Trained Language Model
在社交媒体上,面临着大量的知识和信息,一个有效的关键词抽取算法可以广泛地被应用的信息检索和自然语言处理中。传统的关键词抽取算法很难使用外部的知识信息。
111 0
SIFRank New Baseline for Unsupervised Keyphrase Extraction Based on Pre-Trained Language Model
|
8月前
|
自然语言处理 数据挖掘 数据处理
【提示学习】Exploiting Cloze Questions for Few Shot Text Classification and Natural Language Inference
目前流行的第四大范式Prompt的主流思路是PVP,即Pattern-Verbalizer-Pair,主打的就是Pattern(模板)与Verbalizer(标签映射器)。   本文基于PVP,提出PET与iPET,但是关注点在利用半监督扩充自己的数据集,让最终模型学习很多样本,从而达到好效果。
|
8月前
|
机器学习/深度学习 数据挖掘
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
36 1
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
|
10月前
|
机器学习/深度学习 自然语言处理 数据可视化
SimCSE: Simple Contrastive Learning of Sentence Embeddings论文解读
本文介绍了SimCSE,一个简单的对比学习框架,极大地推进了最先进的句子嵌入。我们首先描述了一种无监督方法,该方法采用一个输入句子,并在一个对比目标中预测自己
156 0
|
10月前
|
机器学习/深度学习 编解码 自然语言处理
DeIT:Training data-efficient image transformers & distillation through attention论文解读
最近,基于注意力的神经网络被证明可以解决图像理解任务,如图像分类。这些高性能的vision transformer使用大量的计算资源来预训练了数亿张图像,从而限制了它们的应用。
315 0
|
10月前
|
存储 自然语言处理 测试技术
LASS: Joint Language Semantic and Structure Embedding for Knowledge Graph Completion 论文解读
补全知识三元组的任务具有广泛的下游应用。结构信息和语义信息在知识图补全中都起着重要作用。与以往依赖知识图谱的结构或语义的方法不同
80 0
|
12月前
|
数据可视化 数据挖掘
【论文解读】Dual Contrastive Learning:Text Classification via Label-Aware Data Augmentation
北航出了一篇比较有意思的文章,使用标签感知的数据增强方式,将对比学习放置在有监督的环境中 ,下游任务为多类文本分类,在低资源环境中进行实验取得了不错的效果
263 0
|
数据挖掘
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation-ppt版学习笔记
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation-ppt版学习笔记
102 0
|
机器学习/深度学习 数据挖掘
【文本分类】ACT: an Attentive Convolutional Transformer for Efficient Text Classification
【文本分类】ACT: an Attentive Convolutional Transformer for Efficient Text Classification
164 0
【文本分类】ACT: an Attentive Convolutional Transformer for Efficient Text Classification