NLP第九篇-句法分析
句法分析的基本任务是确定句子的 语法结构 或句子中 词汇之间的依存关系 。句法分析不是一个自然语言处理任务的最终目标,但它往往是实现最终目标的关键环节。
句法分析分为 句法结构分析 和 依存关系分析 两种。以获取整个句子的句法结构为目的的称为 完全句法分析 ,而以获得局部成分为目的的语法分析称为 局部分析 ,依存关系分析简称 依存分析 。
一般而言,句法分析的任务有三个:
判断输出的字符串是否属于某种语言
消除输入句子中词法和结构等方面的歧义
分析输入句子的内部结构,如成分构成、上下文关系等。
第二三个任务一般是句法分析的主要任务。
一般来说,构造一个句法分析器需要考虑两部分工作:一部分是语法的形式化表示和词条信息描述问题,形式化的语法规则构成了规则库,词条信息等由词典或同义词表等提供,规则库与词典或同义词表构成了句法分析的知识库;另一部分就是基于知识库的解析算法了。
语法形式化属于句法理论研究的范畴,目前在自然语言处理中广泛使用的是上下文无关文法(CFG)和基于约束的文法,后者又称合一文法。
简单的讲,句法结构分析方法可以分为基于规则的分析方法和基于统计的分析方法两大类。
基于规则的句法结构分析方法的基本思路是,由人工组织语法规则,建立语法知识库,通过条件约束和检查来实现句法结构歧义的消除。
根据句法分析树形成方向的区别,人们通常将这些方法划分为三种类型:自顶向下的分析方法,自底向上的分析方法和两者相结合的分析方法。自顶向下分析算法实现的是规则推导的过程,分析树从根结点开始不断生长,最后形成分析句子的叶结点。而自底向上分析算法的实现过程恰好想法,它是从句子符号串开始,执行不断规约的过程,最后形成根节点。
基于规则的语法结构分析可以利用手工编写的规则分析出输入句子所有可能的句法结构;对于特定领域和目的,利用有针对性的规则能够较好的处理句子中的部分歧义和一些超语法(extra-grammatical)现象。
但对于一个中等长度的输入句子来说,要利用大覆盖度的语法规则分析出所有可能的句子结构是非常困难的,而且就算分析出来了,也难以实现有效的消歧,并选择出最有可能的分析结果;手工编写的规则带有一定的主观性,还需要考虑到泛化,在面对复杂语境时正确率难以保证;手工编写规则本身就是一件大工作量的复杂劳动,而且编写的规则领域有密切的相关性,不利于句法分析系统向其他领域移植。
基于规则的句法分析算法能够成功的处理程序设计语言的编译,而对于自然语言的处理却始终难以摆脱困境,是因为程序设计语言中使用的知识严格限制的上下文无关文法的子类,但自然语言处理系统中所使用的形式化描述方法远远超过了上下文无关文法的表达能力;而且人们在使用程序设计语言的时候,一切表达方式都必须服从机器的要求,是一个人服从机器的过程,这个过程是从语言的无限集到有限集的映射过程,而在自然语言处理中则恰恰相反,自然语言处理实现的是机器追踪和服从人的语言,从语言的有限集到无限集推演的过程。
完全语法分析
基于PCFG的基本分析方法
基于概率上下文无关文法的短语结构分析方法,可以说是目前最成功的语法驱动的统计句法分析方法,可以认为是规则方法与统计方法的结合。
PCFG是CFG的扩展,举个例子:
PCFG
当然,同一个符号不同生成式的概率之和为1。NP是名词短语、VP是动词短语、PP是介词短语。
基于PCFG的句法分析模型,满足以下三个条件:
位置不变性:子树的概率不依赖于该子树所管辖的单词在句子中的位置
上下文无关性:子树的概率不依赖于子树控制范围以外的单词
祖先无关性:子树的概率不依赖于推导出子树的祖先节点
根据上述文法,『He met Jenny with flowers』有两种可能的语法结构:
而且我们可以通过将树中的所有概率相乘,得到两棵子树的整体概率,从中选择概率更大的子树作为最佳结构。
与HMM类似,PCFG也有三个基本问题:
给定一个句子W=w1w2…wn和文法G,如何快速计算概率P(W|G)
给定一个句子W=w1w2…wn和文法G,如何选择该句子的最佳结构?即选择句法结构树t使其具有最大概率
给定PCFG G和句子W=w1w2…wn,如何调节G的概率参数,使句子的概率最大
首先是第一个问题,HMM中我们用的是前向算法和后向算法来计算观察序列O概率,相似的,这里我们用的是内向算法和外向算法来计算P(W|G) 。
首先我们定义内向变量αij(A),与前向变量相似但又有不同,αij(A)即非终结符A推导出W中字串wiw(i+1)…wj的概率。那P(W|G)自然就等于α1n(S)了,S是起始符号,计算的就是由起始符号S推导出整个句子W=w1w2…wn的概率。
所以只要有αij(A)的递归公式就能计算出P(W|G),递归公式如下:
根据定义,αii(A)自然就等同于符号A输出wi的概率;而αij(A)的计算思路是,这个子串wiw(i+1)…wj可以被切成两部分处理,前一部分wiw(i+1)…wk由非终结符号B生成,后一部分wkw(k+1)…wj由非终结符号C生成,而BC由A生成。这样将概率依次相乘,即可将一个大问题划分为两个小问题处理,两个小问题又可以进一步划分直到不能划分为止,然后递归回来得到结果。
这里给一张内向变量计算方法示意图:
这个问题也可以用外向算法来解决。
首先定义外向变量,βij(A)是,初始符号S在推导出语句W=w1w2…wn的过程中,产生符号串w1w2…w(i-1)Aw(j+1)…wn的概率(隐含着A会生成wiw(i+1)…wj)。也就是说βij(A)是S推导出除了以A节点为根节点的子树以外的其他部分的概率。
《统计自然语言处理(第二版)》这本书里讲错了,这里我给出我自己的理解,书里给的算法步骤如下:
很明显的错误,初始化都把结果初始化了,那这个算法还算什么,直接等于1就完了呗。
这是作者对外向变量定义理解模糊的问题,上面给了外向变量的定义,里面有一句话『隐含着A会生成wiw(i+1)…wj』,那问题在于,A会生成wiw(i+1)…wj,这到底算是条件还是推论。
看这个算法的初始化的意思,说β1n(A),在A=S的时候,为1,不等于S为0,意思是什么?意思就是『隐含着A会生成wiw(i+1)…wj』这句话是条件,β1n(S)已经隐含了S生成W=w1w2…wn了,所谓的w1w2…w(i-1)Aw(j+1)…wn也就不存在了,只剩下一个S->S了,所以概率自然为1。
但是在第三步这个地方,作者理解成什么意思了呢?作者又把『隐含着A会生成wiw(i+1)…wj』这句话当成推论了,认为在β1n(S),里S会生成W=w1w2…wn是推论,那真是就正好了,要求的结果就是S生成W=w1w2…wn,这不就结束了吗,结果就导致了这个算法第一步初始化都把结果初始化了。
那我的理解是什么呢,通过这个公式计算出来的β1n(S),确实是正确的,意义实际上也是包含了『隐含着A会生成wiw(i+1)…wj』这句话是推论,但是右侧式子里由于不断递归而产生的β1n(S),是把『隐含着A会生成wiw(i+1)…wj』这句话当条件的,所以计算上没有问题。
我倾向于为第三步中的β1n(S)加一个星号,以表明意义的不同。
书中还给了个外向变量的计算方法示意图,我觉得也是莫名其妙:
他说βij(A)是这两种情况的概率和,这我们知道j比i大,那这图里这个k既比i小又比j大,这不是搞笑吗。只能说图上这俩C就不是一个C,k也不是一个k。
那我为什么会理解成一个呢,除了字母相同,他前面还这么讲『必定运用了形如B->AC或者B->CA的规则』、『运用B->AC或者B->CA两种规则的情况』,这明显就是给人以顺序交换的误解。
另外,还在内向变量的使用上前后不一,可以说这本书里对外向算法的讲解是非常失败的。而且对外向算法的计算仍然需要用到内向算法的递归,那真的直接用内向算法就好了,外向算法还要多定义变量。
然后是第二个问题,选择句子的最佳结构,也即给定一个句子W=w1w2…wn和文法G,
选定拥有最大概率的语法结构树。这一问题与HMM中类似,仍然采用动态规划的思想去解决。最后利用CYK算法去生成拥有最大概率的语法结构树。
第三个问题是给定PCFG G和句子W=w1w2…wn,如何调节G的概率参数,使句子的概率最大,与HMM相对的,PCFG这里采用的算法名叫内外向算法。与前后向算法相同,也属于一种EM算法,其基本思想是,首先给G的产生式随机地赋予一个概率值(满足归一化条件),得到文法G0,然后根据G0和训练数据,可以计算出每条规则使用次数的期望值,用期望值进行最大似然估计,得到语法G的新参数值,新的语法记作G1,然后循环执行该过程,G的参数概率将收敛于最大似然估计值。
PCFG只是一种特殊的上下文无关文法模型,根据PCFG的模型和句子,具体去对句子做语法分析,生成语法结构树,靠的是还是CYK算法。CYK算法是一个用来判定任意给定的字符串W是否属于一个上下文无关文法的算法。
基于PCFG的句法分析模型存在有许多问题,比如因为PCFG没有对词汇进行建模,所以存在对词汇信息不敏感的问题。因此人们提出了词汇化的短语结构分析器,有效的提升了基于PCFG的句法分析器的能力。
而且,我们上面也提到了PCFG的三个独立性假设,这也导致了规则之间缺乏结构依赖关系(就像HMM的三个假设也不完全合理一样),而在自然语言中,生成每个非终结符的概率往往是与其上下文结构有关系的,所以有人提出了一种细化非终结符的方法,为每个非终结符标注上其父节点的句法标记信息。
D Klein提出了带有隐含标记的上下文无关文法(PCFG with latent annotations,PCFG-LA),使得非终结符的细化过程可以自动进行,并且在使用EM算法优化时,为避免到达局部最优,对其进行了改进,提出了一种层次化的『分裂-合并』策略,以期获取一个准确并且紧凑的PCFG-LA模型。基于PCFG-LA的Berkeley Parser作为非词汇化句法分析器的代表,无论是性能表现还是运行速度,都是目前开源的短语结构分析器中最好的。其语法树如下图:
普通句法树与PCFG-LA句法树对照实例
这个x就是隐含标记,xi的取值范围一般是人为设定的,一般取1~16之间的整数。而且PCFG-LA也类似于HMM模型,原始非终结符对应HMM模型中的观察输出,而隐含标记对应HMM模型中的隐含状态。
浅层语法分析(局部语法分析)
由于完全语法分析要确定句子所包含的全部句法信息,并确定句子中各成分之间的关系,这是一项十分苦难的任务。到目前为止,句法分析器的各方面都难以达到令人满意的程度,为了降低问题的复杂度,同时获得一定的句法结构信息,浅层句法分析应运而生。
浅层语法分析只要求识别句子中的某些结构相对简单的独立成为,例如非递归的名词短语、动词短语等,这些被识别出来的结构通常称为语块(chunk)。
浅层句法分析将句法分析分解为两个主要子任务,一个是语块的识别和分析,另一个是语块之间的依附关系分析。其中,语块的识别和分析是主要任务。在某种程度上说,浅层句法分析使句法分析的任务得到了简化,同时也有利于句法分析系统在大规模真实文本处理系统中迅速得到应用。
基本名词短语(base NP)是语块中的一个重要类别,它指的是简单的、非嵌套的名词短语,不含有其他子项短语,并且base NP之间结构上是独立的。示例如下:
base NP识别就是从句子中识别出所有的base NP,根据这种理解,一个句子中的成分和简单的分为baseNP和非base NP两类,那么base NP识别就成了一个分类问题。
base NP的表示方法有两种,一种是括号分隔法,一种是IOB标注法。括号分隔法就是将base NP用方括号界定边界,内部的是base NP,外部的不属于base NP。IOB标注法中,字母B表示base NP的开端,I表示当前词语在base NP内,O表示词语位于base NP之外。
基于SVM的base NP识别方法
由于base NP识别是多值分类问题,而基础SVM算法解决的是二值分类问题,所以一般可以采用配对策略(pairwise method)和一比其余策略(one vs other method)。
SVM一般要从上下文的词、词性、base NP标志中提取特征来完成判断。一般使用的词语窗口的长度为5(当前词及其前后各两个词)时识别的效果最好。
基于WINNOW的base NP识别方法
WINNOW是解决二分问题的错误驱动的机器学习方法,该方法能从大量不相关的特征中快速学习。
WINNOW的稀疏网络(SNoW)学习结构是一种多类分类器,专门用于处理特征识别领域的大规模学习任务。WINNOW算法具有处理高维度独立特征空间的能力,而在自然语言处理中的特征向量恰好具有这种特点,因此WINNOW算法也常用于词性标注、拼写错误检查和文本分类等等。
简单WINNOW的基本思想是,已知特征向量和参数向量和实数阈值θ,先将参数向量均初始化为1,将训练样本代入,求特征向量和参数向量的内积,将其与θ比较,如果大于θ,则判定为正例,小于θ则判定为反例,将结果与正确答案作比较,依据结果来改变权值。
如果将正例估计成了反例,那么对于原来值为1的x,把它的权值扩大。如果将反例估计成了正例,那么对于原来值为1的x,把它的权值缩小。然后重新估计重新更改权重,直到训练完成。
这其实让我想到了LR算法,因为LR算法也是特征向量与参数向量的内积,最后将其送到Sigmoid函数中去拿到判定结果,然后大于05的为正例,小于05的为反例,实际上只要反过来,Sigmod函数输出05时候的输入就是WINNOW算法里的那个实数阈值θ。但是区别在于WINNOW算法只判定大小,不判定概率,而LR利用Sigmoid函数给出了概率。LR利用这给出的概率,通过使训练集的生成概率最大化来调整参数,而WINNOW则是直接朴素的错误情况来增大或缩小相关参数。目测LR因为使用了梯度下降,它的收敛速度要快于WINNOW,而WINNOW的优势则在于可以处理大量特征。
基于CRF的base NP识别方法
基于CRF的base NP识别方法拥有与SVM方法几乎一样的效果,优于基于WINNOW的识别方法、基于MEMM的识别方法和感知机方法,而且基于CRF的base NP识别方法在运行速度上较其他方法具有明显优势。
依存语法理论
在自然语言处理中,我们有时不需要或者不仅仅需要整个句子的短语结构树,而且要知道句子中 词与词之间的依存关系 。用词与词之间的依存关系来描述语言结构的框架成为依存语法,又称从属关系语法。利用依存语法进行句法分析也是自然语言理解的重要手段之一。
有人认为,一切结构语法现象可以概括为关联、组合和转位这三大核心。句法关联建立起词与词之间的从属关系,这种从属关系由 支配词 和 从属词 联结而成, 谓语中的动词是句子的中心并支配别的成分,它本身不受其他任何成分支配 。
依存语法的本质是一种结构语法,它主要研究以谓词为中心而构句时由深层语义结构映现为表层语法结构的状况及条件,谓词与体词之间的同现关系,并据此划分谓词的词类。
常用的依存于法结构图示有三种:
计算机语言学家J Robinson提出了依存语法的四条公理:
一个句子只有一个独立的成分
句子的其他成分都从属于某一成分
任何一个成分都不能依存于两个或两个以上的成分
如果成分A直接从属于成分B,而成分C在句子中位于A和B之间,那么,成分C或者属于成分A,或者从属于B,或者从属于A和B之间的某一成分。
这四条公理相当于对依存图和依存树的形式约束:单一父节点、连通、无环和可投射,由此来保证句子的依存分析结果是一棵有根的树结构。
这里提一下可投射,如果单词之间的依存弧画出来没有任何的交叉,就是可投射的(参考上面的两个有向图)。
为了便于理解,我国学者提出了依存结构树应满足的5个条件:
单纯结点条件:只有终结点,没有非终结点
单一父结点条件:除根节点没有父结点外,所有的结点都只有一个父结点
独根结点条件:一个依存树只能有一个根结点,它支配其他结点
非交条件:依存树的树枝不能彼此相交
互斥条件:从上到下的支配关系和从左到右的前于关系之间是相互排斥的,如果两个结点之间存在着支配关系,它们就不能存在于前于关系
这五个条件是有交集的,但它们完全从依存表达的空间结构出发,比四条公理更直观更实用。
Gaifman 1965年给出了依存语法的形式化表示,证明了依存语法与上下文无关文法没有什么不同
类似于上下文无关文法的语言形式对被分析的语言的投射性进行了限制,很难直接处理包含非投射现象的自由语序的语言。20世纪90年代发展起来了约束语法和相应的基于约束满足的依存分析方法,可以处理此类非投射性语言问题。
基于约束满足的分析方法建立在约束依存语法之上,将依存句法分析看做可以用约束满足问题来描述的有限构造问题。
约束依存语法用一系列形式化、描述性的约束将不符合约束的依存分析去掉,直到留下一棵合法的依存树。
生成式依存分析方法、判别式依存分析方法和确定性依存分析方法是数据驱动的统计依存分析中具有代表性的三种方法。
生成性依存分析方法
生成式依存分析方法采用联合概率模型生成一系列依存语法树并赋予其概率分值,然后采用相关算法找到概率打分最高的分析结果作为最后输出。
生成式依存分析模型使用起来比较方便,它的参数训练时只在训练集中寻找相关成分的计数,计算出先验概率。但是,生成式方法采用联合概率模型,再进行概率乘积分解时做了近似性假设和估计,而且,由于采用全局搜索,算法的复杂度较高,因此效率较低,但此类算法在准确率上有一定优势。但是类似于CYK算法的推理方法使得此类模型不易处理非投射性问题。
判别式依存分析方法
判别式依存分析方法采用条件概率模型,避开了联合概率模型所要求的独立性假设(考虑判别模型CRF舍弃了生成模型HMM的独立性假设),训练过程即寻找使目标函数(训练样本生成概率)最大的参数θ(类似Logistic回归和CRF)。
判别式方法不仅在推理时进行穷尽搜索,而且在训练算法上也具有全局最优性,需要在训练实例上重复句法分析过程来迭代参数,训练过程也是推理过程,训练和分析的时间复杂度一致。
确定性依存方法
确定性依存分析方法以特定的方向逐次取一个待分析的词,为每次输入的词产生一个单一的分析结果,直至序列的最后一个词。
这类算法在每一步的分析中都要根据当前分析状态做出决策(如判断其是否与前一个词发生依存关系),因此,这种方法又称决策式分析方法。
通过一个确定的分析动作序列来得到一个唯一的句法表达,即依存图(有时可能会有回溯和修补),这是确定性句法分析方法的基本思想。
短语结构与依存结构之间的关系
短语结构树可以被一一对应地转换成依存关系树,反之则不然。因为一棵依存关系树可能会对应多棵短语结构树。
V-A-K模式是表象系统
在NLP里面
V是Visual(视觉),A是Auditory(听觉),K是Kinesthetic(动感)
视觉——看到的,出现的,展示的,明亮的,清晰,远近,颜色,图像等
听觉——听到的,声音,倾听 ,讨论,解释,询问,沟通,谈话,聊天。。。
动感——感觉,触摸,柔和,推进,带出,放松,呼吸。。。
每个人都有不同的V-A-K模式。
有的人是视觉优先,有的人是听觉有优先,有的人是动感优先。
而优先的部分就是他的显性模式,其余的就是隐性模式。
当然还有的人在输出和输入的时候也是不同的模式。比如一个人的语言表达主要是呈现视觉画面感的,而他听他人表达时容易吸收到的是别人的动感感受。
而我们通过什么来识别对方的V-A-K表象系统呢?
目前我学习到的是通过对方的谈话和眼球的转动。
识别出这个模式有什么好处呢?
这样可以更加了解对方,从而用对方容易接受到的方式来沟通,简单来说就是增加一个人的亲和感,信任感。
但需要注意的是,每个人都不是一层不变的,时间的改变,其他的改变或者在不同的场景里面会有不同的表现系统。
疑惑
心理学界是不承认nlp学的 ·,格林德和理查德·班德勒因不满对心理学界严谨的研究实验方法而去试图寻找一种简洁而又迅速的方法,因此在结合语言、计算机程序、心理学的基础上创立了NLP。NLP在创建的最初的本意为提升个人潜能,开发一套与心理学截然不同的套路以达到与心理学的分庭抗礼,因此顾名思义Neuro-Linguistic Programming,这也是为什么创始人不去使用Neuro-LinguisticProgrammin Psychology原因之一。正是如此NLP才没有使用心理学的研究方法,缺乏严谨的统计数据归纳、不可证伪性、缺乏可重复操作性、个案研究见证叙述、忽视相关因果等。甚至在最初的美国一次心理学研讨会议中被记者问道NLP属不属于心理学时,NLP创始人慎重的回答NLP不是心理学,但是运用了心理学的成果,在心理治疗方面有其一定作用……国际心理学术界至此对NLP不接以认可,在APA(最大的心理学家协会:美国心理学会)也对NLP保持一定的界限,在其仍将NLP排除学会分支之外(53个应用心理学分支)。然而,当NLP传入中国时,由于其商业化的链接和利益演变,加之公众对于心理学的普遍误解,致使中国国内很多人误解NLP也是心理学,称为NLP心理学。但是在大学心理专业、心理研究人员都不会认可这种说法。NLP在约翰·格林德和理查德·班德勒的分家官司之后被宣判NLP不归由任何组织或个人所专属, NLP和神经语言程序的名称也不由任何一方,并无限制任何一方提供 NLP 认证,至此NLP开始了向个人化的演变,不可避免的引发NLP的各种乱象。
人机对话根据对话轮次,可分为单轮和多轮;根据对话目的,可分为任务型和闲聊型;
按应用场景可分为三类:
1) 单轮的问答系统
一问一答的形式,对用户的问题给出精准的答案。
如天猫的客服机器人介绍产品,退换货流程等信息,可取代有标准化答案的人工工作。
单轮对话只涉及简单的上下文处理,可通过指代消解和 query 补全来完成的。单轮对话的技术主要是信息检索,当问题有多个候选答案时还需要一个基于机器学习的排序系统。
问题可分为以下几种类型:
a) 事实型问题
如:天空为什么是蓝色的?
b) 列举型问题
如:美国历任总统
c) 定义型问题
如:什么是人工智能
技术原理(待补充)
2) 开放领域的聊天系统
如聊天机器人小冰、Siri、出门问问、科大讯飞、度秘等等,智能音箱的闲聊;
技术原理(待补充)
3) 特定领域任务驱动的多轮对话系统
如语音生活助手:订机票,酒店,查路线,查附近美食;
如订火车票,机票,酒店,这些日常生活领域,人们的需求目的是信息查询及订购。需要多轮交互,通过给用户提供选择,询问领域相关的限制条件,澄清或确认需求等手段,推理用户意图。所以
任务驱动的多轮对话不是一个简单的自然语言理解加信息检索的过程,而是一个决策过程,需要系统根据当前的状态决策下一步应该采取的最优动作。
技术原理(待补充)
NLL和NLP 区分如果是两个长得比较标准的原色NLP和NLL。
NLL的黑条纹极少,但是有白色的连线条纹。
对于一部分个体来说身上的花纹并不是特别的有代表性,这时候的区分就比较玄学,我们来看一下老外繁殖户的解说。
从老外的描述来看,NLP成体头部会有对比度比较强的区域(苗子区分不明显),NLL随着成长头顶色素的过渡比较自然(从最上面的两个成体图也可以区分)。NLP的鼻尖略长于NLL,所以NLL的侧脸更显得短小可爱。
我的经验是,绝大多数的的原色NLL和原色NLP可以用方法一去区分,如果遇到纹路不是特别的有标志性,比如褪纹个体,那就可以使用方法二结合方法一去判断一下,或者参考一下卖家的父母图。
2017年2月2日 书名《做自己的心理医生》-NLP简快心理疗法
第1章-第6章
第一章 序言
NLP(Neuro Linguistic Programming,神经语言程式学)和简快心理疗法是20世纪末产生的两种心理治疗方法。
第二章 心理咨询的原则
1 保密性原则 :咨询师应保守所有来访者的内心秘密,来往信件,测试资料等。因工作或法律要求需要公开的应进行适当处理,不得公开来访者的真实姓名,单位和住址。
2 理解支持原则 :对来访者的语言、行动和情绪要充分理解,不得以道德的眼光批判对错,要帮助来访者分析原因并寻找出路。
3 积极心态原则 :咨询师的主要目的是帮助来访者分析问题所在,培养来访者积极的心态,树立信心,让来访者的心理得到成长,自己找出问题的解决办法。
4 时间限定原则 :咨询时间一般规定为60-90分钟,原则上不能随意延长咨询时间或间隔。
5 “来者不拒,去者不追” :到心理咨询室咨询的来访者必须出于完全自愿。
6 感情限定原则 :咨询师和来访者仅仅存在一种关系。不得建立多得关系。同事,朋友,亲人,熟人之间不能形成咨询关系,建立咨询关系后不得建立其他关系。
7 重大决定延期原则 :由于来访者情绪不稳定,原则上应规劝其不要轻易作出如退休,换工作,退学,离婚等重大决定。
第三章 什么是“NLP疗法”和”简快疗法“
1NLP
N指神经系统,L指导语言,P指为产生某种后果而要的一套具体指令。
1)N意译为身心,指比较稳定的身心素质、结构及比较逸动的身心状态。
2)L指沟通中所用的字,短句,音调,身体语言,内心对话和想象。
3)P指程序,我们通过语言来影响自己与他人的身心,同样,他人也通过语言来影响我们。
NLP指人们为使他们的思维、讲话和活动达到具体的后果所采取的具体行为。
NLP的目的在于复制成功,即将成功者获得的“秘密”总结出来,精炼成一套明白可行的技术,让一般人可依之而行与获得同样卓越的成就。
NLP注重个人的学习,而不是群体的差异性。
2什么是简快疗法
简快疗法认为,受导者在日常生活中形成了看待总是的世界的方式,即“信念系统”,并形成了对这一方式的坚持。然而,这些方式有些是有效的,有些却可能在解决问题上无济于事,甚至使问题变得更糟。然后受导者自己本身认识不到这一点,解决问题效果越差,越认为力度不够,于是加强这种无法的方式,由此陷入恶性循环。
3NLP和简快疗法是不同的治疗方法吗
两者区别不大,但有一些小差别。
1)简快疗法注重问题的原因和解决,NLP更注重问题的解决。
2)简快疗法更注重系统,研究家庭系统如何影响个人。而NLP更注重个人,个人如何运用自身能力照顾自己,进而影响家庭系统。
第四章 NLP的渊源
1NLP产生
1970年两位美国人因不满于传统心理学的治疗过程及效果的反复不定,集合各家所长及自己的创见而成。
2创始人理查德。班德勒与约翰。葛瑞德。
3NLP的应用领域
企业管理顾问,业务员团队领袖,专业教练,培训导师,演讲家,教育工作者,人力资源顾问,美容顾问,公关顾问,市场学顾问,人际沟通专家,心理辅导,成功学导师等。
4华人圈的NLP
香港徐志忠,台湾陈威伸,香港李中莹等为NLP在华人世界的传播起了重要作用。
第五章 简快疗法的疗效及成因
NLP专注于修正和重新设计思想模式,以求更大的灵活和能力。以NLP为理论基础形成的”NLP简快疗法“,注重人的内在潜力及自我价值的提升,而且实施起来简便,快速,有效。
1优势
1)缩短了心理咨询的时间,有效且效果持续。
2)有效激发潜意识,无须药物,帮助受导者自我提升。
3)”检定语言模式“和”暗示语言模式“有助于咨询者掌握一套有效思考和询问的技巧。
”检定语言模式“就是侦察出受导者说话中出现的某些模式,运用询问的技巧把它产生的过程还原,从而把导致困扰的深层结构资料呈现出来,这些资料往往是受导者受困的原因。当受导者对情况不满意时,一个恰当的问题能够把他的思想状态引到一个完全不同的方向,发现过去忽略了的意义和方法,从而改变他以后的行为和成就。
”暗示语言模式“注重运用声调、说话速度、先跟后带的语言模式、恰到好处的手势、身体语言和动作去配合语言文字。目的是与对方的潜意识沟通,直接让对方的潜意识收取住处,或者引导它抽出一些在意识控制范围中不能提取的资料。
4)具有针对性、可操作性和灵活创新性,简便易学。
2疗效成因
1) 焦点放在“解决”而不是去深究“问题”。
NLP简快心理疗法主张引导受导者指出期望未来将是怎样的,再分析受导者现在是怎样的情况,然后引导其认识自身目前具备的能力,尝试找出不同的选择,改变对事情的看法。
兴趣不在于“为什么”,而在于“做什么”和“怎样做”。
2) 强调引导受导者去创造未来景象,不主张深究受导者的过去。
引导受导才向前看,设计或者直接描述自己所期望的未来的景象,然后再帮助受导者一起分析目前的情形,罗列解决办法,由受导者选择适合的方式去解决。
多数受导者总是长时间把注意力放在所处的困境中,看到的是自己不顺利的过去,以及重复自己不愉快的体验,将自己包在一个抑郁、烦恼、灰暗的小世界里,看不到前景。
NLP则是绕过看不清过去,不断引导他看明天,思考自己明天想有怎样的不同。将不愉快的体验放到一边集中有效地思考自己的未来。
3)运用催眠,暗示与潜意识沟通,形成有效的沟通技巧。
4)形成一系列可操作的心理咨询技巧。
包括两种:一般性基础技巧和面对不怀情况的处理技巧。
第六章 潜意识
1NLP的意识与潜意识
有一部分是自我察觉的,也察觉到外在世界的,叫意识的心。意识作决策、思考、分析、设定方向及决定做什么。意识的心有很多理智与洞察力,但无力自己去进行改变。
另一部分则反之,自己察觉不到,叫潜意识。潜意识有很大的影响力且能比意识完成更多的事。学习与改变都是在潜意识层次上发生的,然后我们才察觉到那些改变,并将之整合到我们的生活中。
不尊重潜意识的感觉往往是日后痛苦的根源。
意识与潜意识如果有了亲和感,就能身心一致。
如何找出事情的背后正向意图持续问下面的问题:从那个行为中你要得到什么
很多在个人或组织上的改变意图,都只能是短期有效,通常是因为背后的意图并未得到满足。
2潜意识
NLP疗法的基础是完形疗法。NLP疗法认为潜意识有“自动选择最佳"的机制,欠缺的是满足良好动机的有效的做法
1)低层潜意识
低层潜意识是本能、冲动、驱力、生理机械的世界。人的生理机能不需要意识来管理,一切都由潜意识包办了。
人会生病,通常还是受到了意识的不当干扰。
低层潜意识储藏了无限的记忆,从出生到现在的所有人内容都在里边,甚至前世的记忆也存在其中。低层潜意识也是兽性、本能的世界,是人类原始而不文明的部分,是犯罪及暴力行为的源头。低层潜意识容纳了所有不被意识接受的压抑,因而形成了恐惧症、强迫性的思想行为,妄想、纪觉、噩梦。
2)中层潜意识
指平常没有存放在意识的材料,只要我们进行回忆、思考、表达就能调动出来的,这些材料位于中层潜意识。比如,你的电话号码是多少,高中班主任的姓名,初恋是谁等。
3)高层潜意识
高层潜意识是灵感、智慧、直觉、洞见、悟道、神圣的世界。
4)意识界
意识就是我们此时此刻所直接意识到的东西,例如感受、念头、情绪、欲望、冲动、记忆、期待、计划等等。
5)意识的中心自我
就是平常我们所以为的我,即小我。
6)高层自我(超我)
高自我是真正的我,是大我。
小我是意识界的中心,人格的中心;大我是潜意识的中心。
7)集体潜意识
指超越个体的存在,所有的生命的历练、智慧全部汇于此,包含了人类、动物、植物。
3潜意识的运作特性
1)储存记忆:按时间顺序或按情绪储存记忆。记忆分为短时记忆和长时记忆。
2)成为情绪的领域:具有自我保护和宣泄的功能。
3)压抑未解决的负面情绪成为记忆。
4)呈现出补压抑的情绪之合理化(释放情绪)
5)经营身体运作。
6)保存和维持身体的完整性。
7)作为一个具有极高道德标准的个体。
8)不带批评地接受指令。
9)控制及保持所有的感应:感应分为一般感应和心灵感应。
10)制造、储存、分配及传送生命的能量。
11)用天性及习惯响应外来的信息。
12)对于长期计划需要不断重复以加强其模式的效果。
一个概念重复30次以后就会被潜意识所接受。
13)不断地寻找更多、更新、更好的事物。
14)用潜意识中最少数的部分运作。
15)潜意识的沟通方式是图像和符号。
16)把每件事情都看成与自己有关。
17)采用最少阻力的途径和最简单快捷的原则运作。
18)不懂得处理否定性的字眼。
这里可以参考CSDN上的文章-BERT原理和实践: https://blogcsdnnet/jiaowoshouzi/article/category/9060488
在解释BERT,ELMO这些预训练模型之前,我们先看一下很久之前的计算机是如何读懂文字的?
每个字都有自己的独特的编码。但是这样是有弊端的,字和字之间的关联关系是无法得知的,比如计算机无法知道dog和cat都是动物,它反而会觉得bag和dog是比较相近的。
所以后来就有了Word Class,将一系列的词进行分类然后让一类词语和一类词语之间更有关联,但是这样的方法太过于粗糙,比如dog,cat,bird是一类,看不出哺乳动物鸟类的区别。
在这个基础之上,我们有了Word Embedding,Word Embedding我们可以想象成是一种soft的word class,每个词都用向量来表示,它的向量维度可能表示这个词汇的某种意思,如图中dog,cat,rabbit的距离相比其他更近。那么word embendding是如何训练出来的,是根据每个词汇的上下文所训练的。
每个句子都有bank的词汇,四个bank是不同的token,但是同样的type。(注:token-词例, type-词型, class-词类 or token是出现的总次数(还有种理解是token是具有一定的句法语义且独立的最小文本成分。 ),type是出现的不同事物的个数。)
对于典型的Word Embedding认为,每个词type有一个embedding,所以就算是不同的token只要是一样的type那么word embedding就是一样的,语义也就是一样的。
而事实上并非如此,1,2句bank指的是银行,3,4为水库。所以我们希望让机器给不同意思的token而且type还一致,给予不同的embedding。在这个问题上,之前的做法是从字典中去查找这个词包含几种意思,但是这样的做法显然跟不上现实中词语的一些隐含的含义。比如bank有银行的意思,与money一起是银行的意思,而与blood一起却是血库的意思。
所以我们想让机器今天进一步做到每一个word token都可以有自己的embedding(之前是每个type有一个embedding或者有固定的一个或多个embedding),那么怎么知道一个word应该有怎样的embedding呢?我们可以取决于该词的上下文,上下文越相近的token它们就会越相近的embedding。比如之前提到的bank,下面两个句子它们的word token的embedding可能是相近的,而和上面的word token的embedding是相远的。
所以我们想使用一种能够基于上下文的Contextual word Embedding来解决一词多义的问题。
这里使用ELMO可以做到这件事情,即每个word token拥有不同的word embedding。(右上角动物是芝麻街(美国公共广播协会(PBS)制作播出的儿童教育电视节目)里的角色)。
它是基于RNN的预训练模型,它只需要搜集大量语料(句子)且不需要做任何标注,就可以训练这个基于RNN的语言模型,预测下一个token是什么,学习完了之后就得到了上下文的embedding。因为我们可以将RNN的隐藏层中的某一节点拿出来(图中橙蓝色节点),它就是输入当前结点的词汇的word embedding。
从当计算识别到<BOS>,模型训练开始。首先输入"潮水",然后当作输入输出"退了",退了当做输入输出"就"。
假设当前要得到”退了”这个词的上下文embedding,首先,因为前边的RNN只考虑到了前文而没有考虑到后文,所以这里就使用了同前文一样的反向的RNN。然后,它从句尾开始进行,比如给它喂”知道”,它就要预测”就”,给它喂”就”,它就要预测”退了”。这时候就不仅考虑每个词汇的前文,还会考虑每个词的后文。最后将正向和逆向得到的两个不同的上下文embedding(因为方向不同训练结果也不一样)拼接起来。
现在我们训练的程度都会越来越深度,当层数增加,这样就会产生Deep的RNN,因为很多层,而且每一层都会产生上下文Embedding,那么我们到底应该使用哪一层?每一层这种深度LSTM中的每个层都可以生成潜在表示(方框处)。同一个词在不同的层上会产生不同的Embedding,那么我们应该使用哪一层呢?ELMo的策略是每一层得到的上下文embedding都要。
在上下文embedding的训练模型中,每个词输入进去都会有一个embedding输出来。但是在ELMo中,每个词汇输入进去,都会得到不止一个embedding,因为每层的RNN都会给到一个embedding,ELMo将它们统统加起来一起使用。
以图中为例,这里假设ELMo有两层RNN,这里是将α1(**,第一层得到的embedding)和α2(绿色,第二层得到embedding)加起来得到蓝色的embedding,并做为接下来要进行不同任务的输入。
但是这里存在一些问题,α1和α2是学习得到的,而且它是根据当前要进行的任务(如QA,POS of tagging ),然后根据接下来要进行的这些任务一起被学习出来。所以就导致不同任务导向下的α1和α2也不一样。
ELMo的论文中提到,在不同任务下(SRL,Coref,SNLI,SQuAD,SST-5)。蓝色的上下文embedding在经过token(这里为没有经过上下文的embedding),LSTM1,LSTM2后,它在不同阶段需要的weight也不一样。
BERT相当于是Transformer的Encoder部分,它只需要搜集大量的语料去从中学习而不经过标注(不需要label),就可以将Encoder训练完成。如果之前要训练Encoder,我们需要通过一些任务来驱动学习(如机器翻译)。
BERT就是句子给进去,每个句子给一个embedding。
这里可以回忆下,Transformer的Enoder中有self-attention layer,就是给进去一个sequence,输出也得到一个sequence。
虽然图中使用是用词作为单元进行输入,但是在使用BERT进行中文的训练时,字会是一个更好的选择。比如,我们在给BERT进行输入时,用one-hot给词进行编码,但是词在中文中数量庞大,会导致维度过高。但是,字的话相对会少很多,特别是中文(大约几千个,可以穷举)。这样以字为单位进行输入会占很大优势。
共有两种方法,一种是Mask LM遮盖语言模型,另一种是Next Sentence Prediction下一句预测。
下面用上图的例子来理解BERT是怎么样来进行填空的:
1)这里假设在所有句子中的词汇的第2个位置上设置一个<MASK>;
2)接下来把所有的词汇输入BERT,然后每个输入的token都会得到一个embedding;
3)接下来将设置为<MASK>的embedding输入到Linear Multi-class Classifier中中,要求它预测被<MASK>的词汇是哪个词汇?
但是这个Linear Multi-class Classifier它仅仅是一个线性分类器,所以它的能力十分弱,这也就需要在之前的BERT模型中需要将它的层数等参数设计的相当好,然后得到非常出色的representation,便于线性分类器去训练。
那么我们怎么知道最后得到的embedding是什么样的呢?如果两个<MASK>下的词汇(输入时设置的<MASK>和最后预测的<MASK>)都放回原来的位置而且没有违和感(就是语句还算通顺),那它们就有类似的embedding(比如退下和落下)。
如图中,给定两个句子1)醒醒吧 和 2)你没有妹妹。其中特殊符号[SEP]是告诉BERT两个句子的分隔点在哪里。
特殊符号[CLS]一般放在句子的开头,它用来告诉BERT从这开始分类任务,[CLS]输入BERT后得到embedding然后通过Linear Binary Classifier得出结果说明:经过BERT预测后现在我们要预测的两个句子是接在一起 or 不应该被接在一起。
这里可能会有疑问,为什么不将[CLS]放在句尾,等BERT训练完两个句子再输出结果?
对于上图中的任务,BERT现在要做的事情就是给定两个句子,让BERT输出结果这两个句子是不是应该接在一起?
所以在语料库的大量句子中,我们是知道哪些句子是可以接在一起的,所以也需要我们告诉BERT哪些句子是接在一起的。
Linear Binary Classifier和BERT是一起被训练的,通过预测下一句这个任务,我们就可以把将BERT部分的最优参数训练出来。
现在我们知道了任务一和任务二,在原论文中两种任务是要同时进行的,这样才能将BERT的性能发挥到最佳。
现在我们知道了BERT要做什么事情,那么我们要如何去使用它?共有四种方法。论文中是将BERT模型和接下来你要进行的任务结合在一起做训练。
第一种,假设当前任务是Input一个sentence,out一个class,举例来说输入一句话来判断分类。
训练流程:1)将做要分类的句子丢给BERT;
2)需要在句子开始加上分类的特殊符号,这个特殊符号经过BERT输出的embedding经过线性分类器,输出结果为当前的句子属于的类别是真还是假。BERT和Linear Classifier的参数一起进行学习;
3)这里的Linear Classifier是Trained from Scratch是白手起家从头开始,即它的参数随机初始化设置,然后开始训练;
4)而BERT则是加上Fine-tune微调策略(一种迁移学习方式),例如Generative Pre-trained Transformer(OpenAI GPT生成型预训练变换器)(Radford等,2018),引入了最小的任务特定参数,并通过简单地微调预训练参数在下游任务中进行训练。
这里不得不提一下迁移学习中的Fine-tune,这里可以参考csdn的一篇文章: https://blogcsdnnet/u013841196/article/details/80919857
( https://arxivorg/abs/180512471 )
第二种,假设当前任务是input一个sentence,输出这个句子中的每个词汇属于正例还是负例。举例现在的任务是slot filling填槽任务(填槽指的是为了让用户意图转化为用户明确的指令而补全信息的过程)(另一种解释是从大规模的语料库中抽取给定实体(query)的被明确定义的属性(slot types)的值(slot fillers))(槽可以理解为实体已明确定义的属性),输入的句子是 arrive Taipei on November 2nd输出的槽是other dest on time time
训练流程:
1)将句子输入BERT,句子中的每个词汇都会映射出一个embedding;
2)每个词汇的embedding输入Linear Classifier,输出结果;
3)Linear Classifier 白手起家和Bert微调的方式一起去做学习。
第三种,假设当前任务是input输入两个句子,输出class。举例现在要进行自然语言预测,让机器根据premise前提,预测这个hypothesis假设是True还是False还是unknown不知道。实际上,我们可以把这个任务当成三分类问题。
训练过程:
1)在一个sentence前设置特殊符号[CLS],然后在要输入的两个sentence中间设置[SEP]分隔符号;
2)将两个sentence连同特殊符号一起输入到BERT中;
3)将[CLS]输入BERT后得到的embedding,再把它输入linear Classifier中,得到class。
如图所示,假设gravity的token序号是17,即 ,我们现在有一个问题通过QA Model后得到的s=17,e=17,那么答案就是 为gravity;
同理,假设within a cloud的序号顺序是77到79,即 到 ,我们现在有一个问题通过QA Model后得到的s=77,e=79,那么答案就是 为within a cloud。
https://arxivorg/abs/190505950
https://openreviewnet/pdfid=SJzSgnRcKX
这张图显示了BERT从0-24层的层数在针对不同的NLP任务上的表现。
https://d4mucfpksywvcloudfrontnet/better-language-models/language_models_are_unsupervised_multitask_learnerspdf
而所谓的GPT,它其实就是Transformer的Decoder。
我们简单的描述下GPT的训练过程:这里我们input<BOS>这个token和潮水,想要GPT预测输出“退了”这个词汇。
1)首先输入[BOS](begin of sentence)和潮水,通过Word Embedding再乘上matrix W变成a 1到a 4,然后把它们丢进self-attention 层中,这时候每一个input都分别乘上3个不同的matrix产生3个不同的vector,分别把它们命名为q,k,v。
q代表的是query (to match others用来去匹配其它的向量)
k代表的是key (to be matched用来去被query匹配的向量)
v代表的是value(information to be extracted用来被抽取的信息的向量)
2)现在要做的工作就是用每个query q 去对每个 key k做attention(吃2个向量,输出就是告诉你这2个向量有多么匹配或者可以说输入两个向量输出一个分数\alpha(而怎么去吃2个向量output一个分数,有很多不同的做法))。这里要预测潮水的下一个词,所以乘 , 乘上 , 乘上 再经过soft-max分别得到 到 。
3)我们用 和每一个v相乘, 和 相乘加上 和 相乘。以此类推并相加,最终得到 。
4)然后经过很多层的self-attention,预测得到”退了”这个词汇。
同理,现在要预测”退了”的下一个词汇,按照前面的流程可以得到 ,然后经过很多层的self-attention层,得到”就”这个词汇。
GPT的神奇之处在于它可以在完全没有训练数据的情况下,就可以做到阅读理解,摘要,翻译。折线图中显示了它在参数量上升的情况下,F1的值的效果。
1Transformer的问题:
word Embedding 无上下文
监督数据太少
解决方法:
Contextual Word Embedding
2ELMo( E mbeddings from L anguages Mo del)
- 多层双向的LSTM的NNLM
- RNN-based language models(trained from lots of sentences)
ELMo的问题:
Contextual Word Embedding作为特征
不适合特定任务
3OpenAI GPT的改进
根据任务Fine-Tuning
使用Transformer替代RNN/LSTM
OpenAI GPT的问题:
单向信息流的问题
Pretraining(1)和Fine-Tuning(2)不匹配
解决办法:
Masked LM
NSP Multi-task Learning
Encoder again
Tips:
- 使用中文模型
- max_seq_length可以小一点,提高效率
- 内存不够,需要调整train_batch_size
- 有足够多的领域数据,可以尝试Pretraining
什么是自然语言处理(NLP)的未来前景?这件事让王印明白,培养孩子不见得只在理论课上下功夫,教育也不仅仅是老师在讲台上灌输,还应该跳出来思考如何培养学生的品质和能力,激发他们的探索欲,为未来埋下一颗种子。孩子们周末不回家,跑去看他做手工。王印决定带着他们“开干”。他们曾一起看过一部名为《武士刀传奇》的纪录片,片子里讲,一把武士刀会经过反复锻打,最后的成品有5000多层纹理截面。这个细节打动了一位小男孩,他说,老师,我也想做一把武士刀。
NLP第九篇-句法分析
本文2023-09-30 18:58:52发表“资讯”栏目。
本文链接:https://www.lezaizhuan.com/article/144294.html