当前位置: 首页 > news >正文

深度学习之文本分类 ----FastText

FastText

FastText是一种典型的深度学习词向量的表示方法,它非常简单通过Embedding层将单词映射到稠密空间,然后将句子中所有的单词在Embedding空间中进行平均,进而完成分类操作。

FastText是一个三层的神经网络,输入层、隐含层和输出层。
在这里插入图片描述
FastText的优点:

使用浅层的神经网络实现了word2vec以及文本分类功能,效果与深层网络差不多,节约资源,且有百倍的速度提升

深度学习和机器学习的区别:

与传统机器学习不同,深度学习既提供特征提取功能,也可以完成分类的功能。机器学习需要再根据提取到的特征再进行分类。

安装FastText
使用pip安装

pip install fasttext

因为FastText依赖C++的环境,安装的时候可能会报错,有的是C++ 11
有的是C++14看报错里面缺少那个版本的C++环境就安装那个版本的环境就可以了

使用FastText进行文本分类的一般步骤
在这里插入图片描述

数据格式的要求:

__label__标签 文本内容  或  文本内容 __label__标签
__label__标签\t文本内容  或  文本内容\t__label__标签
文本内容和标签之间用\t或空格都可以
目前这几种形式都支持

数据预处理:
将原数据处理为数据要求的格式,分词以后词于词之间用空格连接
这个根据自己数据的情况自己进行处理
训练模型

import fasttext
model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2, verbose=2, minCount=1, epoch=25, loss="hs")     # 训练模型
# train.csv 文件路径,也可以是txt文件,里面的参数根据需要调
"""
  训练一个监督模型, 返回一个模型对象
  input:           训练数据文件路径
  lr:              学习率
  dim:             向量维度
  ws:              cbow模型时使用
  epoch:           次数
  minCount:        词频阈值, 小于该值在初始化时会过滤掉
  minCountLabel:   类别阈值,类别小于该值初始化时会过滤掉
  minn:            构造subword时最小char个数
  maxn:            构造subword时最大char个数
  neg:             负采样
  wordNgrams:      n-gram个数
  loss:            损失函数类型, softmax, ns: 负采样, hs: 分层softmax
  bucket:          词扩充大小, [A, B]: A语料中包含的词向量, B不在语料中的词向量
  thread:          线程个数, 每个线程处理输入数据的一段, 0号线程负责loss输出
  lrUpdateRate:    学习率更新
  t:               负采样阈值
  label:           类别前缀
  verbose:         ??
  pretrainedVectors: 预训练的词向量文件路径, 如果word出现在文件夹中初始化不再随机
  model object

  """

预测数据
使用predict预测数据,预测一段文本属于的类别

model.predict(x)  # x文本内容 返回的数据格式(('__label__4',), array([0.99441689]))
# 可能性最大的标签和准确率
  

使用test验证模型的准确率,传入的是一个文件,文件的格式和训练集一样
返回一个元组(样本数,精确率,找回率)

模型的保存

 model.save_model("model_cooking.bin")  # 文件路径

模型读取

fasttext.load_model("model_cooking.bin")   # 读取模型

模型的优化

直接使用默认参数去训练模型一般都得不到特别好的结果,可以通过一些手段来优化模型。第一种可以采取的手段是去掉语料库当中的停止词,对于英文的语料库来说,还可以把所有的大写字母都转化成小写字母。另一种可以采取的手段是调整超参数,比如说修改学习速率、修改epoch等,大家可以参照着fastTest的文档去进行相应的调整,fastText的文档中介绍了一种更加方便的自动调参方法,只要我们同时提供训练集和测试集就可以了,带来的精确度提升还是非常显著的:

model = fasttext.train_supervised(input='train.csv', autotuneValidationFile='test.csv', autotuneDuration=600) 
"""
autotuneValidationFile='test.csv',   测试集数据集
autotuneDuration=600                 时间限制,单位为秒,默认为5分钟
"""

# 如果想查看对应的参数,可以使用
对象.属性的方式进行查看

举例:
在这里插入图片描述

使用FastText进行文本分类的基本操作就是这些内容,关于深层次的学习大家可以参考
https://fasttext.cc/docs/en/autotune.html

相关文章:

  • ITE IT6604E/AX HDMI1.4 接收器
  • openCV实践项目:拖拽虚拟方块
  • Java线程通信的简介说明
  • 对JavaBean的特点写法与实战心得详解
  • 【手写算法实现】 之 朴素贝叶斯 Naive Bayes 篇
  • Vue.js核心技术解析与uni-app跨平台实战开发学习笔记 第12章 Vue3.X新特性解析 12.12 响应式系统工具集的使用
  • java服务器端开发-servlet:202、Servlet执行过程介绍:get请求与post请求、编码相关等
  • yara 分析器
  • 数据结构(三) -- 栈
  • 神策数据发布融媒行业版,驱动媒体深度融合转型
  • 解决安装GDAL库报错问题(Windos)
  • 数据逻辑校验机制
  • Linux关于jar包的基本操作
  • 用什么软件可以提高视频批量剪辑的效率
  • 搜索替换 csv 文件中的文本
  • 《Java编程思想》读书笔记-对象导论
  • Angular2开发踩坑系列-生产环境编译
  • angular2开源库收集
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • ES6 ...操作符
  • gf框架之分页模块(五) - 自定义分页
  • JavaScript设计模式系列一:工厂模式
  • JavaScript中的对象个人分享
  • js如何打印object对象
  • rc-form之最单纯情况
  • React+TypeScript入门
  • Spring Cloud(3) - 服务治理: Spring Cloud Eureka
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 动态规划入门(以爬楼梯为例)
  • 回流、重绘及其优化
  • 力扣(LeetCode)21
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 深度学习在携程攻略社区的应用
  • 异常机制详解
  • 在Mac OS X上安装 Ruby运行环境
  • ​【已解决】npm install​卡主不动的情况
  • #LLM入门|Prompt#3.3_存储_Memory
  • #pragma once与条件编译
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (六)vue-router+UI组件库
  • (十六)一篇文章学会Java的常用API
  • (转)memcache、redis缓存
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .dwp和.webpart的区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET DataGridView数据绑定说明
  • .net中生成excel后调整宽度
  • @GetMapping和@RequestMapping的区别
  • [ C++ ] STL---string类的使用指南
  • []T 还是 []*T, 这是一个问题
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt
  • [android] 请求码和结果码的作用
  • [C/C++随笔] char与unsigned char区别