自然语言处理NLP知识梳理
感谢知乎 @华天清 的总结
研究和应用领域
- 自动分词
- 词性标注
- 句法分析
- 文本分类
- 信息抽取
- 文本生成
- 语音识别和生成
- 信息检索
- 问答系统
- 机器翻译
- 情感分析
- 自动摘要
- 文字蕴含
研究难点
- 单词的边界难界定
- 词义的消歧
- 句法的模糊性
- 有瑕疵的或不规范的输入
- 语言行为与计划
学科掌握
概率论、统计学、语言学、编程基础
一般处理过程
获取语料
一个文本集合称为语料库(Corpus),多个叫做语料库集合(Corpora)
- 已有语料 整理存档的文本数据;
- 抓取语料 下载国内外公开的语料库 或者用爬虫爬取网络的公开数据
NLP语料库大全(https://blog.****.net/scotfield_msn/article/details/60332046)
情感分析资源大全(语料、词典、词嵌入、代码)https://blog.****.net/qq280929090/article/details/70838025
语料预处理
- 数据清洗 去重、标记、降噪、对齐等
- 分词 把文本切碎成一个个词语 词性标注、去除停用词、标记未登录词等处理
(后期做一个各大分词模型的对比)
特征工程
- 把分词映射成词向量
词向量模型: word2vec、FastText、WordRank、GloVe、BERT、Doc2Vec、onehot等
(后期做一个各大词向量模型的对比) - 特征降维、提取 将高维空间特征映射到低维空间,形成新的突出特征
算法:PCA、LDA、SVD、ICA 等 - 特征选择 从特征集中选出具有代表性的特征子集
算法:SFS、SBS等
模型训练
根据语料和具体的问题来采用不同的模型算法。
在特征提取环节,深度学习由机器自己完成特征提取,不需要人工提取。
(1)语料拆分
训练集:用于训练模型;
验证集:用于调整模型参数,找出最佳模型、交叉验证;
测试集:评估模型的泛化能力和误差;
(2)机器学习模型
KNN、SVM、Naive Bayes、决策树、回归、AdaBoost、K-means 等;
(3)深度学习模型(神经网络)
CNN、RNN、LSTM、 GAN、Seq2Seq、TextCNN 等;
优点:学习能力强;覆盖范围广,适应性好;数据驱动,上限高;可移植性好;
缺点:计算量大,便携性差;硬件配置要求高;模型设计复杂;没有“人性”,容易存在偏见;
(4)模型问题
a. 过拟合
在训练集上表现很好,但在测试集上却表现很差,泛化能力差。
解决方法:
控制好模型的复杂度;
增加训练样本,覆盖尽量多的数据类型;
增加正则化项,如L1 / L2 正则化;
降低特征的数量或采用Dropout方法;
b. 欠拟合
在训练集和测试集的误差都比较大。
解决方法:
做特征工程,添加很多的特征项;
增加模型复杂度;
c. 梯度消失、梯度爆炸
在深层网络中,采用了不合适的损失函数。
解决方法:
预训练加微调;
梯度剪切、权重正则(针对梯度爆炸);
使用不同的**函数;
使用batchnorm;
使用残差结构;
使用LSTM网络;
模型评估
ROC曲线和AUC值、KS曲线、增益图和提升图、P-R曲线 等;
准确率、精确率、真负率、召回率、查全率、F1衡量、稳定度PSI 等;
模型上线应用
第一种是线下训练模型,然后将模型做线上部署;
第二种是在线训练,在线训练完成之后把模型 pickle 持久化;
模型重构(非必须)
模型迁移到其他领域的数据;
模型上线后效果不好;
原文 : 自然语言处理NLP知识和产品的笔记