技术解读

以下内容由 GitRead 中文社区 编辑团队基于项目 README 与官方资料整理, 结合中文开发者的常见使用场景补充技术选型建议。具体以项目官方文档为准。

中文文本分类任务项目深度技术分析

项目背景与痛点

中文文本分类是自然语言处理领域中的一个重要任务,它在智能推荐、情感分析、内容分类等各种业务场景中广泛应用。开源社区中的项目 “JackHCC/Chinese-Text-Classification-PyTorch” 提供了多种基于PyTorch的中文文本分类模型,包括TextCNN、TextRNN、FastText、TextRCNN、BiLSTM_Attention、DPCNN、Transformer、BERT和ERNIE。

该项目解决了开发者在中文文本分类任务中频繁遇到的痛点,提供了多种算法模型的一站式解决方案,大大降低了开发成本和模型定制的难度。在实际应用中,选择合适的模型对文本分析的准确性与实时性至关重要,因此,这个项目为开发者提供了丰富的选择,帮助他们在不同的业务场景中找到最适合的解决方案。

核心技术揭秘

该项目的核心技术在于其对多种深度学习模型的实现及优化。以下为简化后的系统架构图,展示了从输入文本到输出分类结果的数据流过程。

graph TD A[输入文本数据] --> B[预处理] B --> C("词嵌入") C --> D{"选择模型"} D -->|"TextCNN"| F[文本卷积神经网络] D -->|"TextRNN"| G[循环神经网络] D -->|"FastText"| H[快速文本模型] D -->|"TextRCNN"| I[文本卷积递归神经网络] D -->|"BiLSTM_Attention"| J[双向长短期记忆网络+注意力机制] D -->|"DPCNN"| K[深层卷积神经网络] D -->|"Transformer"| L[自注意力机制模型] D -->|"BERT"| Z1[预训练模型BERT] D -->|"ERNIE"| Z2[预训练模型ERNIE] F --> M{"模型预测"} G --> M H --> M I --> M J --> M K --> M L --> M M --> N[输出分类结果]

关键技术栈分析

  • PyTorch:作为主要的机器学习框架,PyTorch因其灵活性、可扩展性和强大的社区支持,成为该项目的理想选择。
  • 模型实现:项目覆盖了多种经典的文本分类模型,如卷积神经网络(CNN)、递归神经网络(RNN)及其变种BiLSTM,以及进阶的Transformer、BERT和ERNIE等预训练模型。这表明作者团队在文本分类领域的深厚积累以及对前沿技术的跟踪。
  • 预处理与词嵌入:预处理是文本分类任务的第一步,涉及到文本清洗、分词、停用词过滤等。词嵌入则是将文本数据转换为模型可处理的向量形式。

技术难点与设计思想

  • 模型选择:如何根据具体业务场景高效选择合适的模型,是设计这一项目的重点之一。该集合提供了从浅层到深度的多种模型,开发者可以根据需要灵活选择。
  • 集成预训练模型:BERT和ERNIE等预训练模型在处理中文文本时展现出色性能,但这些模型的复杂性给项目的整合带来了一定的技术挑战。项目成功地把这些先进预训练模型集成进来,证明了框架高度的兼容性和可扩展性。
  • 性能优化:对于实时性要求高的场景,项目的性能优化是另一个关注点。这涉及到模型量级的选择、模型简化策略等多个方面。

功能亮点与差异

该项目以其全面覆盖的基础分类模型和强大的预训练模型组合,为开发者提供了一个高效的解决方案。与同类开源项目相比,其核心亮点如下:

  • 算法完整性:整个项目吸纳了文本分类领域内多个前沿模型和技术,使得开发人员能够在同一个框架内进行完整的文本分类实验。
  • 兼容性:集成BERT和ERNIE等先进的预训练模型,不仅预示着自然语言处理领域的最新技术潮流,也为项目的实用性增色不少。
  • 模块化设计:代码组织结构清晰,模块化设计使得新模型添加和现有模型的调优变得容易。

应用场景与落地建议

在生产环境中应用该项目时需注意以下几点:

  1. 数据预处理:确保数据预处理质量,高质量的数据输入是模型训练好坏的保障。
  2. 资源消耗:某些预训练模型在进行训练和预测时会有较大的计算资源消耗,需根据实际情况合理分配计算资源。
  3. 实时性:在高并发的在线服务场景下,模型的加载和推理时间需优化,尤其是在使用BERT、ERNIE这样的大型模型时。

适合的应用场景包括:

  • 情感分析:文本分类结果能快速反应出用户对某个主题的好恶程度,可以用于舆情监控等场景。
  • 内容推荐:对于推荐系统来说,文本分类可确定用户潜在的兴趣偏好,从而进行个性化推荐。

综合评价

该项目作为中文文本分类领域的一个优秀实践,提供了实现多种分类算法的完整代码库,非常适合那些需要迅速部署和试验文本分类模型的开发者。少数技术难点在于如何高效地选择和优化模型,以适应各自特定的应用需求。总的来说,这是一个多功能、可扩展性强且适合现有技术积累优化迭代的优质项目。

简要分析

热度分
520
价值分
258
活跃状态
活跃

语言占比

Python

README

Chinese-Text-Classification

中文文本分类,基于pytorch,开箱即用。

  • 神经网络模型:TextCNN,TextRNN,FastText,TextRCNN,BiLSTM_Attention, DPCNN, Transformer

  • 预训练模型:Bert,ERNIE

介绍

神经网络模型

模型介绍、数据流动过程:参考

数据以字为单位输入模型,预训练词向量使用 搜狗新闻 Word+Character 300d,点这里下载

模型 介绍
TextCNN Kim 2014 经典的CNN文本分类
TextRNN BiLSTM
TextRNN_Att BiLSTM+Attention
TextRCNN BiLSTM+池化
FastText bow+bigram+trigram, 效果出奇的好
DPCNN 深层金字塔CNN
Transformer 效果较差

预训练模型

模型 介绍 备注
bert 原始的bert
ERNIE ERNIE
bert_CNN bert作为Embedding层,接入三种卷积核的CNN bert + CNN
bert_RNN bert作为Embedding层,接入LSTM bert + RNN
bert_RCNN bert作为Embedding层,通过LSTM与bert输出拼接,经过一层最大池化层 bert + RCNN
bert_DPCNN bert作为Embedding层,经过一个包含三个不同卷积特征提取器的region embedding层,可以看作输出的是embedding,然后经过两层的等长卷积来为接下来的特征抽取提供更宽的感受眼,(提高embdding的丰富性),然后会重复通过一个1/2池化的残差块,1/2池化不断提高词位的语义,其中固定了feature_maps,残差网络的引入是为了解决在训练的过程中梯度消失和梯度爆炸的问题。 bert + DPCNN

参考:

环境

python 3.7
pytorch 1.1
tqdm
sklearn
tensorboardX
pytorch_pretrained_bert(预训练代码也上传了, 不需要这个库了)

中文数据集

我从THUCNews中抽取了20万条新闻标题,已上传至github,文本长度在20到30之间。一共10个类别,每类2万条。数据以字为单位输入模型。

类别:财经、房产、股票、教育、科技、社会、时政、体育、游戏、娱乐。

数据集划分:

数据集 数据量
训练集 18万
验证集 1万
测试集 1万

更换数据集

  • 按照THUCNews数据集的格式来格式化自己的中文数据集。
  • 对于神经网络模型:
    • 如果用字,按照数据集的格式来格式化你的数据。
    • 如果用词,提前分好词,词之间用空格隔开,python run.py --model TextCNN --word True
    • 使用预训练词向量:utils.py的main函数可以提取词表对应的预训练词向量。

实验效果

机器:一块2080Ti , 训练时间:30分钟。

模型 acc 备注
TextCNN 91.22% Kim 2014 经典的CNN文本分类
TextRNN 91.12% BiLSTM
TextRNN_Att 90.90% BiLSTM+Attention
TextRCNN 91.54% BiLSTM+池化
FastText 92.23% bow+bigram+trigram, 效果出奇的好
DPCNN 91.25% 深层金字塔CNN
Transformer 89.91% 效果较差
bert 94.83% 单纯的bert
ERNIE 94.61% 说好的中文碾压bert呢
bert_CNN 94.44% bert + CNN
bert_RNN 94.57% bert + RNN
bert_RCNN 94.51% bert + RCNN
bert_DPCNN 94.47% bert + DPCNN

原始的bert效果就很好了,把bert当作embedding层送入其它模型,效果反而降了,之后会尝试长文本的效果对比。

预训练语言模型

bert模型放在 bert_pretain目录下,ERNIE模型放在ERNIE_pretrain目录下,每个目录下都是三个文件:

  • pytorch_model.bin
  • bert_config.json
  • vocab.txt

预训练模型下载地址:

bert_Chinese: 模型 https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese.tar.gz
词表 https://s3.amazonaws.com/models.huggingface.co/bert/bert-base-chinese-vocab.txt

来自这里

备用:模型的网盘地址:https://pan.baidu.com/s/1qSAD5gwClq7xlgzl_4W3Pw

ERNIE_Chinese: https://pan.baidu.com/s/1lEPdDN1-YQJmKEd_g9rLgw

来自这里

解压后,按照上面说的放在对应目录下,文件名称确认无误即可。

使用说明

神经网络方法

# 训练并测试:
# TextCNN
python run.py --model TextCNN

# TextRNN
python run.py --model TextRNN

# TextRNN_Att
python run.py --model TextRNN_Att

# TextRCNN
python run.py --model TextRCNN

# FastText, embedding层是随机初始化的
python run.py --model FastText --embedding random 

# DPCNN
python run.py --model DPCNN

# Transformer
python run.py --model Transformer

预训练方法

下载好预训练模型就可以跑了:

# 预训练模型训练并测试:
# bert
python pretrain_run.py --model bert

# bert + 其它
python pretrain_run.py --model bert_CNN

# ERNIE
python pretrain_run.py --model ERNIE

预测

预训练模型:

python pretrain_predict.py

神经网络模型:

python predict.py

参数

模型都在models目录下,超参定义和模型定义在同一文件中。

参考

论文

[1] Convolutional Neural Networks for Sentence Classification

[2] Recurrent Neural Network for Text Classification with Multi-Task Learning

[3] Attention-Based Bidirectional Long Short-Term Memory Networks for Relation Classification

[4] Recurrent Convolutional Neural Networks for Text Classification

[5] Bag of Tricks for Efficient Text Classification

[6] Deep Pyramid Convolutional Neural Networks for Text Categorization

[7] Attention Is All You Need

[8] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding

[9] ERNIE: Enhanced Representation through Knowledge Integration

仓库

本项目基于以下仓库继续开发优化:

评论

暂无评论