NLP自然语言处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NLP自然语言处理相关的知识,希望对你有一定的参考价值。
参考技术A罗素悖论:由所有不包含自身的集合构成的集合
例子:理发师称只给那些不给自己理发的人理发。
基于集合论,理发师无论给自己理发还是不给自己理发都是矛盾的。
因此集合论不是完备的。 即使后面冯罗伊德等科学家提出了各种假定条件。
由于上述的原因,集合率无法很好的描述自然语言,科学家发现通过概率模型可以更好的描述自然语言。
深度学习来处理自然语言属于概率模型
证明最小点位于坐标轴上
h = f+c|x|
由于在x = 0处不可导
h-left\'(0)*h-right\'(0) = (f\'+c)*(f\'-c)
那么如果c>|f\'(0)|可得,h在0处左右导数异号
0是最值。
那么在损失函数加入L1正则化后,可以得到某些维度容易为0,从而得到稀疏解
几乎所有的最优化手段,都将适用凸优化算法来解决
P(A|B) = P(A and B) / P(B)
if A and B 独立
=》P(A and B| C) = P(A|C)*P(B|C)
也可以推出
=>A(A|B and C) = P(A|C) (B交C不为空)
抛9次硬币,硬币出现正面的概率是0.5,出现k次的概率分布如下如
服从正态分布
x的平均值
E = x*p(x) + ...
x相对于期望的偏离
var = (x-E(x))^2
conv = (x - E(x))*(m - E(m))
描述x,m是否有同分布
按理协方差为0,并不代表x和m没有关系
例如下图
如果点的分布对称的分布,会得到协方差为0,但是其实他们是有关系的。
把每个相关的概率累加,得到联合概率
P(x1=m1,x2=m2...) = n!*P1 m1/m1!*P2 m2/m2!
T(n) = (n-1)!
T(x)用一条曲线逼近n!,进而可以求得非整数的阶乘
由二项式分布推出
P = T(a+b)*x (a-1)*(1-x) (b-1)/(T(a)*T(b))
则正态分布
y为0时,不考虑y‘。y为1时,y\'越接近1,越小,越靠近0,越大
把D最小化,迫使y\'逼近y
对于一个句子,有若干单词组成。例如
C1: The dog laughs.
C2: He laughs.
那么计算P(C1) = P(The, Dog, laughs)的概率和P(C2) = P(He, laughs)的概率。
根据历史文本的统计学习。
可以得到P(C1)<<P(C2)
P(\'I love the game\') = P(\'I\')*P(\'love\')*P(\'the\')*P(\'game\')
其中P(<work>) = 频率/总单词数
计算一篇文章是积极的还是消极的。
P(y|x) = sigmod(wx)
x是文章内每个单词的频率
y表示积极和消极情感
其中P(xk|x1, x2,..xk-1) = frequence(x1, x2 ,, xk)/frequence(x1, x2..xk-1)
2-gram模型例子
把多个gram的模型进行线性整合
P(y|x1, x2, .. xn) = P(y)*P(x1, x2, ... xn|y) / P(x1, x2, ... xn)
y代表是否是垃圾邮件
x代表单词
广州市长寿路 -》 广州市长|寿路
广州市长寿路 -》 广州市|长寿路
匹配词袋:广州市,广州市长,长寿路
使用最大匹配发,第二个分词更优
通过统计P(A|B),得出各个option的概率,取最大的概率,则为最后的分词
word => [0, 0 , ... 1, ... 0]
word => [0, 1, 0, 1, 0, ...]
可以解决词相似性问题
计算附近词的频率
word => [0, 3, 0, 1, 0, ...]
w是附近词的one-hot encoding
score是词的one-hot encoding
最后一层通过softmax,取拟合文本
最终中间层则为词向量
输入为词one-hot encoding
输出为附近此的one-hot encoding
最后通过softmax预测附近词
最后中间层则为结果词向量
混合模型是一种统计模型,问题中包含若干个子问题,每个子问题是一个概率分布,那么总问题就是若干个子问题的组合,也就是若干个子分部的组合,这样就形成了混合模型。
有红黑两种硬币,把它们放在盒子里,从盒子里随机抽取一个硬币并投币,抽到红色的概率是p,红色硬币正面的概率是q,黑色硬币正面的概率是m,假设我们没办法看到抽取出的硬币的颜色,只能看到最终是正面或者反面的结果,例如HTTHTTTTHHH (H:正面 T: 反面)。需要估计p,q,m三个参数。
此时可以计算出
通过EM算法迭代如下:
随机p q m
迭代以下过程:
计算上面table
p = (aC(正)+cC(反))/total
q = aC(正)/(aC正+cC正)
m = bC(正)/(bC正 + dC正)
假设有上述数据,需要用混合模型来逼近,通过分析,红色和蓝色数据分别为高斯正态分布,N(u, v)
此时可以得到如下表
p = pN红x/(pN红x+(1-p)N蓝x)
u = pN红x/n
v = pN红(x-u)^2/n
词性转换概率
词性到单词的转换概率
通过EM递归算法,训练以上参数,得到隐马尔可夫模型
PLSA主题模型
只统计词的频率,不计算词的相对位置
计算文档和单词频率的矩阵
进行奇异矩阵分解
得到A矩阵的压缩U,U中的k则为k个主题
通过分析,LSA得到的主题是跟现实无法关联,它只是一个量,而没有明显的意义。
PLSA为了解决此问题,引入概率模型,先确定主题个数
然后通过构建Doc->topic的概率table,和topic->word的概率table。
然后通过EM模型,得到这两个table的所有概率值。
进而得到文档的主题表示
PLSA的缺陷是,对于预测未知的doc,无法计算此文档的相关概率。随着doc数量的增加,PLSA模型的参数会线性增加,从而会造成过拟合。
LDA通过引入先验概率来克服PLSA的问题。
类似于编译原理的上下文无法句法分析,一颗语法树
通过对CFG引入概率参数
有了概率,可以计算每颗语法树的极大似然概率,并取最大概率的树为最终输出
上一个状态中间层的输出作为下一隐层的输入
类似于HMM的2-gram模型。t状态受到t-1时刻输出的影响,受t-k的输出的k越大,影响越小
由于RNN几乎只受到上一时刻的影响,而忽略了久远信息的影响。从而造成了一定的局限性。
LSTM通过引入长短记忆方法,来维持长记忆的信息。
通过训练核内的sigmod函数,使得LSTM可以根据不同的句子,有条件的保留和过滤历史信息,从而达到长记忆的功能。
GRU是LSTM的简化版,它只需要处理两个sigmod函数的训练,而LSTM需要三个sigmod函数的训练,减少了训练的参数,加快了训练的速度,但也损失了一部分模型的复杂,在处理较复杂问题时,没有LSTM那么好。
auto-encoder-decoder的特点是输出的单元数是固定的。对于一般自然语言处理,例如机器翻译,输入的单元个数跟输出单元的个数并不是一一对应的,此时就需要动态的生成输出单元。Seq2Seq通过动态的输出结束符,代表是否输出完成,达到可以动态的根据输入输出不同的单元个数。
seq2seq的缺点是,所有的输入序列都转化为单一的单元c,导致很多信息都将消失,对于不同的输出yi,它可能依赖的输入xj有可能不一样,此时通过加入注意力模型,通过对xi进行softmax处理,并加入到y权重的训练中,可以让不同的y,有不同的x对它进行影响
softmax的输入为输入单元x,和上一个输出单元y,联合产生softmax的权重,进而对不同的序列,对于同一个x,会有不同的注意力到输出
q = Wq(x)
k = Wk(x)
v = Wv(x)
x为词向量
通过训练,得到权重w,从而学习到这一层的softmax注意力参数
R是前一次encoder的输出
通过增加w的数量,产生多个z,并进行堆叠,通过前馈网络,最后产生z
在使用self attention处理句子时,是没有考虑单词在句子中的位置信息的。为了让模型可以加入考虑单词的位置信息,加入了位置编码的向量
计算如下:
pos为单词在句子中的位置
i为词向量的位置
d为句子的长度
位置编码加上词向量形成tranformer的输入
加入了归一化和残差网络
最终通过softmax,输出每个单词的概率,并最终输出单词
自然语言处理(NLP)学习路线总结
目录
-
自然语言处理概述
-
自然语言处理入门基础
-
自然语言处理的主要技术范畴
-
自然语言处理基本点
-
特征处理
-
模型选择
-
NLP常用工具
-
NLP语言模型
-
快速入门NLP方法
-
自然语言处理学习资料
1、自然语言处理概述
自然语言处理(Natural Language Processing,NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究人与计算机之间用自然语言进行有效通信的理论和方法。融语言学、计算机科学、数学等于一体的科学。旨在从文本数据中提取信息。目的是让计算机处理或“理解”自然语言,以执行自动翻译、文本分类和情感分析等。自然语言处理是人工智能中最为困难的问题之一。
2、自然语言处理入门基础
2.1 数学基础
(1)线性代数
向量、 矩阵、距离计算(余弦距离、欧式距离、曼哈顿距离、明可夫斯基距离、切比雪夫距离、杰卡德距离、汉明距离、标准欧式距离、皮尔逊相关系数)
(2)概率论
随机试验、条件概率、全概率、贝叶斯定理、信息论
(3)统计学
图形可视化(饼图、条形图、热力图、折线图、箱线图、散点图、雷达图、仪表盘)
数据度量标准(平均数、中位数、众数、期望、方差、标准差)
概率分布(几何分布、二项分布、正态分布、泊松分布)
统计假设检验
2.2 语言学基础
语音、词汇、语法
2.3 Python基础
廖雪峰教程,Python从入门到实践
2.4 机器学习基础
统计学习方法、机器学习周志华、机器学习实战
2.5 深度学习基础
CNN、RNN、LSTM
2.6 自然语言处理的理论基础
统计自然语言处理(宗成庆第二版)、Python自然语言处理、数学之美(第二版)
3、自然语言处理的主要技术范畴
3.1 语义文本相似度分析
语义文本相似度分析是对两段文本的意义和本质之间的相似度进行分析的过程。
3.2 信息检索(Information Retrieval, IR)
信息检索是指将信息按一定的方式加以组织,并通过信息查找满足用户的信息需求的过程和技术。
3.3 信息抽取(Information Extraction)
信息抽取是指从非结构化/半结构化文本(如网页、新闻、 论文文献、微博等)中提取指定类型的信息(如实体、属性、关系、事件、商品记录等),并通过信息归并、冗余消除和冲突消解等手段将非结构化文本转换为结构化信息的一项综合技术。
3.4 文本分类(Text Categorization)
文本分类的任务是根据给定文档的内容或主题,自动分配预先定义的类别标签。
3.5 文本挖掘(Text Mining)
文本挖掘是信息挖掘的一个研究分支,用于基于文本信息的知识发现。文本挖掘的准备工作由文本收集、文本分析和特征修剪三个步骤组成。目前研究和应用最多的几种文本挖掘技术有:文档聚类、文档分类和摘要抽取。
3.6 文本情感分析(Textual Affective Analysis)
情感分析是一种广泛的主观分析,它使用自然语言处理技术来识别客户评论的语义情感,语句表达的情绪正负面以及通过语音分析或书面文字判断其表达的情感等。
3.7 问答系统(Question Answering, QA)
自动问答是指利用计算机自动回答用户所提出的问题以满足用户知识需求的任务。不同于现有搜索引擎,问答系统是信息服务的一种高级形式,系统返回用户的不再是基于关键词匹配排序的文档列表,而是精准的自然语言答案。
3.8 机器翻译(Machine Translation,MT)
机器翻译是指利用计算机实现从一种自然语言到另外一种自然语言的自动翻译。被翻译的语言称为源语言(source language),翻译到的语言称作目标语言(target language)。
机器翻译研究的目标就是建立有效的自动翻译方法、模型和系统,打破语言壁垒,最终实现任意时间、任意地点和任意语言的自动翻译,完成人们无障碍自由交流的梦想。
3.9 自动摘要(Automatic Summarization)
自动文摘(又称自动文档摘要)是指通过自动分析给定的一篇文档或多篇文档,提炼、总结其中的要点信息,最终输出一篇长度较短、可读性良好的摘要(通常包含几句话或数百字),该摘要中的句子可直接出自原文,也可重新撰写所得。
根据输入文本的数量划分,文本摘要技术可以分为单文档摘要和多文档摘要。
在单文档摘要系统中,一般都采取基于抽取的方法。而对于多文档而言,由于在同一个主题中的不同文档中不可避免地存在信息交叠和信息差异,因此如何避免信息冗余,同时反映出来自不同文档的信息差异是多文档文摘中的首要目标,而要实现这个目标通常以为着要在句子层以下做工作,如对句子进行压缩,合并,切分等。另外,单文档的输出句子一般是按照句子在原文中出现的顺序排列,而在多文档摘要中,大多采用时间顺序排列句子,如何准确的得到每个句子的时间信息,也是多文档摘要需要解决的一个问题。
3.10 语音识别(Speech Recognition)
语言识别指的是将不同语言的文本区分出来。其利用语言的统计和语法属性来执行此任务。语言识别也可以被认为是文本分类的特殊情况
4、自然语言处理基本点
4.1 语料库(Corpus)
语料库中存放的是在语言的实际使用中真实出现过的语言材料;语料库是以电子计算机为载体承载语言知识的基础资源;真实语料需要经过加工(分析和处理),才能成为有用的资源。
4.2 中文分词(Chinese Word egmentation)
(1)中文分词指的是将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。
(2)现有的分词方法可分为三大类:基于字符串匹配的分词方法、基于理解的分词方法、基于统计的分词方法和基于深度学习的中文分词。推荐
(3)比较流行的中文分词工具:jieba、StanfordNLP、HanLP、SnowNLP、THULAC、NLPIR
4.3 词性标注(Part-of-speech tagging)
(1)词性标注是指为给定句子中的每个词赋予正确的词法标记,给定一个切好词的句子,词性标注的目的是为每一个词赋予一个类别,这个类别称为词性标记(part-of-speech tag),比如,名词(noun)、动词(verb)、形容词(adjective)等。
(2)词性标注是一个非常典型的序列标注问题。最初采用的方法是隐马尔科夫生成式模型, 然后是判别式的最大熵模型、支持向量机模型,目前学术界通常采用的结构是感知器模型和条件随机场模型。近年来,随着深度学习技术的发展,研究者们也提出了很多有效的基于深层神经网络的词性标注方法。
4.4 句法分析(Parsing)
(1)基于规则的句法结构分析
(2)基于统计的语法结构分析
4.5 词干提取(Stemming)
词干提取是将词语去除变化或衍生形式,转换为词干或原型形式的过程。词干提取的目标是将相关词语还原为同样的词干。
4.6 词形还原(Lemmatization)
词形还原是将一组词语还原为词源或词典的词目形式的过程。
4.7 停用词过滤
停用词过滤是指在文本中频繁出现且对文本信息的内容或分类类别贡献不大甚至无贡献的词语,如常见的介词、冠词、助词、情态动词、代词以及连词等。
4.8 词向量化(Word Vector)
词向量化是用一组实数构成的向量代表自然语言的叫法。这种技术非常实用,因为电脑无法处理自然语言。词向量化可以捕捉到自然语言和实数间的本质关系。通过词向量化,一个词语或者一段短语可以用一个定维的向量表示。(word2vec)
from gensim.models import Word2Vec
4.9 命名实体消歧(Named Entity Disambiguation)
命名实体消岐是对句子中的提到的实体识别的过程。
例如,对句子“Apple earned a revenue of 200 Billion USD in 2016”,命名实体消岐会推断出句子中的Apple是苹果公司而不是指一种水果。一般来说,命名实体要求有一个实体知识库,能够将句子中提到的实体和知识库联系起来。
4.10 命名实体识别(named entity recognition)
命名实体识别是识别一个句子中有特定意义的实体并将其区分为人名,机构名,日期,地名,时间等类别的任务。
三种主流算法:CRF,字典法和混合方法
5、特征处理
5.1 特征提取(Feature Extraction)
特征提取是指将机器学习算法不能识别的原始数据转化为算法可以识别的特征的过程。
举例(文本分类特征提取步骤):
(1)对训练数据集的每篇文章,我们进行词语的统计,以形成一个词典向量。词典向量里包含了训练数据里的所有词语(假设停用词已去除),且每个词语代表词典向量中的一个元素。
(2)在经过第一步的处理后,每篇文章都可以用词典向量来表示。这样一来,每篇文章都可以被看作是元素相同且长度相同的向量,不同的文章具有不同的向量值。这也就是表示文本的词袋模型(bag of words)。
(3)针对于特定的文章,如何给表示它的向量的每一个元素赋值呢?最简单直接的办法就是0-1法了。简单来说,对于每一篇文章,我们扫描它的词语集合,如果某一个词语出现在了词典中,那么该词语在词典向量中对应的元素置为1,否则为0。
5.2 特征选择( Feature Selection)
当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。特征选择是指去掉无关特征,保留相关特征的过程,也可以认为是从所有的特征中选择一个最好的特征子集。特征选择本质上可以认为是降维的过程。
from sklearn.feature_extraction.text import TfidfVectorizer
5.3 降维(Dimension Reduction)
6、模型选择
6.1 马尔可夫模型、隐马尔可夫模型、层次化隐马尔可夫模型、马尔可夫网络
(1)应用:词类标注、语音识别、局部句法剖析、语块分析、命名实体识别、信息抽取等。应用于自然科学、工程技术、生物科技、公用事业、信道编码等多个领域。
(2)马尔可夫链:在随机过程中,每个语言符号的出现概率不相互独立,每个随机试验的当前状态依赖于此前状态,这种链就是马尔可夫链。
(3)多元马尔科夫链:考虑前一个语言符号对后一个语言符号出现概率的影响,这样得出的语言成分的链叫做一重马尔可夫链,也是二元语法。二重马尔可夫链,也是三元语法,三重马尔可夫链,也是四元语法
6.2 条件随机场(CRF)
(1)条件随机场用于序列标注,中文分词、中文人名识别和歧义消解等自然语言处理中,表现出很好的效果。原理是:对给定的观察序列和标注序列,建立条件概率模型。条件随机场可用于不同预测问题,其学习方法通常是极大似然估计。
(2)条件随机场模型也需要解决三个基本问题:特征的选择、参数训练和解码。
6.3 贝叶斯网络
贝叶斯网络又称为信度网络或信念网络(belief networks),是一种基于概率推理的数学模型,其理论基础是贝叶斯公式。
6.4 最大熵模型
7、NLP常用工具
(1)Anaconda
Anaconda是一个用于科学计算的Python开发平台,支持 Linux,Mac和Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本Python并存、切换以及各种第三方包安装问题。Anaconda利用conda命令来进行package和environment的管理,并且已经包含了Python和相关的配套工具。Anaconda集成了大量的机器学习库以及数据处理必不可少的第三方库,比如NumPy,SciPy,Scikit-Learn以及TensorFlow等。
(2)Scikit-learn
Scikit-learn是广受欢迎的入门级机器学习库,包含大量的机器学习算法和特征提取实现,使用非常简便。Scikit-learn实现的是浅层学习算法,神经网络仅实现了多层感知机。
(3)TensorFlow
TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,可被用于语音识别或图像识别等多项机器学习和深度学习领域。
(4)Keras
Keras是一个高级别的Python神经网络框架,能在TensorFlow或者 Theano 上运行。Keras的作者、谷歌AI研究员Francois Chollet宣布了一条激动人心的消息,Keras将会成为第一个被添加到TensorFlow核心中的高级别框架,这将会让Keras变成Tensorflow的默认API。
(5)Gensim
Gensim是一款开源的第三方Python工具包,用于从原始的非结构化的文本中,无监督地学习到文本隐层的主题向量表达。它支持包括TF-IDF,LSA,LDA,和word2vec在内的多种主题模型算法,支持流式训练,并提供了诸如相似度计算,信息检索等一些常用任务的API接口。
(6)NLTK
在NLP领域中,NLTK是最常使用的一个Python库。
(7)Jieba
Jieba,结巴分词是最受欢迎的中文分词工具。
8、NLP语言模型
(1)词的独热表示(one-hot representation)
(2)Bag of Words
(3)Bi-gram 和 N-gram
(4)词的分布式表示(distributed representation)
(5)共现矩阵(Cocurrence martrix)
(6)神经网络语言模型(Neural Networ Language model,NNLM)
(7)word2vec
连续词袋模型(Continuous Bag of Words,CBOW)
Skip-Gram模型
9、快速入门NLP方法
(1)认真看完一本NLP相关的书,坚持看完一部视频。
(2)看这两年相关方向的综述论文,然后看一些经典的论文和最新论文。
(3)独立实现一个小型的自然语言处理项目。
(4)可以在Github上找到很多相关的开源代码,选一个自己感兴趣的方向进行研究。
10、自然语言处理学习资料
大爷赏个脸?
以上是关于NLP自然语言处理的主要内容,如果未能解决你的问题,请参考以下文章