当前位置:   article > 正文

自然语言处理-基础篇

自然语言处理-基础篇

一、认识自然语言处理专用包

1、nltk :是自然自然语言处理专用包,即Natural Language Toolkit 用于树形结构的遍历,定义文法、语法等。安装pip install nltk

2、Gensim :从文档中提取语义主题,包含了很多非监督算法,如TF/IDF 潜在语义分析LSA(Latent Semantic Analysis)、隐含狄利克雷分布LDA(Latent Dirichlet Allocation,LDA)#著名的LDA:隐含狄利克雷分布(Latent Dirichlet Allocation,LDA),是一种主题模型(topic model),它可以将文档集中每篇文档的主题按照概率分布的形式给出。#、层次狄利克雷函过程(Hierarchical Dirichlet Allocation)HDP等 #层次狄利克雷过程就是说在我们做LDA之前我们要先确定主题的数量,那怎么确定呢?其中一个方法就是用层次狄利克雷过程来自动推理出主题的个数。这个主题的个数本来是要通过人工来设定的,人工就有什么缺陷?假设给你1G的样本,给你1gb的txt文件,你也不知道这里面到底有多少主题,因为这个数据量太大了,人是没有办法处理的。所以用层次狄利克雷过程自动推出主题个数,然后配合LDA模型关键的参数就是主题的个数,注意LDA需要配置的参数特别少,其中一个重要的参数就是主题的个数,其他参数不配置也能实现主题或者文本的分类任务#。Gensim支持Word2Vec(这个Word2Vec是用的非常广的,就是做自然语言处理我们要把每个词转换为向量,gensim是支持word2vec的,他的效率也是非常高的,他占用的内存是非常少的)、dos2vec等
#Gensim比nltk要高级一点。安装较为复杂 pip install gensim 或进入https://www.lfd.uci.edu/~gohlke/pythonlibs/#gensim 下载这个文件

3、tensorflow :市场占有率最高的深度学习包,用于卷积神经网络、递归神经网络、聊天机器人,包括词向量可以用gensim也可以tensorflow来实现。tensorflow是谷歌开发的第二套人工智能学习系统,它可以用作语音识别、图像处理、机器学习和深度学习领域。tensorflow是采用数据流图(data flow graphs),用于数值计算的开源软件库。节点(Nodes)在图中表示数学操作,图中的线表示在节点间相互联系的多维数据数组,也就是张量(tensor),张量可以是多维的。他的架构可以在多种平台上展开计算,比如一个或多个cpu\gpu,而且是多GPU分布式计算,它还可以和spark进行集成、服务器、支持移动设备(手机端)。 安装:pip install tensorflow 或者安装二级版本(可以调试的版本):pip install tf-nightly -gpu/cpu 可6选是否支持GPU

4、jieba:是广泛使用的中文分词工具,有三种分词模式:精确模式、全模式、搜索引擎模式;返回词语在原文中的位置;加入自定义字典,强制把字典里的词分出来。
项目地址:github.com/fxsjy/jieba

5、Standford NLP:支持中文,可以给出基本的词性,支持语法形式、字词依赖、指明情绪等。分词的准确性拿过世界第一名(2016、2015)。支持命名实体识别、情绪分类
Standford NLP介绍:1)一个集成的语言分析工具集;2)进行快速、可靠的任意文本分析;(支持的语言比较多)3)整体的高质量的文本分析;4)支持多种主流语言;(原生语言是JAVA,可以有python调它)5)多种编程语言的易用接口;6)方便的简单的部署web服务。安装步骤:pip install stanfordcorenlp
~例:#命名实体识别ner输出(例)nlp.ner(line):(‘解密’,‘O’),(‘朱利安阿桑奇’,‘PERSON’),(‘英国’,‘COUNTRY’)(‘中毒’,‘COUSE_OF_DEATH’)(‘大使馆’,‘FACILITY’) O是不需要的,为others指不在我们规定的类别里(有人名、时间、机构名、组织名、国家等),PERSON就是人名
#词性标注pos_tag输出(例)nlp.pos_tag(line):(‘维基’,‘NN’),(‘解密’,‘VV’),(‘网站’,‘NN’)(‘创始人’,‘NN’),(‘朱利安阿桑奇’,‘NR’),(‘被’,‘SB’),(‘罚’,‘VV’),(‘断’,‘VV’),(‘网后’,‘NN’) NN是名词,VV是动词,P是介词

6、hanlp:是一系列模型与算法组成的java工具包,有功能完善、性能高效、架构清晰、语料时新、可自定义的特点。功能:中文分词、词性标注、命名实体识别、依存句法分析、关键词提取、新词发现、短语提取、自动摘要、文本分类、拼音简繁

二、自然语言处理项目步骤

1、中文分词:Chinese Word Segmentation(CWS) 是指将一个汉字序列切分成一个一个单独的词。分词就是将连续的字序列按照一定的规范重新组合成序列的过程。 中文分词是其他中文信息处理的基础,搜索引擎、机器翻译(MT)、语音合成、自动分类、自动摘要、自动校对等等,都需要用到分词。
注:只有分完词后才能进行下一步的其他词的处理,比如说提取关键词,过滤“的”这种噪声等等。

2、词性标注:(Part-of-Speech tagging或POS tagging),又称词类标注或者简称标注,是指分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。在汉语中,词性标注比较简单,因为汉语词汇词性多变的情况比较少见,大多数词语只有一个词性,或者出现频次最高的词性远远高于第二位的词性。
~词语只有一个词性,或者出现频次最高的词性远远高于第二位的词性。据说,只选取最高频词性,即可实现80%准确率的中文词性标注程序。##当然做NLP工程师,80%准确率是没法用的##

3、命名实体识别:Named Entity Recognition (NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。一般来说,命名实体识别的任务就是识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、时间、日期、货币和百分比)命名实体

4、TextRank关键词抽取:来自jieba
textrank算法实战:
#encoding=utf8
from jieba import analyse
textrank = analyse.textrank

5、依存句法分析:依存语法 (Dependency Parsing, DP) 通过分析语言单位内成分之间的依存关系揭示其句法结构。 直观来讲,依存句法分析识别句子中的“主谓宾”、“定状补”这些语法成分,并分析各成分之间的关系。做聊天机器人和招聘行业:用依存句法分析就能分析处理人是谁,做了什么事。招聘是分析出核心谓词,例如主导、代理了XXX,我们希望招一个架构师
~~依存句法分析标注关系 (共14种) 及含义如下,关系类型 Tag Description Example
主谓关系 SBV subject-verb 我送她一束花 (我 <– 送)
动宾关系 VOB 直接宾语,verb-object 我送她一束花 (送 –> 花)
间宾关系 IOB 间接宾语,indirect-object 我送她一束花 (送 –> 她)
前置宾语 FOB 前置宾语,fronting-object 他什么书都读 (书 <– 读)
兼语 DBL double 他请我吃饭 (请 –> 我)
定中关系 ATT attribute 红苹果 (红 <– 苹果)
状中结构 ADV adverbial 非常美丽 (非常 <– 美丽)
动补结构 CMP complement 做完了作业 (做 –> 完)
并列关系 COO coordinate 大山和大海 (大山 –> 大海)
介宾关系 POB preposition-object 在贸易区内 (在 –> 内)
左附加关系 LAD left adjunct 大山和大海 (和 <– 大海)
右附加关系 RAD right adjunct 孩子们 (孩子 –> 们)
独立结构 IS independent structure 两个单句在结构上彼此独立
核心关系 HED head 指整个句子的核心

6、语义依存分析 (Semantic Dependency Parsing, SDP): 分析句子各个语言单位之间的语义关联,并将语义关联以依存结构呈现。使用语义依存刻画句子语义,好处在于不需要去抽象词汇本身,而是通过词汇所承受的语义框架来描述该词汇,而论元的数目相对词汇来说数量总是少了很多的。语义依存分析目标是跨越句子表层句法结构的束缚,直接获取深层的语义信息。 例如以下三个句子,用不同的表达方式表达了同一个语义信息,即张三实施了一个吃的劢作,吃的动作是对苹果实施的。但是我们用简单的TFIDF(也是大部分公司用的),这里面三句话的词不一样,那么三个句子的相似度可能会漂移,这三个句子的词不一样。但是用语义依存分析 这三个句子就是一样的。
依存句法分析是浅层的分析,语义依存分析是深层的分析。
语义依存分析不受句法结构的影响,将具有直接语义关联的语言单元直接连接依存弧并标记上相应的语义关系。这也是语义依存分析不句法依存分析的重要区别。
语义依存关系分为三类,分别是主要语义角色,每一种语义角色对应存在一个嵌套关系和反关系;事件关系,描述两个事件间的关系;语义依附标记,标记说话者语气等依附性信息
例如:关系类型 Tag Description Example 举例
• 施事关系 Agt Agent 我送她一束花 (我 <-- 送) #送这个动作的施加者是我
• 当事关系 Exp Experiencer 我跑得快 (跑 --> 我) #跑是我担当的
• 感事关系 Aft Affection 我思念家乡 (思念 --> 我) #思念是一种感觉
• 领事关系 Poss Possessor 他有一本好读 (他 <-- 有) #他领受了这个有的动作
• 受事关系 Pat Patient 他打了小明 (打 --> 小明) #吃苹果,吃的动作被苹果接受了
• 客事关系 Cont Content 他听到鞭炮声 (听 --> 鞭炮声) #鞭炮声是客观的,听到了
• 成事关系 Prod Product 他写了本小说 (写 --> 小说) #写 小说 是完成了一件事情

7、名词短语块挖掘:举个例子,有些名词是要进行合并的。动词用VP表示,名词用NP表示,O是others。名词块为什么要合并?黄金珠宝营业员如果分成三个词,就得不到完整的意思;假设销售总监如何不合并就分词分为两个词了,如果不合并就不能理解意思。有的也合并了,比如化妆品的招商工作/NP,虽然中间有个的,要是分词的话可能有4个词,要是拆分成4个词,句子也 不好理解。合并后就是句子的最小单元。这里有个chunking,比如黄金珠宝营业员,营业员是核心词,要把它前面的定语的意思合并掉。这是自然语言处理中必用的。

8、语法解析:在自然语言学习过程中,每个人一定都学过语法,例如句子可以用主语、谓语、宾语来表示。在自然语言的处理过程中,有许多应用场景都需要考虑句子的语法,因此研究语法解析变得非常重要。
语法解析有两个主要的问题,其一是句子语法在计算机中的表达不存储方法,以及语料数据集;其二是语法解析的算法。
对于第一个问题,我们可以用树状结构图来表示,S表示句子;NP、VP、PP是名词、动词、介词短语(短语级别);N、V、P分别是名词、动词、介词。
在这里插入图片描述
9、N-GRAM:是基于一个假设,第n个词出现与前n-1个词相关,而与其他任何词不相关。(这也是隐马尔可夫当中的假设。)整个句子出现的概率就等于各个词出现的概率乘积。各个词的概率可以通过语料中统计计算得到。假设句子T是有词序列w1,w2,w3…wn组成,用公式表示N-Gram语言模型如下:
P(T)=P(w1)*p(w2)*p(w3)***p(wn)=p(w1)*p(w2|w1)*p(w3|w1w2)***p(wn|w1w2w3…)
#p(w2|w1)是指第二个词w2出现的概率是第一个词出现的条件概率的情况下。
一般常用的N-Gram模型是Bi-Gram和Tri-Gram。分别用公式表示如下:#两个词或者三个词
• Bi-Gram: P(T)=p(w1|begin)*p(w2|w1)*p(w3|w2)***p(wn|wn-1)
• Tri-Gram: P(T)=p(w1|begin1,begin2)*p(w2|w1,begin1)*p(w3|w2w1)***p(wn|wn-1,wn-2)
注意上面概率的计算方法:P(w1|begin)=以w1为开头的所有句子/句子总数;p(w2|w1)=w1,w2同时出现的次数/w1出现的次数。以此类推。
~~N-Gram(有时也称为N元模型)是自然语言处理中一个非常重要的概念,通常在NLP中,人们基于一定的语料库,可以利用N-Gram来预计或者评估一个句子是否合理。
N-gram对中文词性标注(part of speech, POS)、中文分词(Word Segmentation)有很好的效果。中文分词和POS是中文文本分析中非常重要的一环,因此在此作为N-gram的应用简要介绍。此外,基于N-gram还出现了更多有价值的语言模型,如NNLM、CBOW等。
一般词性标注和中文分词都是我们自己做,因为在特定领域的用通用的效果很差。而N-gram是可以应用到词性标注和中文分词的。

10、TF-IDF算法:(term frequency–inverse document frequency)用以评估字词对于一个文件集其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,随着它在语料库中出现的频率下降。 #假设一个词在一个简历出现的频率较高,但是在整个语料库出现频率较低,那么这个词就很重要;如果在整个语料库中出现的概率也高,比如“的”,那么这个词就不重要。
• 词频 (term frequency, TF) 词语在文件中出现的次数,一般进行归一化,防止长文件数字过大。
• 逆向文件频率 (inverse document frequency, IDF) 是一个词语普遍重要性的度量。总文件数除以包含该词语文件数,再将得到的商取对数。 #总文件数就是一个语料库有多少份文件,就是有多少份简历。
• 结论:在某特定文件内的高频率词语,但是该词语在整个文件集合中在较少文件中出现,TF-IDF值较高。
#公式:TF和IDF本来是不同的概念,但是发现他们两在一起很有效,所以就乘起来。这也是以后遇到类似的指标可以如此操作。
在这里插入图片描述
11、 词向量:自上世纪90年代开始,特征空间模型就应用于分布式语言理解中。在当时,许多模型用连续型的表征来表示词语,包括潜在语义分析(Latent Semantic Analysis)和潜在狄利克雷分配(Latent Dirichlet Allocation)模型。这篇文章详绅介绍了词向量方法在那个阶段的发展。 Bengio等人在2003年首先提出了词向量的概念,当时是将其与语言模型的参数一起训练得到的。Collobert和Weston则第一次正式使用预训练的词向量。Collobert和Weston的那篇里程碑式的论文A unified architecture for natural language processing不仅将词向量方法作为处理下游任务的有效工具,而且还引入了神经网络模型结构,为目前许多方法的改进和提升奠定了基础。
词向量的真正推广要归因于Mikolov等人于2013年开发的Word2vec,word2vec可以训练和使用词向量。在2014年,Pennington等人发布了GloVe,这是一套预训练得到的完整词向量集,它标志着词向量方法已经成为了NLP领域的主流。
词向量方法是无监督式学习的少数几个成功应用之一。它的优势在于不需要人工标注语料,直接使用未标注的文本训练集作为输入。输出的词向量可以用于下游的业务处理。
一般来说,神经网络将词表中的词语作为输入,输出一个低维度的向量表示这个词语,然后用反向传播的方法不断优化参数。输出的低维向量是神经网络第一层的参数,这一层通常也称作Embedding Layer。生成词向量的神经网络模型分为两种,一种是像word2vec,这类模型的目的就是生成词向量,另一种是将词向量作为副产品产生,两者的区别在于计算量不同。若词表非常庞大,用深层结构的模型训练词向量需要许多计算资源。这也是直到2013年词向量才开始被广泛用于NLP领域的原因。计算复杂度是使用词向量方法需要权衡的一个因素。

12、Word2vec:NLP 里面,最细粒度的是词语,词语组成句子,句子再组成段落、篇章、文档。所以处理 NLP 的问题,首先就要拿词语开刀。举个简单例子,判断一个词的词性,是动词还是名词。用机器学习的思路,我们有一系列样本(x,y),这里 x 是词语,y 是它们的词性,我们要构建 f(x)->y 的映射,但这里的数学模型 f(比如神经网络、SVM)只接受数值型输入,而 NLP 里的词语,是人类的抽象总结,是符号形式的(比如中文、英文、拉丁文等等),所以需要把他们转换成数值形式,或者说——嵌入到一个数学空间里,这种嵌入方式,就叫词嵌入(word embedding),而 Word2vec,就是词嵌入( word embedding) 的一种。
• Word2vec 的Skip-gram 和 CBOW 模型
如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做Skip-gram 模型
而如果是拿一个词语的上下文输入,来预测这个词语本身,则是CBOW 模型
• CBOW 和Skip-gram 模型迭代的方法
目前基于迭代的方法获取词向量大多是基于语言模型的训练得到的,对于一个合理的句子,希望语言模型能够给予一个较大的概率,同理,对于一个不合理的句子,给予较小的概率评估。
深入理解Word2vec算法
Hierarchical softmax
#典型的3层神经网络,一般的神经元层在projection layer会放一个激活函数,但是这里没有放入激活函数,因为激活函数是一个非线性函数,比如sigmoid,我们这里是简单的相加这是一个不同之处。这里的输出层是层次softmax的话就是一个树,和普通的神经网络不同,它是一个平的,比如在alexnet、vgg它预测一个1000图片的类别,输出的是一个1000维的向量,并没有层次关系。在我们这里,层次是一个非监督的办法。这里层次的树就把非监督学习巧妙的转化成监督学习,同时它不需要标注样本。最后的输出就是建设一个哈夫曼树。
• 哈夫曼树是一种带权路径长度最短的二叉树,也称为最优二叉树。每一个叶子节点比如D,都带权重,空心的圆是没有权重的,因为它是由下面的叶子节点构成的;路径是根节点,假设根节点的长度是0,到下一层的路径长度是2。和之前的神经网络语言模型相比,霍夫曼树的所有内部节点就类似之前神经网络隐藏层的神经元,其中,根节点的词向量对应我们的投影后的词向量,而所有叶子节点就类似于之前神经网络softmax输出层的神经元,叶子节点的个数就是词汇表的大小。在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。

(未完待续)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/991414
推荐阅读
相关标签
  

闽ICP备14008679号