NLP主要知识领域 [TOC]
1. 1 基础知识
1.1. 1.1 数学基础
- 线性代数 主要涉及以下概念:向量、矩阵、距离计算(余弦距离、欧式距离、曼哈顿距离、明可夫斯基距离、切比雪夫距离、杰卡德距离、汉明距离、标准欧式距离、皮尔逊相关系数)。
- 概率论 古典概率、随机试验、条件概率、全概率、贝叶斯定理等。
- 统计学 概率分布(几何分布、二项分布、正态分布、泊松分布) 数据度量标准(平均数、中位数、众数、期望、方差、标准差) 图形可视化(饼图、条形图、热力图、折线图、箱线图、散点图、雷达图、仪表盘)
- 统计假设检验 主要是验证所选的模型和所解释的公式,在结构上、形式上、变化方向上是否能代表客观情况。一般采用最小平方法解模时必须进行统计假设检验,即应用统计推断的假设检验原理,通过特定的统计量进行各种显著性检验。
1.2. 1.2 语言学基础
语言学的基本内容,包括词汇、词性、基本语法等。
1.3. 1.3 Python语言基础
目前主流的NLP编程语言中,使用最为广泛的就是Python,基本都支持。
1.4. 1.4 机器学习基础
推荐《统计学习方法》、《机器学习》(周志华)、《机器学习实战》等书籍。
1.5. 1.5 深度学习基础
包括三大类网络:
- 卷积神经网络(Convertional Neural Network, CNN)
- 循环神经网络(Recurrent Neural Network,RNN),包括 双向RNN
- 长短期记忆(Long Short-Term Memory)— LSTM网络
- 门控循环单元(Gated Recurrent Unit,GRU Network)
1.6. 1.6 NLP理论基础
推荐《统计自然语言处理(宗成庆第二版)》、《Python自然语言处理》等。
2. 2 自然语言处理的主要技术范畴
以下是自然语言处理中,主要涉及的范畴。
2.1. 2.1 语义文本相似度分析
语义文本相似度分析是对两段文本的意义和本质之间的相似度进行分析的过程。常用的算法有编辑距离、杰卡德相似系数法等。
2.2. 2.2 信息检索(Information Retrieval, IR)
信息检索是指将信息按一定的方式加以组织,并通过信息查找满足用户的信息需求的过程和技术。
2.3. 2.3 信息抽取(Information Extraction)
信息抽取是指从非结构化/半结构化文本(如网页、新闻、论文文献、微博等)中提取指定类型的信息(如实体、属性、关系、事件、商品记录等),并通过信息归并、冗余消除和冲突消解等手段将非结构化文本转换为结构化信息的一项综合技术。
2.4. 2.4 文本分类(Text Categorization)
文本分类的任务是根据给定文档的内容或主题,自动分配预先定义的类别标签。
2.5. 2.5 文本挖掘(Text Mining)
文本挖掘是信息挖掘的一个研究分支,用于基于文本信息的知识发现。文本挖掘的准备工作由文本收集、文本分析和特征修剪三个步骤组成。目前研究和应用最多的几种文本挖掘技术有:文档聚类、文档分类和摘要抽取。
2.6. 2.6 文本情感分析(Textual Affective Analysis)
情感分析是一种广泛的主观分析,它使用自然语言处理技术来识别客户评论的语义情感,语句表达的情绪正负面以及通过语音分析或书面文字判断其表达的情感等。
2.7. 2.7 问答系统(Question Answering, QA)
自动问答是指利用计算机自动回答用户所提出的问题以满足用户知识需求的任务。不同于现有搜索引擎,问答系统是信息服务的一种高级形式,系统返回用户的不再是基于关键词匹配排序的文档列表,而是精准的自然语言答案。
2.8. 2.8 机器翻译(Machine Translation,MT)
机器翻译是指利用计算机实现从一种自然语言到另外一种自然语言的自动翻译。被翻译的语言称为源语言(source language),翻译到的语言称作目标语言(target language)。 机器翻译研究的目标就是建立有效的自动翻译方法、模型和系统,打破语言壁垒,最终实现任意时间、任意地点和任意语言的自动翻译,完成人们无障碍自由交流的梦想。
2.9. 2.9 自动摘要(Automatic Summarization)
自动文摘(又称自动文档摘要)是指通过自动分析给定的一篇文档或多篇文档,提炼、总结其中的要点信息,最终输出一篇长度较短、可读性良好的摘要(通常包含几句话或数百字),该摘要中的句子可直接出自原文,也可重新撰写所得。
3. 3 核心技术要点
3.1. 3.1 语料库(Corpus)
语料库中存放的是在语言的实际使用中真实出现过的语言材料;语料库是以电子计算机为载体承载语言知识的基础资源;真实语料需要经过加工(分析和处理),才能成为有用的资源。
3.2. 3.2 中文分词(Chinese Word Segmentation)
- 中文分词 中文分词是指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。中文分词较英文分词完全不同,主要问题在于中文不象英文中有空格作为自然的分隔,所以需要一定的算法进行合适的拆分。
主要分词方法 主要分为三大类:基于字符串匹配的分词方法、基于理解的分词方法和基于统计的分词方法和基于深度学习的中文分词。
比较流行的中文分词工具 主要包括 jieba、StanfordNLP、HanLP、SnowNLP、THULAC、NLPIR等。
3.3. 3.3 词性标注(Part-of-speech tagging)
词性标是指为给定句子中的每个词赋予正确的词法标记,给定一个切好词的句子,词性标注的目的是为每一个词赋予一个类别,这个类别称为词性标记(part-of-speech tag),比如,名词(noun)、动词(verb)、形容词(adjective)等。
词性标注是一个非常典型的序列标注问题。最初采用的方法是隐马尔科夫生成式模型, 然后是判别式的最大熵模型、支持向量机模型,目前学术界通常采用的结构是感知器模型和条件随机场模型。近年来,随着深度学习技术的发展,研究者们也提出了很多有效的基于深层神经网络的词性标注方法。
3.4. 3.4 句法分析(Parsing)
主要分为 基于规则的句法结构分析 和 基于统计的语法结构分析 两大类方法。
3.5. 3.5 词干提取(Stemming)
词干提取是将词语去除变化或衍生形式,转换为词干或原型形式的过程。词干提取的目标是将相关词语还原为同样的词干。
3.6. 3.6 词形还原(Lemmatization)
词形还原是将一组词语还原为词源或词典的词目形式的过程。
3.7. 3.7 停用词过滤 (Stop Words)
停用词过滤是指在文本中频繁出现且对文本信息的内容或分类类别贡献不大甚至无贡献的词语,如常见的介词、冠词、助词、情态动词、代词以及连词等。
3.8. 3.8 词向量化(Word Vector)
词向量化是用一组实数构成的向量代表自然语言的叫法。这种技术非常实用,因为电脑无法处理自然语言。词向量化可以捕捉到自然语言和实数间的本质关系。通过词向量化,一个词语或者一段短语可以用一个定维的向量表示。
3.9. 3.9 命名实体消歧(Named Entity Disambiguation)
命名实体消岐是对句子中的提到的实体识别的过程。例如,对句子 “Apple earned a revenue of 200 Billion USD in 2016”,命名实体消岐会推断出句子中的Apple是苹果公司而不是指一种水果。一般来说,命名实体要求有一个实体知识库,能够将句子中提到的实体和知识库联系起来。
3.10. 3.10 命名实体识别(named entity recognition)
命名实体识别是识别一个句子中有特定意义的实体并将其区分为人名,机构名,日期,地名,时间等类别的任务。目前有三种主流算法,包括 CRF,字典法和混合方法等。
4. 4 相关算法
4.1. 4.1 特征提取(Feature Extraction)
特征提取是指将机器学习算法不能识别的原始数据转化为算法可以识别的特征的过程。 举例(文本分类特征提取步骤):
- 对训练数据集的每篇文章,我们进行词语的统计,以形成一个词典向量。词典向量里包含了训练数据里的所有词语(假设停用词已去除),且每个词语代表词典向量中的一个元素。
- 在经过第一步的处理后,每篇文章都可以用词典向量来表示。这样一来,每篇文章都可以被看作是元素相同且长度相同的向量,不同的文章具有不同的向量值。这也就是表示文本的词袋模型(bag of words)。
- 针对于特定的文章,如何给表示它的向量的每一个元素赋值呢?最简单直接的办法就是0-1法了。简单来说,对于每一篇文章,我们扫描它的词语集合,如果某一个词语出现在了词典中,那么该词语在词典向量中对应的元素置为1,否则为0。
4.2. 4.2 特征选择(Feature Selection)
当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。特征选择是指去掉无关特征,保留相关特征的过程,也可以认为是从所有的特征中选择一个最好的特征子集。特征选择本质上可以认为是降维的过程。
4.3. 4.3 计算降维(Dimensionality Reduction)
降维的核心思想是减少需要考虑的随机变量的数量,从而达到减少计算量,加快计算速度的目的。 常见算法:PCA, SVD, LDA等
4.4. 4.4 模型选择
4.4.1. 4.4.1 马可夫模型 (Markov Model)
在自然语言处理中,常见的马可夫模型主要包括以下类别:
- 马尔可夫模型
- 隐马尔可夫模型
- 层次化隐马尔可夫模型
- 马尔可夫网络
- 马尔可夫链 在随机过程中,每个语言符号的出现概率不相互独立,每个随机试验的当前状态依赖于此前状态,这种链就是马尔可夫链。
- 多元马尔科夫链 考虑前一个语言符号对后一个语言符号出现概率的影响,这样得出的语言成分的链叫做一重马尔可夫链,也是二元语法。二重马尔可夫链,也是三元语法,三重马尔可夫链,也是四元语法。
这些模型的应用于自然科学、工程技术、生物科技、公用事业、信道编码等多个领域,具体包括:
- 词类标注
- 语音识别
- 局部句法剖析
- 语块分析
- 命名实体识别
- 信息抽取
4.4.2. 4.4.2 条件随机场(Conditional Random Field,CRF)
条件随机场(conditional random field,简称CRF),是一种鉴别式机率模型,是随机场的一种,常用于标注或分析序列资料,如自然语言文字或是生物序列。条件随机场模型需要解决三个基本问题:特征的选择、参数训练和解码。条件随机场用于序列标注,中文分词、中文人名识别和歧义消解等自然语言处理中,表现出很好的效果。原理是:对给定的观察序列和标注序列,建立条件概率模型。条件随机场可用于不同预测问题,其学习方法通常是极大似然估计。
4.4.3. 4.4.3 贝叶斯网络 (Bayesian Networks, BN)
贝叶斯网络,又称信念网络(belief network)或是有向无环图模型(directed acyclic graphical model),是一种概率图型模型,其理论基础是贝叶斯公式。贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一。从1988年由Pearl提出后,已经成为近几年来研究的热点。一个贝叶斯网络是一个有向无环图(Directed Acyclic Graph,DAG),由代表变量结点及连接这些结点有向边构成。结点代表随机变量,结点间的有向边代表了结点间的互相关系(由父结点指向其子结点),用条件概率进行表达关系强度,没有父结点的用先验概率进行信息表达。结点变量可以是任何问题的抽象,如:测试值,观测现象,意见征询等。适用于表达和分析不确定性和概率性的事件,应用于有条件地依赖多种控制因素的决策,可以从不完全、不精确或不确定的知识或信息中做出推理。
4.4.4. 4.4.4 最大熵模型 (Maximum Entropy Model, MEM)
熵的概念在统计学习与机器学习中真是很重要,熵的介绍在这里:信息熵 。今天的主题是最大熵模型(Maximum Entropy Model,以下简称MaxEnt),MaxEnt 是概率模型学习中一个准则,其思想为:在学习概率模型时,所有可能的模型中熵最大的模型是最好的模型;若概率模型需要满足一些约束,则最大熵原理就是在满足已知约束的条件集合中选择熵最大模型。最大熵原理指出,对一个随机事件的概率分布进行预测时,预测应当满足全部已知的约束,而对未知的情况不要做任何主观假设。在这种情况下,概率分布最均匀,预测的风险最小,因此得到的概率分布的熵是最大。
4.4.5. 4.4.5 词频反转模型(TF-IDF)
TF-IDF是一种统计方法,用于评估单词与文档集中的文档的相关性,从而理解单词的重要程度。TF-IDF能够用于数据检索和数据挖掘。这可以通过乘以两个度量来完成:一个单词在文档中出现多少次,以及单词在一组文档中的相反文档出现频率。它有许多用途,最重要的是在自动文本分析中,并且对于自然语言处理(NLP)的机器学习算法中的单词评分非常有用。
4.5. 4.4.6 其他模型
主要包括以下几种模型:
- 词的独热表示(one-hot representation)
- Bag of Words
- Bi-gram 和 N-gram
- 词的分布式表示(distributed representation)
- 共现矩阵(Cocurrence martrix)
- 神经网络语言模型(Neural Networ Language model,NNLM)
- word2vec
- 连续词袋模型(Continuous Bag of Words,CBOW)
- Skip-Gram模型
4.6. 4.4.7 NLP常用工具
Anaconda Anaconda是一个用于科学计算的Python开发平台,支持 Linux,Mac和Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。Anaconda利用conda命令来进行package和environment的管理,并且已经包含了Python和相关的配套工具。Anaconda集成了大量的机器学习库以及数据处理必不可少的第三方库,比如NumPy,SciPy,Scikit-Learn以及TensorFlow等。
Scikit-learn Scikit-learn是广受欢迎的入门级机器学习库,包含大量的机器学习算法和特征提取实现,使用非常简便。Scikit-learn实现的是浅层学习算法,神经网络仅实现了多层感知机。
TensorFlow TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,可被用于语音识别或图像识别等多项机器学习和深度学习领域。
Keras Keras是一个高级别的Python神经网络框架,能在TensorFlow或者 Theano 上运行。Keras的作者、谷歌AI研究员Francois Chollet宣布了一条激动人心的消息,Keras将会成为第一个被添加到TensorFlow核心中的高级别框架,这将会让Keras变成Tensorflow的默认API。
Gensim Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。
NLTK 在NLP领域中,NLTK是最常使用的一个Python库,但是不支持中文。
Jieba Jieba,结巴分词是最受欢迎的中文分词工具。
5. 5 参考资料:
[1] NLP学习路线 [2] 我爱自然语言处理 [3] 一文读懂自然语言NLP [4] 中文分词原理与工具 [5] 自然语言处理项目资源库汇总