fastText文本分类算法
1、概述
FastText 文本分类算法是有Facebook AI Research 提出的一种简单的模型。实验表明一般情况下,FastText 算法能获得和深度模型相同的精度,但是计算时间却要远远小于深度学习模型。fastText 可以作为一个文本分类的 baseline 模型。
2、模型架构
fastText 的模型架构和 word2vec 中的 CBOW 模型的结构很相似。CBOW 模型是利用上下文来预测中间词,而fastText 是利用上下文来预测文本的类别。而且从本质上来说,word2vec是属于无监督学习,fastText 是有监督学习。但两者都是三层的网络(输入层、单层隐藏层、输出层),具体的模型结构如下:
上面图中 $x_i$ 表示的是文本中第 $i$ 个词的特征向量,该模型的负对数似然函数如下:
上面式子中的矩阵 A 是词查找表,整个模型是查找出所有的词表示之后取平均值,用该平均值来代表文本表示,然后将这个文本表示输入到线性分类器中,也就是输出层的 softmax 函数。式子中的 B 是函数 $ f $ 的权重系数。
3、分层 softmax(Hierarchical softmax)
首先来看看softmax 函数的表达式如下:
然而在类别非常多的时候,利用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)
相关文章
- 基于Spark的机器学习实践 (八) - 分类算法
- 【计算机视觉】双目测距(五)--匹配算法对比
- 机器学习-有监督学习-分类算法:SVM/支持向量机【SVM:高维空间里用于二分类的超平面;支持向量:超平面附近隔离带边界上的样本】【求参数(ω,b)使超平面y(x)=Φ(x)·ω+b能最优分隔两集合】
- 排序层-传统模型-2006:矩阵分解(MF)【基于模型的协同过滤ModelCF】【ALS算法】【仅利用用户、物品的交互信息;无法引入用户年龄、性别、商品分类、商品描述、上下文特征等信息,造成信息遗漏】
- 彻底弄懂LSH之simHash算法
- 视频算法分类概述
- 分类算法-朴素贝叶斯
- NLP专栏简介:数据增强、智能标注、意图识别算法|多分类算法、文本信息抽取、多模态信息抽取、可解释性分析、性能调优、模型压缩算法等
- A.机器学习入门算法(九): 基于线性判别模型的LDA手写数字分类识别
- 机器学习:朴素贝叶斯算法对新闻分类
- 机器学习的分类与主要算法对比
- 基于鲸鱼算法优化支持向量机SVM的分类预测,基于WOA-SVM的光谱分类
- 基于鲸鱼算法改进支持向量机SVM的多分类研究,woa-svm
- 【算法】几种常见的排序算法
- 【机器学习算法-python实现】svm支持向量机(1)—理论知识介绍
- 【机器学习PAI实践七】文本分析算法实现新闻自动分类
- 一步一步写算法(之排序二叉树的保存和加载)
- ML之监督学习算法之分类算法一 ——— 决策树算法
- ML之监督学习算法之分类算法一 ———— k-近邻算法(最邻近算法)