[自然语言处理入门]一、NLP简介与文本预处理
一、NLP简介与文本预处理
学习路线参考:
https://blog.51cto.com/u_15298598/3121189
https://github.com/Ailln/nlp-roadmap
https://juejin.cn/post/7113066539053482021
https://zhuanlan.zhihu.com/p/100567371
https://cloud.tencent.com/developer/article/1884740
本节学习使用工具&阅读文章:
https://looperxx.github.io/CS224n-2019-01-Introduction and Word Vectors/#word2vec-introduction
https://cloud.tencent.com/developer/article/1884740
https://baike.baidu.com/item/自然语言处理/365730?fr=aladdin
https://zhuanlan.zhihu.com/p/65190736
https://zhuanlan.zhihu.com/p/202518583
https://zhuanlan.zhihu.com/p/88362664
https://hillzhang1999.gitee.io/2020/04/04/nlp-zi-xue-bi-ji-tiao-jian-sui-ji-chang-mo-xing/
1. 自然语言处理概述
自然语言处理(Natural Language Processing, NLP)研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。
-
自然语言处理包括多方面和步骤,基本有认知、理解、生成等部分。
- 自然语言理解(NLU):是让电脑把输入的语言变成有意思的符号和关系,然后根据目的再处理。常见应用有分词、词性标注、句法分析、文本分类、信息检索、信息抽取、文字校对等。
- 自然语言生成(NLG):是把计算机数据转化为自然语言。常见应用有机器翻译、问答系统等。
-
自然语言处理的四大任务
-
序列标注
序列到序列的任务。在序列标注中,我们想对一个序列的每一个元素标注一个标签。一般来说,一个序列指的是一个句子,而一个元素指的是句子中的一个词。具体任务有分词、词性标注、命名实体标注、词意角色标注等。
-
文本分类
序列到类别的任务,最常见的是情感分类任务,使用LSTM后接Softmax输出分类结果。
-
句子关系判断
判断两句话的关系,比如问答系统中判断一个问题和一个答案是否匹配,语义相似度匹配中判断两句话是否表达同一个意思等。
-
文本生成
通常是直接面向普通用户的系统任务。例如机器翻译、自动文本摘要、阅读理解、语音识别、对话系统、问答系统等。
-
-
自然语言处理的一般流程:获取语料、文本预处理、特征工程、特征选择、模型训练、模型评估、上线应用。
2. 中文文本预处理概述
文本预处理是自然语言处理中必不可少的一环,且选择什么样的文本预处理方法、处理结果如何都会对下游的工作效果产生非常大的影响。中文文本预处理主要有以下几个环节:语料清洗、分词、词性标注、去停用词。
-
语料清洗
去除噪音数据,仅保留有用数据。通常是删去一些标点符号、乱码等,使用正则表达式就能够取得很好的效果。
-
分词
分词是中文文本预处理中特有的问题,因为中文不像英语天然地有空格作为分界符。现在的分词方法大概可以分为三个类别:基于字符串匹配的分词方法、基于统计的分词方法和基于理解的分词方法。
-
基于字符串匹配的分词方法
又称机械分词方法,它是按照一定的扫描方式将待分词的句子中的词条与语料库中的词进行匹配,然后返回相应的结果。
- 正向最大匹配法(从左到右):定义滑动窗口的长度\(n\),首先取出句子的前\(n\)个字符,判断是否存在于词库中。如果存在,则返回第一个分词,滑动窗口向后滑动\(n\)个位置;如果不存在,滑动窗口缩小1,判断前两个字符是否存在于词库,如果存在,则返回这个分词,滑动窗口向后滑动\(n-1\);不存在则继续缩小滑动窗口,直至将整个句子遍历完。
- 逆向最大匹配法(从右到左):与正向相同,不同的是从末尾开始遍历。
- 双向最大匹配算法:进行一次正向,再进行一次逆向。
-
基于统计的分词方法
在给定大量已经分词的文本的前提下,利用统计机器学习模型学习词语切分的规律(称为训练),从而实现对未知文本的切分。基于统计的分词方法从一定程度上可以考虑到语义问题,得到最好的分词结果,主要的统计模型有:N元文法模型(N-gram),隐马尔可夫模型(Hidden Markov Model ,HMM),最大熵模型(ME),条件随机场模型(Conditional Random Fields,CRF)等。
-
基于理解的分词方法
通过让计算机模拟人对句子的理解,达到识别词的效果。其基本思想就是在分词的同时进行句法、语义分析,利用句法信息和语义信息来处理歧义现象。
-
-
词性标注
在分好词的基础上,给每个词打上词类标签。
-
去停用词
建立好停用词库之后,在分好词的文本基础上很容易就能够进行停用词的去除。
3. 基于统计的中文文本分词方法
-
最大概率分词方法
最基本的统计分词方法。一个待分割的字符串有多种分词结果,最大概率分词的原则是将其中概率最大的那个作为该字符串的分词结果。这种分词方法通常结合多种机械分词方法来进行。
-
最大熵模型(ME)
最大熵模型属于对数线性模型,在给定训练数据的条件下,对模型进行极大似然估计或正则化极大似然估计。
-
N元文法模型(N-Gram)
基于马尔科夫假设提出的模型。
- 马尔科夫假设:一个词的出现仅与它之前的若干个词有关。
N元语法模型的基本的公式可以看作为概率公式P:\(P(w_i|w_1w_2……w_{i-1})\)
如果一个词的出现仅依赖于它前面出现的一个词,那么我们就称之为 Bi-gram;如果一个词的出现仅依赖于它前面出现的两个词,那么我们就称之为 Tri-gram。在此基础上使用极大似然估计计算条件概率。
-
隐马尔可夫模型(HMM)
- 齐次马尔科夫性假设:假设隐藏的马尔科夫链在任意时刻t的状态只依赖于其前一时刻的状态,与其他时刻的状态及观测无关,也与时刻t无关
- 观测独立性假设:假设任意时刻的观测只依赖于该时刻的马尔科夫链的状态,与其他观测即状态无关
给定隐马尔可夫模型\(λ=[A,B,π]\),其中\(\pi\)为初始状态概率,\(A\)为状态转移概率,\(B\)为观测概率(\(b_{ij}\)表示在任意时刻 t,若状态为\(S_i\),则观测值\(O_j\)被获取的概率)。一旦一个系统可以作为 HMM 被描述,就可以用来解决三个基本问题。
- 评估:给定 HMM,求某个观察序列的概率。
- 解码:给定 HMM,以及某个观察序列,求得状态序列。
- 学习:给定观察序列,得到一个HMM。
为了解决分词问题,可以建立以下的HMM:
- 状态集合:
- 观测值:一个字就是一个观测值。
- 观测序列:一句话。
- 初始状态概率、状态转移概率和观测概率可以基于以上定义从数据集中计算得出。
分词问题就是给定一句话(观察序列),获取分词结果(状态序列),可以转化为解码问题。对于解码问题,使用维特比算法求解。
-
条件随机场模型(CRF)
条件随机场模型是隐马尔可夫模型和对数线性模型的结合。
- 可以看作是分类模型Log-Linear Model加入了HMM中的转移特征(齐次马尔可夫假设)从而转变成为的结构化分类模型,从而可以进行Seq2Seq的标注。也就是说,对于样本的预测不再是相互独立的,对于某个样本的预测需要考虑前面或者后面样本预测的结果。
- 也可以看作是生成模型HMM中引入了Log-Linear Model中的自定义特征函数,把它变成了一个判别模型,解决了HMM的输出独立性假设问题和有限元马尔可夫假设问题, 不仅可以表达观测之间的依赖,还可表示当前观测与前后多个状态之间的复杂依赖。