天然语言处理之机器处理流程

来自微信公众号人工智能头条

为何会有分词

咱们知道天然语言处理中词为最小的处理单元,当你的语料为句子、短文本、篇章时,咱们要作的第一步就是分词。正则表达式

因为英语的基本组成单位就是词,分词是比较容易的。其句子基本上就是由标点符号、空格和词构成,那么只要根据空格和标点符号将词语分割便可。算法

中文和英文就有很大不一样了。虽然基本组成单位也是词,可是中文文本是由连续的字序列构成,词与词之间是没有自然的分隔符,因此中文分词相对来讲困难不少。微信

首当其冲的就是歧义问题,不一样的分割方式会致使不一样的意思。中文分词目前来讲基本上分为2种:网络

  1. 基于词典来进行分词的。优势是简单有效,缺点是没法很好的解决词的歧义问题,尤为在应对网络新的流行词汇时,表现不好机器学习

  2. 基于统计的分词。经过人工标注对中文建模,而后将准备好的语料进行训练。经过计算不一样阶段下出现的几率,选出几率最大的状况做为结果来进行分词。这种分词方法虽然能有效的避免分词致使的歧义,但却须要耗费至关大的性能性能

获取语料

语料,即语言材料。语料是语言学研究的内容。语料是构成语料库的基本单元。因此,人们简单地用文本做为替代,并把文本中的上下文关系做为现实世界中语言的上下文关系的替代品。学习

咱们把一个文本集合称为语料库(Corpus),当有几个这样的文本集合的时候,咱们称之为语料库集合(Corpora)。(定义来源:百度百科)按语料来源,咱们将语料分为如下两种:测试

1.已有语料大数据

不少业务部门、公司等组织随着业务发展都会积累有大量的纸质或者电子文本资料。那么,对于这些资料,在容许的条件下咱们稍加整合,把纸质的文本所有电子化就能够做为咱们的语料库。人工智能

2.网上下载、抓取语料

若是如今我的手里没有数据怎么办呢?这个时候,咱们能够选择获取国内外标准开放数据集,好比国内的中文汉语有搜狗语料人民日报语料

国外的由于大都是英文或者外文,这里暂时用不到。也能够选择经过爬虫本身去抓取一些数据,而后来进行后续内容。

语料预处理

这里重点介绍一下语料的预处理,在一个完整的中文天然语言处理工程应用中,语料预处理大概会占到整个50%-70%的工做量,因此开发人员大部分时间就在进行语料预处理。

下面经过数据洗清、分词、词性标注、去停用词四个大的方面来完成语料的预处理工做。

1.语料清洗

数据清洗,顾名思义就是在语料中找到咱们感兴趣的东西,把不感兴趣的、视为噪音的内容清洗删除,包括对于原始文本提取标题、摘要、正文等信息。

对于爬取的网页内容,去除广告、标签、HTML、JS 等代码和注释等。常见的数据清洗方式有:人工去重、对齐、删除和标注等,或者规则提取内容、正则表达式匹配、根据词性和命名实体提取、编写脚本或者代码批处理等。

2.分词

中文语料数据为一批短文本或者长文本,好比:句子,文章摘要,段落或者整篇文章组成的一个集合。通常句子、段落之间的字、词语是连续的,有必定含义。

而进行文本挖掘分析时,咱们但愿文本处理的最小单位粒度是词或者词语,因此这个时候就须要分词来将文本所有进行分词。

常见的分词算法有:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于规则的分词方法,每种方法下面对应许多具体的算法。

当前中文分词算法的主要难点有歧义识别和新词识别,好比:“羽毛球拍卖完了”,这个能够切分红“羽毛 球拍 卖 完 了”,也可切分红“羽毛球 拍卖 完 了”,若是不依赖上下文其余的句子,恐怕很难知道如何去理解。

3.词性标注

词性标注,就是给每一个词或者词语打词类标签,如形容词、动词、名词等。这样作可让文本在后面的处理中融入更多有用的语言信息。

词性标注是一个经典的序列标注问题,不过对于有些中文天然语言处理来讲,词性标注不是非必需的。

好比,常见的文本分类就不用关心词性问题,可是相似情感分析、知识推理倒是须要的,下图是常见的中文词性整理。

 

常见的词性标注方法能够分为基于规则和基于统计的方法。其中基于统计的方法,如基于最大熵的词性标注、基于统计最大几率输出词性和基于 HMM 的词性标注。

4.去停用词

停用词通常指对文本特征没有任何贡献做用的字词,好比标点符号、语气、人称等一些词。因此在通常性的文本处理中,分词以后,接下来一步就是去停用词。

可是对于中文来讲,去停用词操做不是一成不变的,停用词词典是根据具体场景来决定的,好比在情感分析中,语气词、感叹号是应该保留的,由于他们对表示语气程度、感情色彩有必定的贡献和意义。

特征工程

作完语料预处理以后,接下来须要考虑如何把分词以后的字和词语表示成计算机可以计算的类型。

显然,若是要计算咱们至少须要把中文分词的字符串转换成数字,确切的说应该是数学中的向量。有两种经常使用的表示模型分别是词袋模型和词向量。

词袋模型(Bag of Word, BOW),即不考虑词语本来在句子中的顺序,直接将每个词语或者符号统一放置在一个集合(如 list),而后按照计数的方式对出现的次数进行统计。统计词频这只是最基本的方式,TF-IDF 是词袋模型的一个经典用法。

词向量是将字、词语转换成向量矩阵的计算模型。目前为止最经常使用的词表示方法是 One-hot,这种方法把每一个词表示为一个很长的向量。

这个向量的维度是词表大小,其中绝大多数元素为 0,只有一个维度的值为 1,这个维度就表明了当前的词。

还有 Google 团队的 Word2Vec,其主要包含两个模型:跳字模型(Skip-Gram)和连续词袋模型(Continuous Bag of Words,简称 CBOW),以及两种高效训练的方法:负采样(Negative Sampling)和层序 Softmax(Hierarchical Softmax)。

值得一提的是,Word2Vec 词向量能够较好地表达不一样词之间的类似和类比关系。除此以外,还有一些词向量的表示方式,如 Doc2Vec、WordRank 和 FastText 等。

特征选择

同数据挖掘同样,在文本挖掘相关问题中,特征工程也是必不可少的。在一个实际问题中,构造好的特征向量,是要选择合适的、表达能力强的特征。

文本特征通常都是词语,具备语义信息,使用特征选择可以找出一个特征子集,其仍然能够保留语义信息;但经过特征提取找到的特征子空间,将会丢失部分语义信息。

因此特征选择是一个颇有挑战的过程,更多的依赖于经验和专业知识,而且有不少现成的算法来进行特征的选择。目前,常见的特征选择方法主要有 DF、 MI、 IG、 CHI、WLLR、WFO 六种。

模型训练

在特征向量选择好以后,接下来要作的事情固然就是训练模型,对于不一样的应用需求,咱们使用不一样的模型,传统的有监督和无监督等机器学习模型,。

如 KNN、SVM、Naive Bayes、决策树、GBDT、K-means 等模型;深度学习模型好比 CNN、RNN、LSTM、 Seq2Seq、FastText、TextCNN 等。

这些模型在后续的分类、聚类、神经序列、情感分析等示例中都会用到,这里再也不赘述。下面是在模型训练时须要注意的几个点。

1.注意过拟合、欠拟合问题,不断提升模型的泛化能力。

过拟合:模型学习能力太强,以致于把噪声数据的特征也学习到了,致使模型泛化能力降低,在训练集上表现很好,可是在测试集上表现不好。

常见的解决方法有:

  • 增大数据的训练量;

  • 增长正则化项,如 L1 正则和 L2 正则;

  • 特征选取不合理,人工筛选特征和使用特征选择算法;

  • 采用 Dropout 方法等。

欠拟合:就是模型不可以很好地拟合数据,表如今模型过于简单。

常见的解决方法有:

  • 添加其余特征项;

  • 增长模型复杂度,好比神经网络加更多的层、线性模型经过添加多项式使模型泛化能力更强;

  • 减小正则化参数,正则化的目的是用来防止过拟合的,可是如今模型出现了欠拟合,则须要减小正则化参数。

2.对于神经网络,注意梯度消失和梯度爆炸问题。

评价指标

训练好的模型,上线以前要对模型进行必要的评估,目的让模型对语料具有较好的泛化能力。具体有如下这些指标能够参考。

1.错误率、精度、准确率、精确度、召回率、F1 衡量。

错误率:是分类错误的样本数占样本总数的比例。

精度:是分类正确的样本数占样本总数的比例。这里的分类正确的样本数指的不只是正例分类正确的个数还有反例分类正确的个数。

对于二分类问题,可将样例根据其真实类别与学习器预测类别的组合划分为真正例(True Positive)、假正例(False Positive)、真反例(True Negative)、假反例(False Negative)四种情形,令 TP、FP、TN、FN 分别表示其对应的样例数,则显然有 TP+FP++TN+FN=样例总数。

准确率,缩写表示用 P。准确率是针对咱们预测结果而言的,它表示的是预测为正的样例中有多少是真正的正样例。

精确度,缩写表示用 A。精确度则是分类正确的样本数占样本总数的比例。Accuracy 反应了分类器对整个样本的断定能力(即能将正的断定为正的,负的断定为负的)。

召回率,缩写表示用 R。召回率是针对咱们原来的样本而言的,它表示的是样本中的正例有多少被预测正确。

F1 衡量,表达出对查准率/查全率的不一样偏好。

2.ROC 曲线、AUC 曲线。

ROC 全称是“受试者工做特征”(Receiver Operating Characteristic)曲线。咱们根据模型的预测结果,把阈值从0变到最大,即刚开始是把每一个样本做为正例进行预测,随着阈值的增大,学习器预测正样例数愈来愈少,直到最后没有一个样本是正样例。在这一过程当中,每次计算出两个重要量的值,分别以它们为横、纵坐标做图,就获得了 ROC 曲线。

ROC 曲线的纵轴是“真正例率”(True Positive Rate, 简称 TPR),横轴是“假正例率”(False Positive Rate,简称FPR)

ROC 曲线的意义有如下几点:

  1. ROC 曲线能很容易的查出任意阈值对模型的泛化性能影响;

  2. 有助于选择最佳的阈值;

  3. 能够对不一样的模型比较性能,在同一坐标中,靠近左上角的 ROC 曲所表明的学习器准确性最高。

若是两条 ROC 曲线没有相交,咱们能够根据哪条曲线最靠近左上角哪条曲线表明的学习器性能就最好。可是实际任务中,状况很复杂,若两个模型的 ROC 曲线发生交叉,则难以通常性的断言二者孰优孰劣。此时若是必定要进行比较,则比较合理的判断依据是比较 ROC 曲线下的面积,即AUC(Area Under ROC Curve)。

AUC 就是 ROC 曲线下的面积,衡量学习器优劣的一种性能指标。AUC 是衡量二分类模型优劣的一种评价指标,表示预测的正例排在负例前面的几率。

前面咱们所讲的都是针对二分类问题,那么若是实际须要在多分类问题中用 ROC 曲线的话,通常性的转化为多个“一对多”的问题。即把其中一个看成正例,其他看成负例来看待,画出多个 ROC 曲线。

模型上线应用

模型线上应用,目前主流的应用方式就是提供服务或者将模型持久化。

第一就是线下训练模型,而后将模型作线上部署,发布成接口服务以供业务系统使用。

第二种就是在线训练,在线训练完成以后把模型 pickle 持久化,而后在线服务接口模板经过读取 pickle 而改变接口服务。

模型重构(非必须)

随着时间和变化,可能须要对模型作必定的重构,包括根据业务不一样侧重点对上面提到的一至七步骤也进行调整,从新训练模型进行上线。

相关文章
相关标签/搜索