文本分类思维导引
文本分类
机器学习方法(2012前) 特征+分类器
正则
词典
词典:同义词扩展
数据结构:布隆过滤器
语义反转:程度词,否定词,问句
特征工程
统计表征: TFIDF,BOW,TextRank等
语义表征:LDA,LSI(统计+降维)词向量(后话)
分类器
LR,SVM,GBDT
深度学习方法(2013-2017年) 词向量+端到端
词向量
word2vec
两种建模方法:CBOW和SG
两种解决大规模词表训练的trick:负采样和层级softmax
GloVe
1.词共现矩阵分解; 2.与word2vec的等价性证明:neural-word-embedding-as-implicit-matrix-factorization(nips 2014)
Fasttext
考虑了OOV的解决: 1 找到每个词的N-grams,_compute_ngrams函数 2 然后与n-grams词库进行匹配 3 匹配到的n-gram向量平均即为最后的输出值
fasttext
最简单的文本分类模型,均值池化+softmax,考虑了OOV,简单任务效果还行非常快
CNN
TextCNN为代表的模型,在语序无关任务上表现很好,如脏话识别
演进了一些列CNN:DPCNN,VDCNN,在词向量没有进步的情况下,实测中效果都很一般
WWW2017出现了Graph-CNN的,使用词共现图采样子图,相当于改变了语序和语句采样,目测只适合主题分类,没有本质的变化
RNN/LSTM
RNN的演进:RNN-LSTM-GRU
池化方法的演进:attention
capsule
暂且不表
深度学习方法(2017年后) 预训练语言模型
ElMo
NAACL 2018 bestpaper预训练语言模型的开山之作
使用维度很大的两层bi-LSTM(4096 hidden)进行大规模语料的语言模型预训练:慢还效果相对不好
GPT
使用transformer替换LSTM
Bert
改进1.wordpiece:有效解决了oov
改进2.双向,体现在MLM预训练任务上,不是简单的顺序语言模型
MLM可以从任何方向去预测这些挡上的词,而不仅仅是单向的。但是这样做会带来两个缺点:1)预训练用[MASK]提出挡住的词后,在微调阶段是没有[MASK]这个词的,所以会出现不匹配;2)预测15%的词而不是预测整个句子,使得预训练的收敛更慢。但是对于第二点,作者们觉得虽然是慢了,但是效果提升比较明显可以弥补。
XLNET
长文档优化:相对位置编码以及分段RNN机制
扩大数据集:16G-> 19G和78G
Robert
修改了BERT原有的训练策略:动态MASK,删除NSP,BPE的粒度变细
引入了更大的新数据集16GB->160GB
albert
压缩bert参数,使用了矩阵分解和共享参数两个trick
实际上并不减少inference的计算图深度,不能省时间
GPT-2
在GPT基础上变大:增加数据集,网络参数,增大词汇表和上下文长度
似乎想证明:只要够大,我就可以超越Bert
GPT-3
1750亿参数VS Bert3亿参数,数据集500GB VS bert 16GB
似乎想证明:只要学习了地球上所有的文本,我就可以通过图灵测试
...
难点
输入层面:短文本->长文本和超长文本
标签层面:复杂语义识别:如阴阳怪气
时间演化:川普VS 川普,开车VS开车
上下文:美食论坛苹果小米黑莓 VS手机论坛苹果小米黑莓
演进路径
明线:统计-机器学习-深度学习-更深的深度学习
暗线1:简单表达-语义表达-上下文语义表达
暗线2:特征输入粒度 从词到BPE
暗线3:预训练权重从输入层扩展到网络结构
暗线4:自回归派和自编码派的爱恨情仇
暗线5:短文档到长文档
算法选型
定义任务难度的三个维度
数据量
one/zero shot VS 海量
非线性
阴阳怪气 VS 垃圾邮件
反义疑问句 VS 体育财经分类
类间距离
细粒度的情感分类 VS 正负情感
典型难度排序:主题分类-情感分类-意图识别-细粒度情感识别-复杂语义识别(如阴阳怪气)
推荐算法选型
Fasttext(垃圾邮件/主题分类)
TextCNN(主题分类/领域识别)
LSTM(情感分类/意图识别)
Bert(细粒度情感/阴阳怪气/小样本识别)
结合业务的思考
1. NLP最最基本的任务,其技术和方法成熟,数据(X和Y)更重要
2. 方法之间的绝对差距不大,尤其对于简单任务,可能就是0.95和0.93的区别
3. 精度很容易在当前监督数据(X,Y)下摸到天花板,思考一些别的方向
新意图发现
类别空间设计
长尾优化
类比基础算法能力的迭代
识别/检测/分隔
NER
时刻记着自己要成为什么样的人!