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

简介: 深度学习之文本分类 ----FastText

FastText


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


FastText是一个三层的神经网络,输入层、隐含层和输出层。


55461895bb6a449184549460dfacf3d5.png



FastText的优点:


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


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


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


安装FastText

使用pip安装

pip install fasttext


因为FastText依赖C++的环境,安装的时候可能会报错,有的是C++ 11

有的是C++14看报错里面缺少那个版本的C++环境就安装那个版本的环境就可以了


使用FastText进行文本分类的一般步骤


fa378a5144c142e2ba2cfb0eaaa9c440.png


数据格式的要求:


__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")  # 文件路径


模型的优化


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


model = fasttext.train_supervised(input='train.csv', autotuneValidationFile='test.csv', autotuneDuration=600) 
"""
autotuneValidationFile='test.csv',   测试集数据集
autotuneDuration=600                 时间限制,单位为秒,默认为5分钟
"""
# 如果想查看对应的参数,可以使用
对象.属性的方式进行查看


举例:


fbd1f44e8d7742fda8736dc352834917.png



相关文章
|
4月前
|
机器学习/深度学习 自然语言处理 数据挖掘
【NLP】深度学习的NLP文本分类常用模型
本文详细介绍了几种常用的深度学习文本分类模型,包括FastText、TextCNN、DPCNN、TextRCNN、TextBiLSTM+Attention、HAN和Bert,并提供了相关论文和不同框架下的实现源码链接。同时,还讨论了模型的优缺点、适用场景以及一些优化策略。
173 1
|
7月前
|
机器学习/深度学习 数据可视化 测试技术
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
深度学习:Keras使用神经网络进行简单文本分类分析新闻组数据
|
机器学习/深度学习 缓存 监控
瞎聊深度学习——IMDB影评文本分类
瞎聊深度学习——IMDB影评文本分类
|
机器学习/深度学习 数据采集 自然语言处理
【深度学习前沿应用】文本分类Fine-Tunning
【自然语言处理(NLP)】基于GRU实现情感分类,基于百度飞桨开发,参考于《机器学习实践》所作。
490 1
【深度学习前沿应用】文本分类Fine-Tunning
|
机器学习/深度学习 人工智能 自然语言处理
干货解析|深度学习文本分类在支付宝投诉文本模型上的应用
小蚂蚁说: 随着深度学习的快速发展,以及在图像、语音领域取得的不错成果,基于深度学习的自然语言处理技术也日益受到人们的关注。计算机是怎么理解人类的语言的呢? 传统机器学习的应用,常常是利用上述人工总结的文本特征,但往往会遇到一些问题。
4577 0
|
机器学习/深度学习 自然语言处理 数据挖掘
【资源】用深度学习解决自然语言处理中的7大问题,文本分类、语言建模、机器翻译等
本文讲的是用深度学习解决自然语言处理中的7大问题,文本分类、语言建模、机器翻译等,自然语言处理领域正在从统计学方法转向神经网络方法。在自然语言中,仍然存在许多具有挑战性的问题。但是,深度学习方法在某些特定的语言问题上取得了state-of-the-art的结果。
5332 0
|
20天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
94 5
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的原理与应用:开启智能时代的大门
深度学习的原理与应用:开启智能时代的大门
58 16