2019-09-09 16:33:11

问题描述:fastText是如何进行文本分类的。

问题求解

fastText是一种Facebook AI Research在16年开源的一个文本分类器。 其特点就是fast。相对于其它文本分类模型,如SVM,Logistic Regression和neural network等模型,fastText在保持分类效果的同时,大大缩短了训练时间。
fastText专注于文本分类,在许多标准问题上的分类效果非常好。

  • 训练fastText
    trainDataFile = 'train.txt'

    classifier = fasttext.train_supervised(
input = trainDataFile,
label_prefix = '__label__',
dim = 256,
epoch = 50,
lr = 1,
lr_update_rate = 50,
min_count = 3,
loss = 'softmax',
word_ngrams = 2,
bucket = 1000000)
classifier.save_model("Model.bin")

在训练fastText的时候有两点需要特别注意,一个是word_ngrams,一个是loss,这两个是fastText的精髓所在,之后会提到。

在使用fastText进行文本训练的时候需要提前分词,这里的ngrams是根据分词的结果来组织架构的;

事实上在训练文本分类的时候有个副产物就是word2vec,fastText在实现文本分类的时候其实和cbow非常类似,就是把word2vec求和之后过了一个fc进行的分类。

  • 使用fastText进行预测

使用fastText进行预测是非常简单的,可以直接使用下述的代码进行预测。

    testDataFile = 'test.txt'

    classifier = fasttext.load_model('Model.bin')  

    result = classifier.test(testDataFile)
print '测试集上数据量', result[0]
print '测试集上准确率', result[1]
print '测试集上召回率', result[2]
  • Bag of tricks for efficient text classification

1)分层softmax:对于类别过多的类目,fastText并不是使用的原生的softmax过交叉熵,而是使用的分层softmax,这样会大大提高模型的训练和预测的速度。

2)n-grams:fastText使用了字符级别的n-grams来表示一个单词。对于单词“apple”,假设n的取值为3,则它的trigram有

“<ap”, “app”, “ppl”, “ple”, “le>”

其中,<表示前缀,>表示后缀。于是,我们可以用这些trigram来表示“apple”这个单词,进一步,我们可以用这5个trigram的向量叠加来表示“apple”的词向量。

这带来两点好处:

1. 对于低频词生成的词向量效果会更好。因为它们的n-gram可以和其它词共享。

2. 对于训练词库之外的单词,仍然可以构建它们的词向量。我们可以叠加它们的字符级n-gram向量。

  • fastText 运行速度快的原因

1)多线程训练:fastText在训练的时候是采用的多线程进行训练的。每个训练线程在更新参数时并没有加锁,这会给参数更新带来一些噪音,但是不会影响最终的结果。无论是 google 的 word2vec 实现,还是 fastText 库,都没有加锁。线程的默认是12个,可以手动的进行设置。

2)分层softmax:fastText在计算softmax的时候采用分层softmax,这样可以大大提高运行的效率。

  • fastText 所有可选参数
The following arguments are mandatory:
-input training file path
-output output file path The following arguments are optional:
-verbose verbosity level [2] The following arguments for the dictionary are optional:
-minCount minimal number of word occurrences [1]
-minCountLabel minimal number of label occurrences [0]
-wordNgrams max length of word ngram [1]
-bucket number of buckets [2000000]
-minn min length of char ngram [0]
-maxn max length of char ngram [0]
-t sampling threshold [0.0001]
-label labels prefix [__label__] The following arguments for training are optional:
-lr learning rate [0.1]
-lrUpdateRate change the rate of updates for the learning rate [100]
-dim size of word vectors [100]
-ws size of the context window [5]
-epoch number of epochs [5]
-neg number of negatives sampled [5]
-loss loss function {ns, hs, softmax} [softmax]
-thread number of threads [12]
-pretrainedVectors pretrained word vectors for supervised learning []
-saveOutput whether output params should be saved [0] The following arguments for quantization are optional:
-cutoff number of words and ngrams to retain [0]
-retrain finetune embeddings if a cutoff is applied [0]
-qnorm quantizing the norm separately [0]
-qout quantizing the classifier [0]
-dsub size of each sub-vector [2]

fastText 训练和使用的更多相关文章

  1. fastText训练word2vec并用于训练任务

    最近测试OpenNRE,没有GPU服务器,bert的跑不动,于是考虑用word2vec,捡起fasttext 下载安装 先clone代码 git clone https://github.com/fa ...

  2. 一个使用fasttext训练的新闻文本分类器/模型

    fastext是什么? Facebook AI Research Lab 发布的一个用于快速进行文本分类和单词表示的库.优点是很快,可以进行分钟级训练,这意味着你可以在几分钟时间内就训练好一个分类模型 ...

  3. fasttext使用笔记

    http://blog.csdn.net/m0_37306360/article/details/72832606 这里记录使用fastText训练word vector笔记 github地址:htt ...

  4. FastText总结,fastText 源码分析

    文本分类单层网络就够了.非线性的问题用多层的. fasttext有一个有监督的模式,但是模型等同于cbow,只是target变成了label而不是word. fastText有两个可说的地方:1 在w ...

  5. FastText的内部机制

    文章来源:https://towardsdatascience.com/fasttext-under-the-hood-11efc57b2b3 译者 | Revolver fasttext是一个被用于 ...

  6. NLP获取词向量的方法(Glove、n-gram、word2vec、fastText、ELMo 对比分析)

    自然语言处理的第一步就是获取词向量,获取词向量的方法总体可以分为两种两种,一个是基于统计方法的,一种是基于语言模型的. 1 Glove - 基于统计方法 Glove是一个典型的基于统计的获取词向量的方 ...

  7. 是时候给你的产品配一个AI问答助手了!

    本文由云+社区发表 | 导语 问答系统是信息检索的一种高级形式,能够更加准确地理解用户用自然语言提出的问题,并通过检索语料库.知识图谱或问答知识库返回简洁.准确的匹配答案.相较于搜索引擎,问答系统能更 ...

  8. 词表征 3:GloVe、fastText、评价词向量、重新训练词向量

    原文地址:https://www.jianshu.com/p/ca2272addeb0 (四)GloVe GloVe本质是加权最小二乘回归模型,引入了共现概率矩阵. 1.基本思想 GloVe模型的目标 ...

  9. fasttext模型 训练THUCNews

    # _*_coding:utf-8 _*_ import fasttext import jieba from sklearn import metrics import random def rea ...

随机推荐

  1. MySQL增、删、改、查基础操作(C++)

    系统平台:Centos7 MySQL版本:5.7.19 连接MySQL数据库 MySQL::MySQL(string host, string user, string passwd, string ...

  2. Java工厂模式解耦 —— 理解Spring IOC

    Java工厂模式解耦 -- 理解Spring IOC 最近看到一个很好的思想来理解Spring IOC,故记录下来. 资源获取方式 主动式:(要什么资源都自己创建) 被动式:(资源的获取不是我们创建, ...

  3. Java入门教程六(内置包装类)

    Java 是一种面向对象的编程语言,Java 中的类把方法与数据类型连接在一起,构成了自包含式的处理单元.但在 Java 中不能定义基本类型对象,为了能将基本类型视为对象处理,并能连接相关方法,Jav ...

  4. Java入门教程五(数字和日期处理)

    Java 提供了处理相关问题的类,包括 Math 类.Random 类.BigInteger 类.Date 类等. Math类 Math 类封装了常用的数学运算,提供了基本的数学操作,如指数.对数.平 ...

  5. Docker实战之Zookeeper集群

    1. 概述 这里是 Docker 实战系列第四篇.主要介绍分布式系统中的元老级组件 Zookeeper. ZooKeeper 是一个开源的分布式协调服务,是 Hadoop,HBase 和其他分布式框架 ...

  6. IAR软件使用的快捷键配置以及配置cc2530环境

    以下是我对IAR软件使用的快捷键配置cc2530以及配置环境的总结,如下图所示 ​ ​ ​ 弹出保存窗口 ​ 工程生成完毕——生成.c文件 ​ 快捷键ctrl+s保存.c文件 ​ ​ ​ ​ ​ 选择 ...

  7. 浅析TCP/IP协议

    浅析TCP/IP协议 0x00 什么是TCP/IP协议? ​ 想一想人与人之间交流需要什么?我们是不是要掌握一种我们都能体会到对方意思的语言.那么计算机与网络设备之间进行通信,是不是不同设备之间是不是 ...

  8. D3.js实现拓扑图

    最近写项目需要画出应用程序调用链的网路拓扑图,完全自己写需要花费些时间,那么首先想到的是echarts,但echarts的自定义写法写起来非常麻烦,而且它的文档都是基于配置说明的,对于自定义开发不太方 ...

  9. sqlserver取分组数据的最后一条数据

    SQL Server中ROW_NUMBER()函数的使用 参考文章:https://blog.csdn.net/pan_junbiao/article/details/79941162 业务中的问题: ...

  10. vuex和localStorage,全局变量的区别

    vuex是状态管理,是为了解决跨组件之间数据共享问题的,一个组件的数据变化会映射到使用这个数据的其他组件当中.如果刷新页面,之前存储的vuex数据全部都会被初始化掉. localStorage是H5提 ...