基于深度学习-短文本分类
本章节主要研究内容:基于Pytorch 深度学习工具来完成文本分类,后续同步更新 基于深度学习-短文本分类实战课程。
Python 的基础课程: https://edu.51cto.com/lecturer/14351901.html
知识点
- 业务需求
- 技术架构
- tensorboardX 可视化
- CNN 原理
- FastText 原理
- 项目实战: 基于FastText+CNN 、 Pytorch 、 Flask Web 文本分类
文本分类应用场景
文章分类服务对文章内容进行深度分析,输出文章的主题一级分类、主题二级分类及对应的置信度,该技术在个性化推荐、文章聚合、文本内容分析等场景具有广泛的应用价值.
- 新闻分类
根据文本描述的内容方向,针对新闻媒体的文章做自动分类,例如军事类、农业类、体育类、娱乐类等多种类别方向
- 文本审核
定制训练文本审核的分类模型,如判断文本中是否有交易、涉黄涉赌小广告等违规描述类型的内容
- 电商评论分类
电商业务可根据用户对商品的评价内容维度,做物流类、服务类、产品类等问题描述方向的自动分类
- 舆情监控
通过对需要舆情监控的实时文字数据流进行情感倾向性分析,把握用户对热点信息的情感倾向性变化
下面时在整个新闻个性化推荐领域 文本分类的数据内容
那么,我们接下来就一个真实的案例给大家介绍如何通过深度学习来对新闻文本进行分类
运行环境
-
GPU显存:16G(GPU环境下训练深度学习模型非常快)/CPU环境:12G (训练模型慢)
-
Python版本:3.7
-
依赖库:
numpy 1.13.3
jieba 0.39
torch 1.x
pandas 0.23x
import numpy as np
import pandas as pd
import torch
import jieba
print('numpy.version = ',np.__version__)
print('pandas.version = ',pd.__version__)
print('torch.version = ',torch.__version__)
print('jieba.version = ',jieba.__version__)
numpy.version = 1.16.2
pandas.version = 0.23.4
torch.version = 1.0.1.post2
jieba.version = 0.39
基本思路
分类器选择
对于多分类问题,可以使用softmax函数作为分类器,最小化交叉熵(Cross Entropy)
特征提取
基于深度学习方法 (基于word2vec):
- 将所有词(或词频>阈值的词)组成一个词表,得到word2index字典和index2word字典;
- 将词映射为index,并且进行padding,然后通过词对应的index对词向量矩阵进行Lookup,得到当前文本对应的word2vec;
- 使用FastText、CNN、等模型在word2vec的基础上进行特征提取。
深度学习工具
这里基于pytorch 进行FastText、TextCNN 模型训练
模型在线预测
对于大型项目在线服务功能,我们需要使用JAVA或者C++、Go 进行Web 服务部署,对于我们中小型项目我们采用Flask Web 框架进行部署
处理流程
- 原始文本数据分析以及可视化图表展示
- 文本预处理:分词、数据离散化表示
- 构建词表:构建<word,count> 、文本词 统一长度向量化表示
- Embedding : 根据词index 获取词向量、随机或者预训练词向量初始化单词的Embedding 向量
- 模型训练:CNN、FastText 训练模型、效果评估
- 分类器:softmax 获取文本对应类别最大概率
- 在线服务部署-多模型投票
多模型融合: 预测时,将多个模型的预测值的均值作为最终的预测结果
在线服务预测
http://127.0.0.1:5000/v1/p?q=昆明拟规定乘地铁禁止手机外放声音
curl http://127.0.0.1:5000/v1/p?q=昆明拟规定乘地铁禁止手机外放声音| python -m json.tool
{
"errno": 0,
"context": {
"q": "昆明拟规定乘地铁禁止手机外放声音",
"cate_dict": {
"0": "finance",
"1": "realty",
"2": "stocks",
"3": "education",
"4": "science",
"5": "society",
"6": "politics",
"7": "sports",
"8": "game",
"9": "entertainment"
}
},
"data": {
"TextCNN": {
"category": "society",
"probs": [
-5.511918544769287,
-1.5464000701904297,
-7.041414737701416,
-3.089003324508667,
1.89174485206604,
4.6632585525512695,
2.5817089080810547,
-3.4768433570861816,
-3.18292236328125,
-2.9064996242523193
]
},
"results": {
"category": "society",
"probs": [
-4.603572845458984,
-1.6103813648223877,
-4.040615022182465,
-2.9881932735443115,
1.8981172442436218,
2.1644626557826996,
0.9817602038383484,
-3.7099204063415527,
-1.9395252466201782,
-3.047501802444458
]
},
"FastText": {
"category": "science",
"probs": [
-3.6952271461486816,
-1.6743626594543457,
-1.0398153066635132,
-2.887383222579956,
1.9044896364212036,
-0.33433324098587036,
-0.6181885004043579,
-3.942997455596924,
-0.6961281299591064,
-3.1885039806365967
]
}
},
"consume": 1,
"errmsg": "success"
}
文本数据分析
- 词云展示
- 关键词提取
- 用机器学习方法完成中文文本分类 方法
CNN 原理
《Convolutional Neural Networks for Sentence Classification》
FastText 原理
《Bag of Tricks for Efficient Text Classification》
tensorboardX 分类效果
- FastText
$tensorboard --logdir 08-25_14.08
- TextCNN
$tensorboard --logdir 08-25_14.54
项目实战
文本分类项目主要 基于深度学习来完成。这里采用FastText、CNN 完成文本的分类,采用Pytorch 深度学习工具。
$ tree -L 2
.
├── 10_data
│ ├── data
│ ├── log
│ ├── readme.txt
│ └── saved_dict
├── cnn_pre_embedding.py
├── cnn_vocab.py
├── data_processing.py
├── dataset.py
├── docs
│ ├── Bag of Tricks for Efficient Text Classification
│ ├── Convolutional Neural Networks for Sentence Classification
├── images
│ ├── Architecture.png
│ ├── FastText-1.png
│ └── TextCNN-1.png
├── jupter-notebook
│ ├── __init__.py
│ ├── data
│ ├── demo.py
│ ├── demo_embedding.py
│ ├── logs
│ ├── mnist
│ ├── runs
├── model_selector.py
├── models
│ ├── FastText.py
│ ├── TextCNN.py
│ ├── __init__.py
├── predict_server.py
├── run_cnn.py
├── test.py
└── train_eval.py
预处理
构建词表
Embedding
模型训练
FastText、CNN
tensorboardX 可视化
多模型预测
基于Flask Web 提供服务,FastText+CNN 多模型预测结果进行投票。
更多内容,欢迎入群学习: NLP技术交流群:912232968 专注于NLP技术交流和分享,让人人成功NLP领域专家
参考资料
[1] all kinds of text classification models and more with deep learning
https://github.com/brightmart/text_classification
[2] 2018达观杯长文本分类智能处理挑战赛 18解决方案
https://github.com/nlpjoe/daguan-classify-2018
[3] 知乎看山杯 第二名 解决方案
https://github.com/Magic-Bubble/Zhihu
[4] tensorboardX 使用
https://github.com/lanpa/tensorboardX
[5] 百度NLP
https://ai.baidu.com/tech/nlp_apply/topictagger
[6] 文章标签
https://ai.baidu.com/tech/nlp_apply/doctagger
[7] 词向量表示
https://ai.baidu.com/tech/nlp_basic/word_embedding
[8] 自然语言处理 NLP
https://cloud.tencent.com/product/nlp