1-NLP基础-知识点

1.CRF条件随机场

1.1HMM回顾

在这里插入图片描述
HMM即隐马尔可夫模型,它是处理序列问题的统计学模型,描述的过程为:由隐马尔科夫链随机生成不可观测的状态随机序列,然后各个状态分别生成一个观测,从而产生观测随机序列。在这里插入图片描述
在这里插入图片描述
HMM假设当前状态仅和前一个状态有关,也就是具有一阶马尔可夫性质,但是在很多场景中,模型不仅仅需要考虑前一个状态的信息,也可能需要后一个状态的信息,因此需要模型提出更多的假设条件,也就是引入图模型(当前状态和相连状态都有关)+条件模型(当前状态和观测值有关)=条件随机场。比如:”我爱中国”,结构更加复杂,信息更加丰富。
随机场是由若干个位置组成的整体,当给每一个位置中按照某种分布随机赋予一个值之后,其全体就叫做随机场
马尔可夫随机场(Markov Random Field)
在这里插入图片描述

1.2CRF原理讲解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
• CRF和HMM的主要区别:
• HMM优化的是求解p(x,y)联合概率,CRF优化的是求解p(y|x)条件概率;
• HMM中有向无环图,CRF中是无向图;
• HMM中是上一个时刻影响下一个时刻的状态,CRF中是上下两个时刻的状态会影响当前时刻的状态值。
• CRF特征函数/特征模板参考:
https://blog.csdn.net/asdfsadfasdfsa/article/details/81073522?depth_1-utm_source=distribute.pc_relevant.nonetask&utm_source=distribute.pc_relevant.nonetask

1.3CRF应用场景理解

CRF应用场景:
• 中文分词
• 词性标注
• 命名实体识别
• 语义角色标记
• 事件提取
• 等等…

2.NLP基础一

2.1nlp概述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
NLP常用基本工具
• jieba
• https://github.com/fxsjy/jieba
• HanLP
• http://hanlp.com/
• https://github.com/hankcs/pyhanlp

• gensim
• https://radimrehurek.com/gensim/
• jiagu

• https://github.com/ownthink/Jiagu
• ltp
• http://ltp.ai/demo.html
• https://github.com/HIT-SCIR/ltp

2.2分词

分词:
通过某种技术将连续的文本分隔成更具有语言语义学上意义的词。这个过程就叫做分词。
• Python中汉字分词包:jieba
• 安装方式: pip install jieba
• Github:https://github.com/fxsjy/jieba
“Jieba” Chinese text segmentation: built to be the best Python
Chinese word segmentation module.
• Jieba常用的一种Python语言的中文分词和词性标注工具;算法基于前缀词典实现高效的词图扫描,生成句子中汉字所有可能成词情况所构成的有向无环图,然后采用动态规划查找最大概率路径,找出基于词频的最大切分组合;对于未登录词/新词的中文分词和词性标注问题使用HMM的Viterbi算法来进行构造。
分词模式:
精确模式
• jieba.cut(str)
• 试图将句子最精确地切开,适合文本分析;
全模式
• jieba.cut(str,cut_all=True)
• 把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
搜索引擎模式
• jieba.cut_for_search(str)
• 在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。
基础功能:
• 1. 分词
前缀字典匹配、HMM模型Viterbi算法
• 2. 自定义词典添加
• 3. 关键词抽取
TF-IDF、TextRank
• 4. 词性标注
HMM模型Viterbi算法
• 5. 并行分词
当前版本不支持windows
常规的分词技术:
• 规则分词
• 通过维护词典,通过切分语句的时候,将语句的每个字符串与词表中的词进行逐一匹配,找到则切分,否则不予切分。主要包括:
• 正向最大匹配法
• 逆向最大匹配法
• 双向最大匹配法
• 统计分词
• 通过统计各个词在训练文本中出现的次数得到词的可信度,当连续的各个字出现的频度超过某个值的时候,就可以认为这个连续的各个字属于一个词。主要包括:
• n-gram模型
• HMM、CRF
• 混合分词
正向最大匹配法(Maximum Match Method)
• 假定词典中最长词有m个字符;
• 从待分词文本中从左往右获取m个字符作为匹配字段;
• 和词典进行匹配,若匹配成功,则将这个匹配字段作为词切分出来,若匹配不成功,那么将匹配字段的最后一个字符删除,形成新的匹配字段,重新进行匹配;
• 重复上述操作完成所有词的切分。
在这里插入图片描述
• 逆向最大匹配法(Reverse Maximum Match Model)
• 假定词典中最长词有m个字符;
• 从待分词文本中从右往左获取m个字符作为匹配字段;
• 和词典进行匹配,若匹配成功,则将这个匹配字段作为也词切分出来,若匹配不成功,那么将匹配字段的第一个字符删除,形成新的匹配字段,重新进行匹配;
• 重复上述操作完成所有词的切分。
• NOTE:由于汉语的偏正结构偏多,采用从后往前的逆向最大匹配法可以适当的提高分词的精度。
在这里插入图片描述
双向最大匹配法(Bi-directction Matching Method)
• 将正向最大匹配法得到的分词结果和逆向最大匹配法得到的结果进行比较,按照最大匹配原则,选取次数切分最少的作为结果。
• 90%左右的句子结果是一致的;9%左右的句子结果不一致,但是其中一个一定是正确的(歧义检测成功);只有1%左右的句子是不对的。
• 句子:”长沙市长岳高速出现事故”,逆向最大匹配法结果: “长沙市 长岳高速 出现 事故”(4),正向最大匹配法结果: “长沙市长 岳 高速 出现 事故”(5),选择切分次数少的作为最终分词结果: “长沙市 长岳高速 出现事故”
NLP基础_分词_N-Gram
• N-Gram模型是一种基于统计的模型,又称为语言模型,基本算法思想是将文本的内容按字符进行大小为N的窗口滑动,形成长度为N的字符序列,每个字符序列称为Gram,然后进行统计操作。该模型是基于马尔可夫假设,也就是第T个词的出现只与前N-1个词相关,而和其它任何词都不相关。
• 语言模型在自然语言处理中占有重要的地位,在语音识别,机器翻译,汉语自动分词和句法分析等都有应用。因为这些模型都会有噪声,都会有几种不同的结果等着我们去选择,这时候就需要知道每种结果的概率,来帮助我们选择。
在这里插入图片描述
N-Gram模型的应用场景:
• 分词
• 中文分词消歧
• 输入法/关联词
• 文本相似度
• 机器翻译
N-Gram应用场景:分词
• 原文本:长沙市长岳高速出现事故
• 首先统计出训练集词典中各个字的频率;然后,对待切分文本的进行某种策略的切分,递归选择切分概率最大的子切分序列,最后回溯得到最大概率切分。
• eg:
• p1 = p(长沙市)*p(长岳高速出现事故)
• p2 = p(长沙市长)*p(岳高速出现事故)
• NOTE: 然后对于这四个子序列分别求解N-Gram对应的P(S)序列概率值在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.3新词发现

在这里插入图片描述
频率数:单词出现的频次数目;
凝固程度:凝固度是指一个新词单独出现的概率和其组合词出现概率的商值;当凝固度越高的时候,越表示属于一个单词。比如:词A、B组成词C,同时P©/(P(A)*P(B))的值非常大,那就表示词C是一个独立的词。
自由程度:左/右邻接词出现的概率除以当前单词的概率越小,表示当前单词独立出现的可能性越高,也就是可以认为是独立词。在这里插入图片描述

2.4词向量

在这里插入图片描述
Gensim属于一款开源的第三方Python工具包,用于从原始的非结构化的文本数据中,无监督的学习到文本隐层的主题向量表达形式,也即是词向量/文本向量转换;并且在向量转换的基础上提供了相似度计算、信息检索等功能的API。
语料(Corpus):一组原始文本集合,用于无监督训练文本主题的数据。在gensim中,corpus通常是一个可迭代对象;
向量(Vector):由一组文本特征构成的列表,是一段文本在Gensim中的内部表达;
稀疏向量(SparseVector):略去向量中多余的0元素。此时,向量中的每一个元素是一个(key,value)的元组;
模型(Model):定义了两个向量空间的转换。也就是将向量表达形式从某一种变量变成另外一种变量表达。
gensim:https://radimrehurek.com/gensim/index.html
gensim主要模型:
• models.ldamodel
• models.nmf
• models.tfidfmodel
• models.word2vec
• models.doc2vec
• models.fasttext
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
两个词向量之间的距离(例如,任意两个向量之间的L2范式距离或更常用的余弦距离)一定程度上表征了的词之间的语义关系;
• 例如,“椰子”和“北极熊”是语义上完全不同的词,所以它们
的词向量在一个合理的嵌入空间的距离将会非常遥远。但“厨房”和“晚餐”是相关的话,所以它们的词向量之间的距离会相对小。
• 但是哑编码、词袋法以及TF-IDF这些方式都不能达到这个效果,故提出了基于矩阵分解的主题模型算法以及基于神经网络的Word2Vec的词向量转换方式在这里插入图片描述

2.4.1Word2Vec

• 词向量方法是无监督学习的少数几个成功应用之一,优点在于不需要人工进行预料的标注,直接使用未标注的文本训练集作为输入,输出的词向量可以用于下游的业务处理。
• 词向量真正的推广是开始于2013年Mikolov开发出来的Word2Vec,2014年Pennington发布了GloVe,进一步让让词向量的应用成为NLP领域中的主流。
• NOTE: Word2Vec可以认为是应用最广泛的词向量转换技术。
• NOTE: https://www.cnblogs.com/iloveai/p/word2vec.html

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
• 生成词向量的神经网络模型分为两种,一种是类似Word2Vec的方式,这类模型的目的就是生成词向量,另一种是将词向量作为副产品产生,两者的区别在于计算量不同。若词表非常庞大,用深层结构的模型训练词向量需要许多计算资源。
Word2Vec和GloVe(Global Vectors for Word Representation)的目的是训练可以表示语义关系的词向量,它们能被用于后续的任务中;如果后续任务不需要用到语义关系,则按照此方式生成的词向量并没有什么用。另一种模型则根据特定任务需要训练词向量。当然,若特定的任务就是对语言建模,那么两种模型生成的词向量非常相似了
• Word2Vec(Efficient Estimation of Word Representations in Vector
Space)
• CBOW
• predicts the current word based on the context;
• Skip-Gram
• predicts surrounding words given the current word;在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述所说的Word2Vec是最原始的结构,在计算过程中需要计算所有单词(2m)和中心词之间的概率,比较耗时,所以在Word2Vec的论文(Efficient Estimation of Word Representations in Vector Space)中,作者Mikolov提出Hierarchical softmax(霍夫曼树,Soft)和Negativesampling(负样本采样)两种方法对Word2Vec的模型训练进行优化。这也是Word2Vec能够大量真正应用于NLP领域的主要原因(不需要依赖神经网络训练模型)。在这里插入图片描述
在这里插入图片描述
CBOW拓展…
Skip-Gram拓展…在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
• Word2Vec就是将稀疏的向量(OneHotEncode)转换为稠密的向量,
为什么要做这个转换呢?
• OneHotEncode之后的向量,维度是特别高的,并且所有词之间的距离是相同的,这样就存在两个问题:1. 维度太高,可能会出现维度爆炸的问题;2. 所有词之间的距离相同不符合现实情况。
• Word2Vec相比于哑编码,其实也存在缺点:向量的解释性不强。在这里插入图片描述
• Word2Vec和神经网络/NNLM有什么区别?
• NNLM是基于前N-1个单词来预测当前单词的思想来构建模型;Word2Vec-CBOW是基于上下文2N个单词来预测中心单词的思想来构建模型;Word2Vec -skip-gram是基于中心词预测上下文2N个单词的思想来构建模型。
• NNLM在预测当前中心单词的时候,是将前N-1个单词的向量concat拼接到一起;CBOW中是将上下文2N个单词的向量sum合并到一起。
• NNLM在基于最终的特征向量(concat合并后的向量)判断当前单词的概率值的时候,使用全连接方式;Word2Vec使用层次Softmax和负采样进行优
化,降低了计算量。
• CBOW和skip-gram这两种结构的区别?
• 训练速度上来讲,CBOW更新速度会稍微快一点。时间复杂度上来讲,CBOW近似O(V),skip-gram近似O(kV);V表示词汇表词汇数目,k表示skip-gram的上下文单词数目。
• 效果上来讲,skip-gram比CBOW的效果稍微好一点。skip-gram相比于CBOW对低频词的效果更好,skip-gram在大规模数据集上就可以学习更多的特征信息。
• skip-gram是当前中心词预测上下文单词,当前中心词是低频词还是高频词是没有区别的。
• CBOW基于上下文预测中心词,如果上下文中有高频词也有低频词,那么在预测中心词的时候,高频词的影响会更到,也就是反向更新的时候,对于高频词的更新会更加明显。
在这里插入图片描述
• 在企业中Word2Vec的应用方式一般如下:
• 1. 使用gensim训练Word2Vec,得到单词的词向量转换矩阵;
• 2. 在深度学习代码中,将gensim训练得到的词向量转换矩阵作为初始的变量引入网络结构中,对输入的单词id使用tf.nn.embedding_lookup提取对应的词向量,然后将词向量输入后续网络中,进行业务的处理。
• 3. 反向传播更新词向量矩阵参数。
• 小作业:
• 基于Word2Vec的思想,基于TensorFlow相关API实现CBOW+负采样以及skip-gram+负采样的训练及应用代码(获取对应单词的向量)。
• 要求:
• 代码结构清晰、条理要清晰。
• 训练数据:使用《人民的名义》这部小说。
• 提示:
• 负采样API:tf.nn.sampled_softmax_loss

2.4.2 Char2Vec

在这里插入图片描述

2.4.3 Doc2Vec

在这里插入图片描述
Doc2Vec PV-DM结构模型训练的时候,相当于在Word2Vec的CBOW结构基础上加入一个文档向量(Paragraph Vector)输入,这个文档向量就相当于表达的是文档的中心思想,那么和Word2Vec一样,进行模型训练后,不仅仅可以得到词向量,随着同一个文本中多次的窗口滑动,文档向量会被共享训练,那么到最终的时候,这个向量也就可以非常明确的表达这个文档的特征信息了。
• 训练完成后就可以得到各个单词的词向量以及训练数据的文档向量。
• Doc2Vec PV-DM结构模型的推理预测过程中,针对任意的新文档,产生对应文档向量的过程如下:
• 随机初始化当前新文档向量的值;
• 然后将文档向量以及单词向量作为数据输入,预测中心词或者下一个词(和训练过程一样),但是由于此时文档向量是随机初始化的,单词向量是训练好的(文档向量此时不能够体现文档特征信息,单词向量可以体现单词信息),那么就会导致预测出错;
• 构建损失函数,然后使用随机梯度下降的优化方式来更新文档向量值(NOTE: 其它参数/值是不会进行更新的)在这里插入图片描述

2.4.4FastText

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4.5 cw2vec

• cw2vec(Learning Chinese Word Embeddings with Stroke n-gramInformation)
• CCKS2018阿里健康团队中文电子病历命名实体识别评测任务冠军
• 思想:类似FastText的思想,利用中文汉字的笔画信息,使用N-Gram的的方式来提取中文汉字对应的高阶特征信息。
http://www.statnlp.org/wpcontent/
uploads/papers/2018/cw2vec/cw2vec.pdf
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
w2vec实现参考:https://github.com/zhang2010hao/cw2vec-pytorch

3.NLP基础二

3.1HanLPan简介及安装

在这里插入图片描述
• 安装过程:
• 1. 安装JDK1.8以上的版本,配置JAVA_HOME环境变量;
• 2. pip install pyhanlp==0.1.57安装PyHanLP;
• 3. 下载data-for-1.7.x.zip, 并将其解压放置在pyhanlp模块下的static文件夹下的data子文件夹中。
• 4. 进入Python命令行,执行import pyhanlp(自动下载配置相关资源);如果是网络原因,可以直接下载hanlp-1.7.x-release.zip解压后将文件放置在static文件夹下。
• 5. 配置pyhanlp(配置hanlp.properties)。
• NOTE: 下载路径:https://github.com/hankcs/HanLP/releases在这里插入图片描述
在这里插入图片描述

3.2词性标注

在这里插入图片描述
词性是词汇的基本语法属性。词性标注是在给定句子中判定每个词的语法范畴,确定其词性并加以标注的过程。
• 在中文词汇中,一个词语一般只有1到2个词性,并且其中一个词性的使用频率会远远大于另一个,所以词性标注最简单的方式是从语料库中统计每个词对应的高频词性,作为默认词性。
• 当前主流的词性标注手段和分词一样,是将句子的词性标注当做一个序列标注问题来解决,比如:HMM、CRF等。
在这里插入图片描述在这里插入图片描述

3.3命名实体识别

在这里插入图片描述
命名实体识别(Named Entity Recognition,NER),是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词、时间、货币等信息的提取识别。通常包括两部分:
• 实体边界识别
• 确定实体类别(人名、地名、机构名等)
• 常用的实现方式有:
• 基于规则的命名实体识别
• 基于序列标注统计的命名识别识别:CRF、HMM、RNN、LSTM等
• NER标注方法:
BIO标注法: I(Inside)、O(Outside)、B(Begin)
• I-xxx:在xxx类命名实体的内部(外开始外的所有位置);
• O:不属于实体;
• B-xxx:是xxx类命名实体的开始;
BIOES标注法:B(Begin)、I(Inside)、O(Outside)、E(End)、S(Single)
• B-xxx:是xxx类命名实体的开始;
• I-xxx:在xxx类命名实体的内部;
• O:不属于实体;
• E-xxx:在xxx类命名实体的结尾;
• S-xxx:单独属于xxx类命名实体。
在这里插入图片描述

3.4关系抽取

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.5 jiagu

在这里插入图片描述
在这里插入图片描述

3.6语法分析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.7 句法分析

在这里插入图片描述

在这里插入图片描述• http://www.hankcs.com/nlp/parsing/neural-network-based-dependency-parser.html
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值