碎碎念:
之前有一些机器学习相关的概念基础,但从未实践过,看的知识也不系统。这次刚好工作中有应用需求,就以NLP的文本分类为切入点,进行相关知识的学习和模型实践。
当前进展:
研究了两周,完成文本预处理、word embedding、TextCnn模型训练、API封装等代码工作,模型效果调优、验证中。计划以笔记的形式记录几篇博客。
首篇主要是个人对NLP及文本分类的理解、一些基础知识的学习及参考资料记录。下一篇计划关于TextCnn算法学习和代码实践等。
本次个人学习方式:
1. 基础知识补充,形成系统概念,明确方向(多看,遇见不会的就查,把概念盲点都补齐)。
2. 选定算法,找开源代码,针对中文文本及业务场景进行改版、调试。
3. 训练样本标注、分析
5. 模型训练、评估
6. API封装、线上数据测试、模型调整。
正文:
我个人理解的NLP文本分类分为两大步,特征提取和特征学习(模型训练)(对这两部分展开介绍后,最后再简单记一下模型分析的概念)。
一、特征提取
无论是基于统计的机器学习,还是基于神经网络的深度学习,都是用样本数据训练模型,教给机器做特定的工作的(NLP能做那些工作参考:https://blog.csdn.net/yimingsilence/article/details/54934516)。而样本数据都需要转化成向量的数学表示才能输入给模型的。
在非NLP的场景,可以是选定的n个特征,每个特征可以有自己的取值,归一化到0-1的范围,就可以形成n维的向量,输入给模型进行训练。
而在NLP的场景文本怎么转化向量?转化的过程中怎么把原来的文本信息尽量多的保留?(你教给模型的信息越多,它可能学习的越好,当然也可能学“死”了,也就是过拟合问题,把一些不该学到的特征也学到了)
这就包含两部分,即文本预处理和word embedding词嵌入。
1. 文本预处理
将文本中的无用信息剔除或归一化处理(例如URL、长串数字字母、表情等),有用信息保留,变体信息转换(如特殊符号替换、同音近型替换、简繁替换、中英文转换)等。
例如在涉赌等非法内容,为了对抗识别,经常在文本中插入无意义的字符或者用各种音近字、形近字、拼音表情等,如果直接那来训练就会要么提取不到有用的信息(变体的词都找不到词向量,例如‘啋僄’是彩票的变体词),要么把无用的特征保留了(例如‘投猪’是投注的变体,分词的时候会把‘猪’单独分成一个词,那机器就会错误的认为提到‘猪’是涉赌的特征之一)
可参考https://www.sohu.com/a/271534609_383123前半部分描述。
2. 分词+word embedding词嵌入
文本梳理顺了,就要做文本到向量的转换了,这个过程就是