1 简介
NeuralClassifier是一款基于PyTorch开发的深度学习文本分类工具,其设计初衷是为了快速建立层次多标签分类(Hierarchical Multi-label Classification,HMC)神经网络模型 。NeuralClassifier属于腾讯NeuralNLP的子项,而NeuralNLP是腾讯广告数据算法团队搭建的深度学习NLP公共实验平台,主要涵盖文本分类、序列标注、语义匹配、BERT微调和文本生成等。
NeuralNLP项目已在腾讯广告众多的需求场景中发挥作用:微信朋友圈的横幅广告、QQ与QQ空间、腾讯视频、安卓用户的应用宝、手机QQ浏览器、腾讯新闻、天天快报、腾讯体育。通过广告定向、相关性计算、Lookalike相似人群拓展、动态创意、点击率/转化率预估等技术,可以精准锁定目标人群进行广告投放。
NeuralClassifier不久前在Github上正式开源,以下是开源地址:
https://github.com/Tencent/NeuralNLP-NeuralClassifier
2 什么是HMC?
NeuralClassifier支持大部分的分类任务,包括二分类、多分类、多标签分类、层次分类,而层次多标签分类(HMC)则是NeuralClassifier的一大特色。
2.1 二分类(Binary classification)
二分类问题是一个非常基础且重要的课题。现实生活中有很多实际的二分类场景,如对于借贷问题,我们会根据某个人的收入、存款、职业、年龄等因素进行分析,判断是否进行借贷;对于一封邮件,根据邮件内容判断该邮件是否属于垃圾邮件。
简而言之,有两个类别,但每个实例只分配一个,这些问题被称为二分类。
2.2 多分类(Multi-class classification)
多分类是相对于二分类来定义的,比如一本书可以被分类为小说、杂文或诗歌,一条新闻报道可以涉及经济、法律或政治。此外,Sklearn数据库中的鸢尾花卉数据集(Iris)、手写数字识别数据集(Mnist)同样也是典型的多分类场景。
简而言之,有多个类别,但每个实例只分配一个,这些问题被称为多分类。
图例:二分类与多分类
2.3 多标签分类(Multi-label classification)
多标签分类是更加general的一种情况了,它说为什么一个对象的标签只能有1个呢?为什么一部电影不是喜剧就是爱情剧呢?难道我不能训练一个人工智能,它能告诉我这部电影既有喜剧成分又有爱情成分?
有别于多分类,多标签分类中每个标签不是互斥的;每个实例都可以使用多个类别进行分配。因此,这些问题被称为多标签分类。
图例:多分类与多标签分类对比
2.4 层次多标签分类(Hierarchical Multi-label Classification,HMC)
HMC是最具挑战性的机器学习任务之一。HMC可以看作是多标签分类的特殊情况:不同标签并非各自独立,而是以等级划分的,类别间存在一个树状的结构;如果一个对象属于某个子标签,那么它自然就隶属于对应的父标签。同时,每个对象可以属于多个类,因此每个对象都可以关联到类层次结构(即树状结构)的多个不同路径。
HMC典型的应用领域是文本分类问题。传统的文本分类任务中,类别间不具有彼此包含或彼此重叠等功能复杂关系;即使有一些关系,分类算法也不作考虑。而HMC则会分析两个类别的外延是否存在包含关系:比如“水果”类和“苹果”类,在树状层次结构中就属于父类与子类。
此外,目前HMC在图像标注、蛋白质功能预测等问题中也有应用。随着HMC算法的不断改进,出现了诸如HMCN(Hierarchical Multi-label Classification Networks)、HR-DGCNN(Large-Scale Hierarchical Text Classification with Recursively Regularized Deep Graph-CNN)的改进算法,将来有望解决更多领域的实际问题。
较齐全的功能
在目前业界的分类工具中,层次多标签分类的神经网络模型往往主要针对特定的模型结构,缺乏一个集成的工具。NeuralClassifier的出现有望填补这一空缺。
2.5 支持的文本编码器
- TextCNN (Kim, 2014)
- RCNN (Lai et al., 2015)
- TextRNN (Liu et al., 2016)
- FastText (Joulin et al., 2016)
- VDCNN (Conneau et al., 2016)
- DPCNN (Johnson and Zhang, 2017)
- AttentiveConvNet (Yin and Schutze, 2017)
- DRNN (Wang, 2018)
- Region embedding (Qiao et al., 2018)
- Transformer encoder (Vaswani et al., 2017)
- Star-Transformer encoder (Guo et al., 2019)
系统环境需求
Python 3
PyTorch 0.4或更高版本
Numpy 1.14.3或更高版本
2.6 系统架构
NeuralClassifier采用分层的架构设计,从下到上依次为:
输入层(input layer):读取文本输入并做格式处理
嵌入层(embedding layer):将文本输入转换为词向量
编码层(encoder layer):对嵌入层输出的信息进行编码表示
输出层(output layer):对编码层输出的信息做基于目标分类任务的转换,确定是二分类、多分类、多标签分类还是层次多标签分类
用户可以通过一个配置文件方便地配置不同层的各种模型和Features。
2.7 分类器表现评估
项目团队选取了业界主流的两个层次多标签分类数据集:RCV1和Yelp,通过对比SOTA(State-of-the-art, 当前业界最佳性能算法)的表现,结果表明NeuralClassifier可以取得与SOTA相当的效果。
0.数据集
1.与SOTA的对比
2.使用不同的文本分类模型(Text Encoder)
3.层次分类Vs单层分类
3 实战
- 使用的开发环境是 intelli ide,原因是该编译器既可以写java、scala程序,还能写python程序。
必须的包:
torch_nightly>=1.0.0.dev20190325 numpy>=1.16.2 torch>=1.0.1.post2。
安装torch:1.先确保安装python 3.X 64位;
- 然后输入一下命令。因为先是用本地电脑跑的,没有GPU,所以安装的NONE CUDA版本。
pip3 install https://download.pytorch.org/whl/cpu/torch-1.1.0-cp37-cp37m-win_amd64.whl
pip3 install https://download.pytorch.org/whl/cpu/torchvision-0.3.0-cp37-cp37m-win_amd64.whl
支持的任务:
二分类文本任务、多分类文本任务、多标签文本分类和多层级多标签文本分类任务。
这里我们的一个title对应多个标签,所以应该是多标签文本分类任务。
支持的文本编码器:
- 系统架构:
输入:语句(必须),关键词和主题(可选项)
输出:类别
工程使用:
整个文件目录大概是这样的:
conf:里面包含train.json文件,主要是相关的配置文件(输入输入目录、模型超参数等)。
data:数据目录,训练、测试、验证数据集。
- 命令
1.模型训练:
python train.py conf/train.json
训练相关的信息会输出到 log.logger_file日志文件中。
2.模型评估:
python eval.py conf/train.json
if eval.is_flat = false, hierarchical evaluation will be outputted.
eval.model_dir is the model to evaluate.
data.test_json_files is the input text file to evaluate.
模型评估的信息会输出到eval.dir。
输入的数据格式
JSON example:
{
“doc_label”: [“Computer–MachineLearning–DeepLearning”, “Neuro–ComputationalNeuro”],
“doc_token”: [“I”, “love”, “deep”, “learning”],
“doc_keyword”: [“deep learning”],
“doc_topic”: [“AI”, “Machine learning”]
}
“doc_keyword” and “doc_topic” are optional.