本文系作者投稿,作者:艾力亚尔(微博 @艾力亚尔),暴风大脑研究院研发工程师,现负责电视端的语音助手相关工作。
https://eliyar.biz/nlp_chinese_text_classification_in_15mins/
欢迎大家投稿,AI、NLP相关即可。
文本分类是自然语言处理核心任务之一,常见用文本审核、广告过滤、情感分析、语音控制和反黄识别等NLP领域。本文主要是介绍我最近开源的极简文本分类和序列标注框架 Kashgari (https://github.com/BrikerMan/Kashgari)
搭建环境和数据准备
准备工作,先准备 python 环境和数据集。
Python 3.6 环境
THUCNews 数据集子集,链接: https://pan.baidu.com/s/1hugrfRu 密码: qfud
如果需要完整数据集请自行到 THUCTC:一个高效的中文文本分类工具包 下载,请遵循数据提供方的开源协议。上面的子数据集包括一下 10 个分类。
每个分类 6500 条数据。感谢 @gaussic 在使用卷积神经网络以及循环神经网络进行中文文本分类 分享。
虚拟环境中安装所有需要的依赖
数据分别为格式为一样一条新闻,每一行是 格式。我们需要把新闻内容分词后作为输入喂给模型。
训练与验证模型
Kashgari 目前提供了三种分类模型结构 和 。我们先使用
运行结果
由于数据特征比较明显,几轮就达到了 0.9999,val_acc 都 1.0 了。
再拿验证机验证一下模型,测试集上 F1 达到了 0.98,相当不错的成绩了。
保存模型和加载保存模型
模型的保存和重新加载都非常简单
使用 tensorboard 可视化训练过程
Kashgari 是基于 Keras 封装,所以可以很方便的使用 keras 的各种回调函数来记录训练过程,比如我们可以使用 来可视化训练过程。
在项目目录运行下面代码即可启动 tensorboard 查看可视化效果
使用预训练词向量
由于长新闻特征比较明显,语料量也比较大,很容易取得比较不错的结果。但是如果我们的语料比较少,特征不是很明显时候直接训练可能会导致模型过拟合,泛化能力很差,此时我们可以使用预训练的词 Embedding 层来提高模型的泛化能力。
参考
使用卷积神经网络以及循环神经网络进行中文文本分类
中文文本分类对比(经典方法和CNN)
领取专属 10元无门槛券
私享最新 技术干货