说明:本文依据《中文自然语言处理入门实战》完成。目前网上有不少转载的课程,我是从GitChat上购买。
第一课 中文自然语言处理的完整机器处理流程
教程从对象和内容对NLP的技术点进行了划分。教程认为不够完整,但是又不提出一个完整的来……
主要流程
- 获取语料
- 语料预处理
- 特征工程
- 特征选择
- 模型训练
- 评价指标
- 模型上线应用
- 模型重构
获取语料
语料库Corpus:一个文本集合
语料库集合Corpora:多个文本集合
常规语料库获取
已有的语料库,或是从网上获取标准开放数据集。教程提到中文汉语有搜狗语料、人民日报语料,同时另一个业内公认的语料库是WIKI中文语料库。
该语料库获取方式:
https://dumps.wikimedia.org/zhwiki/20181201/
在该网站获取,有两类可以下载使用,读者可以选择最新的
- zhwiki-20181201-pages-articles1.xml-p1p162886.bz2 这个是WIKI中文的articles1,你会发现还有2、3、4、5……大小在150mb左右,适用于小型模型
- zhwiki-20181201-pages-articles.xml.bz2 这个是WIKI中文的articles,应该是上面几个的整合,大小在1.5G左右
语料预处理
在一个完整的中文自然语言处理工程应用中,语料预处理大概会占到整个50%-70%的工作量,所以开发人员大部分时间就在进行语料预处理。下面通过数据洗清、分词、词性标注、去停用词四个大的方面来完成语料的预处理工作。
1.数据清洗
在语料中找到感兴趣的东西,把不感兴趣的、视为噪音的内容清洗删除。
包括对于原始文本提取标题、摘要、正文等信息,对于爬取的网页内容,去除广告、标签、HTML、JS 等代码和注释等。常见的数据清洗方式有:人工去重、对齐、删除和标注等,或者规则提取内容、正则表达式匹配、根据词性和命名实体提取、编写脚本或者代码批处理等。
记住一条Rubbish in Rubbish out,刚开始嫌烦没有做好,会很大程度影响到后续工作。做好原始数据的保存,最好能保存下每一步的操作记录,方便回溯。
2.分词
中文语料数据为一批短文本或者长文本,比如:句子,文章摘要,段落或者整篇文章组成的一个集合。一般句子、段落之间的字、词语是连续的,有一定含义。而进行文本挖掘分析时,我们希望文本处理的最小单位粒度是词或者词语,所以这个时候就需要分词来将文本全部进行分词。
常见的分词算法
- 基于字符串匹配的分词方法
- 基于理解的分词方法
- 基于统计的分词方法
- 基于规则的分词方法
当前中文分词算法的主要难点有歧义识别和新词识别。
目前新词识别大多使用CNN处理,HanLP有成熟的接口使用。文本消歧还没有看。
3.词性标注
就是对文本的每一句话拆分之后,每一个元素在该语句中的词属性。英文使用Spacy,中文使用HanLP都可以得到不错的结果。
常见的词性标注方法可以分为基于规则和基于统计的方法。
- 基于最大熵的词性标注
- 基于统计最大概率输出词性
- 基于 HMM 的词性标注。
4.去停用词
有现成的停用词表,另外用户也可以自定义。
特征工程
将分词后的结果转换为能够计算的类型(就是向量)。
两种常见模型:BOW词袋模型和Word2vec词向量模型。
Word2Vec主要包含两个模型:跳字模型(Skip-Gram)和连续词袋模型(Continuous Bag of Words,简称 CBOW),以及两种高效训练的方法:负采样(Negative Sampling)和层序Softmax(Hierarchical Softmax)。
值得一提的是,Word2Vec 词向量可以较好地表达不同词之间的相似和类比关系。除此之外,还有一些词向量的表示方式,如 Doc2Vec、WordRank 和 FastText 等。
特征选择
文本特征一般都是词语,具有语义信息,使用特征选择能够找出一个特征子集,其仍然可以保留语义信息;但通过特征提取找到的特征子空间,将会丢失部分语义信息。所以特征选择是一个很有挑战的过程,更多的依赖于经验和专业知识,并且有很多现成的算法来进行特征的选择。
说了一堆等于没有说。
常见的特征选择方法教程中列举了这些缩写,很不负责,还是说默认学习者都会了?
- DF (Document Frequency)文档频率。通过统计特征词出现的文档数量,用来衡量某个特征词的重要性
- MI (Mutual Information)互信息法。用于衡量特征词与文档类别直接的信息量。互信息值表示特征项与类别的共现程度,互信息值越大,则两者的共现概率越大。
- IG (Information Gain)信息增益法。通过某个特征词的缺失与存在的两种情况下,语料中前后信息的增加,衡量某个特征词的重要性。
- CHI (Chi-square)卡方检验法。表示特征项与类别的相关程度,统计量值越大,则两者的相关程度越高。
- WLLR (Weighted Log Likelihood Ration)加权对数似然。
- WFO (Weighted Frequency and Odds)加权频率和可能性
我之前用的比较多的似乎是DF和MI。
模型训练
就是之前学习的机器学习和深度学习模型。
机器学习模型:KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等
深度学习模型:CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等
评价指标
就是对分类器的评估,看之前的教程即可https://www.toutiao.com/i6640740320759775748/
模型上线应用
- 线下训练模型,然后将模型做线上部署,发布成接口服务以供业务系统使用。
- 在线训练,在线训练完成之后把模型 pickle 持久化,然后在线服务接口模板通过读取 pickle 而改变接口服务。
模型重构
随着时间和变化,可能需要对模型做一定的重构,包括根据业务不同侧重点对上面提到的一至七步骤也进行调整,重新训练模型进行上线。
网友评论