文本分类问题Pipeline
基本上机器学习和深度学习对于文本分类的pipeline都是上图这个流程。区别:
- 机器学习提取的是具体特征,如TF-IDF,BOW
- 深度学习提取的是抽象特征,如词向量
传统的分类器在NLP竞赛中都不太好用了,所以基本现在都用深度学习。
最重要的两个步骤:
1.数据转化为信息,即文本表示工作,可以理解为词向量训练
2.信息转化为知识,即做好分类器,可以理解为模型设计
文本表示工作
1. 首先关注语义粒度和文本长度
- 是否分词?以词语还是以字作为表示一个句子的输入特征?若效果相差不大,会保留,并为之后的模型融合增加差异性
- 文本长度使用占比95%左右的长度为最大长度,超过最大长度截取,不足进行填充padding
2. 词向量选择
- w2v和glove基本就是比赛都用的,要么寻找好的词向量,要么自己训练
- trick:拼接w2v和glove作为新特征输入会有一定提升效果
- 词向量维度的选择,需要多做测试去验证寻找最佳的。
3. 语言模型词向量(ELMo、BERT)
- 效果比词向量强,w2v缺点是只包含模型第一层的先验知识,即无法解决一词多义的问题
问
题
:
B
O
W
、
N
−
g
r
a
m
、
词
嵌
入
、
语
言
模
型
词
向
量
的
关
系
?
\color{red}{问题:BOW、N-gram、词嵌入、语言模型词向量的关系?}
问题:BOW、N−gram、词嵌入、语言模型词向量的关系?
答: NLP基本问题是如何计算一段文本序列在某种语言下出现的概率? TF-IDF没有考虑到单词之间的顺序,使用词频来计算,后来有了N-Gram语言模型,使用了隐马尔可夫假设,NGram升级了一下,考虑了N个词构成的特征,然后为了考虑整个句子的词之间的关联和解决维度灾难问题,出现了词嵌入,w2v不是算法,通常指的是它背后的CBoW和skip-gram模型,但是w2v解决不了一词多义问题,就出现了语言模型词向量BERT等。
模型设计工作
文本分类的重点是抓取关键词,关键词抓取收到文本长度影响,就像我们读书,内容越长越难把握重心,过于优化长文本又会导致短文本性能受影响,所以要在【关键词特征】【长文本】【短文本】之间取舍
短文本:CNN+MAXpooling比较好,Max-pooling会直接过滤掉模型认为不重要特征,Capsules比CNN好,LSTM/GRU+Capusules是个不错的模型
长文本:HAN, TEXTCNN前加一层LSTM
CNN-TEXT工作原理:
卷积窗口沿着长度为n的文本一个个滑动,类似于n-gram机制对文本切词,然后和文本中的每个词进行相似度计算,因为后面接了个Max-pooling,因此只会保留和卷积核最相近的词。这就是TextCNN抓取关键词的机制。