fastText文本分类算法

时间:2022-08-25 04:39:19

1、概述

  FastText 文本分类算法是有Facebook AI Research 提出的一种简单的模型。实验表明一般情况下,FastText 算法能获得和深度模型相同的精度,但是计算时间却要远远小于深度学习模型。fastText 可以作为一个文本分类的 baseline 模型。

2、模型架构

  fastText 的模型架构和 word2vec 中的CBOW 模型的结构很相似。CBOW 模型是利用上下文来预测中间词,而fastText 是利用上下文来预测文本的类别。而且从本质上来说,word2vec是属于无监督学习,fastText 是有监督学习。但两者都是三层的网络(输入层、单层隐藏层、输出层),具体的模型结构如下:

    fastText文本分类算法

  上面图中 $x_i$ 表示的是文本中第 $i$ 个词的特征向量,该模型的负对数似然函数如下:

    fastText文本分类算法

  上面式子中的矩阵 A 是词查找表,整个模型是查找出所有的词表示之后取平均值,用该平均值来代表文本表示,然后将这个文本表示输入到线性分类器中,也就是输出层的 softmax 函数。式子中的 B 是函数 $ f $ 的权重系数。

3、分层 softmax(Hierarchical softmax)

  首先来看看softmax 函数的表达式如下:

    fastText文本分类算法

  然而在类别非常多的时候,利用softmax 计算的代价是非常大的,时间复杂度为 $O(kh)$ ,其中 $k$ 是类别的数量,$h$ 是文本表示的维度。而基于霍夫曼树否建的层次 softmax 的时间复杂度为 $O(h;log_2(k))$ (二叉树的时间复杂度是 $O(log_2(k))$ )。霍夫曼树是从根节点开始寻找,而且在霍夫曼树中权重越大的节点越靠近根节点,这也进一步加快了搜索的速度。

4、N-grams 特征

  传统的词袋模型不能保存上下文的语义,例如“我爱你”和“你爱我”在传统的词袋模型中表达的意思是一样的,N-grams 模型能很好的保存上下文的语义,能将上面两个短语给区分开。而且在这里使用了 hash trick 进行特征向量降维。hash trick 的降维思想是讲原始特征空间通过 hash 函数映射到低维空间。

5、代码实现

import jieba
import fasttext as ft
from skllearn.model_selection import train_test_split ““
分词
去停用词
把处理过后的词写入文本
””
# 有监督的学习,训练分类器
classifier = ft.supervised(filePath, "classifier.model")
result = classifier.test(filePath) # 预测文档类别
labels = classifier.predict(texts) # 预测类别+概率
labelProb = classifier.predict_proba(texts) # 得到前k个类别
labels = classifier.predict(texts, k=3) # 得到前k个类别+概率
labelProb = classifier.predict_prob(texts, k=3)

参考论文:Bag of Tricks for Efficient Text Classification

fastText文本分类算法的更多相关文章

  1. 带监督的文本分类算法FastText

    该算法由facebook在2016年开源,典型应用场景是“带监督的文本分类问题”.   模型 模型的优化目标如下:   其中,$<x_n,y_n>$是一条训练样本,$y_n$是训练目标,$ ...

  2. FastText 文本分类使用心得

    http://blog.csdn.net/thriving_fcl/article/details/53239856 最近在一个项目里使用了fasttext[1], 这是facebook今年开源的一个 ...

  3. 【十大算法实现之naive bayes】朴素贝叶斯算法之文本分类算法的理解与实现

    关于bayes的基础知识,请参考: 基于朴素贝叶斯分类器的文本聚类算法 (上) http://www.cnblogs.com/phinecos/archive/2008/10/21/1315948.h ...

  4. 文本分类需要CNN?No!fastText完美解决你的需求(后篇)

    http://blog.csdn.net/weixin_36604953/article/details/78324834 想必通过前一篇的介绍,各位小主已经对word2vec以及CBOW和Skip- ...

  5. 文本分类需要CNN?No!fastText完美解决你的需求(前篇)

    http://blog.csdn.net/weixin_36604953/article/details/78195462?locationNum=8&fps=1 文本分类需要CNN?No!f ...

  6. 深度学习之文本分类模型-前馈神经网络&lpar;Feed-Forward Neural Networks&rpar;

    目录 DAN(Deep Average Network) Fasttext fasttext文本分类 fasttext的n-gram模型 Doc2vec DAN(Deep Average Networ ...

  7. 万字总结Keras深度学习中文文本分类

    摘要:文章将详细讲解Keras实现经典的深度学习文本分类算法,包括LSTM.BiLSTM.BiLSTM+Attention和CNN.TextCNN. 本文分享自华为云社区<Keras深度学习中文 ...

  8. 文本分类(TFIDF&sol;朴素贝叶斯分类器&sol;TextRNN&sol;TextCNN&sol;TextRCNN&sol;FastText&sol;HAN)

    目录 简介 TFIDF 朴素贝叶斯分类器 贝叶斯公式 贝叶斯决策论的理解 极大似然估计 朴素贝叶斯分类器 TextRNN TextCNN TextRCNN FastText HAN Highway N ...

  9. Atitti 文本分类 &&num;160&semi;以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案

    Atitti 文本分类  以及 垃圾邮件 判断原理 以及贝叶斯算法的应用解决方案 1.1. 七.什么是贝叶斯过滤器?1 1.2. 八.建立历史资料库2 1.3. 十.联合概率的计算3 1.4. 十一. ...

随机推荐

  1. KMA &amp&semi; ex&lowbar;KMP---Revolving Digits

    HDU  4333 Description One day Silence is interested in revolving the digits of a positive integer. I ...

  2. 桌面窗体应用程序,FormClosing事件

    private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //主窗体关闭时,弹出对话框.判断对话框的返回值(即用户 ...

  3. 将文件内容转化为byte数组返回

    如何将文件内容转化为byte数组并返回呢?对于这个问题,我献上我第一次成功的代码~ package com.succez.task1; import java.io.ByteArrayOutputSt ...

  4. Eclipse中代码字体背景变红&sol;变黄&sol;变绿

    如图所示:运行之后,突然这样.到底是什么原因导致的呢? : 经过查找资料可知:因为Eclipse中有覆盖代码功能 (绿色表示代码被执行到,红色表示代码没有被执行到,黄色表示代码部分执行到) 怎么解决这 ...

  5. Luogu4113 &lbrack;HEOI2012&rsqb;采花

    题目大意:给定一个长度为$n$的序列$a_i$,$m$次询问,每次询问$[l,r]$,求在区间内有多少个数出现了至少2次. 数据范围:$1\leq l\leq r\leq n\leq 2*10^6,1 ...

  6. websocket学习和群聊实现

    WebSocket协议可以实现前后端全双工通信,从而取代浪费资源的长轮询.在此协议的基础上,可以实现前后端数据.多端数据,真正的实时响应.在学习WebSocket的过程中,实现了一个简化版群聊,过程和 ...

  7. Codeforces Round &num;548

    没打,简单补档 C.Edgy Trees 容斥,把黑边断掉数联通块,每个联通块贡献$siz^k$ #include<cstdio> #include<cstring> #inc ...

  8. 23&period;pyspider安装

    1.pip安装pip3 install pyspider 2.验证安装 pyspider all 3.打开浏览器 输入:127.0.0.1:5000(如下图)

  9. Verilog 99题之001-009

    001. 画出CMOS反相器的电路原理图. 衬底的连接问题.PMOS衬底接电源,NMOS衬底接地 002. 反相器的速度与哪些因素有关?什么是转换时间(transition time)和传播延迟(pr ...

  10. js 中三层引号问题

    方式1: '[{"Company": "XYZ","Description": "\"TEST\"" ...