HOME 首页
SERVICE 服务产品
XINMEITI 新媒体代运营
CASE 服务案例
NEWS 热点资讯
ABOUT 关于我们
CONTACT 联系我们
创意岭
让品牌有温度、有情感
专注品牌策划15年

    nlp算法(nlp算法是什么意思)

    发布时间:2023-04-07 13:11:11     稿源: 创意岭    阅读: 88        

    大家好!今天让创意岭的小编来大家介绍下关于nlp算法的问题,以下是小编对此问题的归纳整理,让我们一起来看看吧。

    开始之前先推荐一个非常厉害的Ai人工智能工具,一键生成原创文章、方案、文案、工作计划、工作报告、论文、代码、作文、做题和对话答疑等等

    只需要输入关键词,就能返回你想要的内容,越精准,写出的就越详细,有微信小程序端、在线网页版、PC客户端

    官网:https://ai.de1919.com

    创意岭作为行业内优秀的企业,服务客户遍布全球各地,如需了解SEO相关业务请拨打电话175-8598-2043,或添加微信:1454722008

    本文目录:

    nlp算法(nlp算法是什么意思)

    一、自然语言处理(NLP)知识整理及概述(一)

    这是我在留学期间选修的课程 :natura language process。 这篇文章主要是为了大致的梳理这门课上的知识点,方便日后复习。因此,语言处理的主体对象是English。

    简单来说,语言模型就是一个对于不同单词出现概率的统计。

    然而,对于英语来说,每个单词可能有不同的时态和单复数等形态变化。因此,在做统计前,需要先对原始数据进行预处理和归一化。

    分割句子后,每句话应该作为一个元素单独存储。

    一般来说,常用的是 unigram, bigram 和trigram, 即以1-3 个词作为一个对象来统计。n 越大, 统计结果也越稀疏。一个七八个词的组合重复出现的概率,显然远低于2-3个词的组合。 另一方面,根据马尔科夫链, 一个单词的出现,可以认为仅跟前一个词有关系,所以也没有太大必要追求过大的n。

    n-gram 是一个重要的基础概念, 它所提供的概率分析可以做到很多事情, 例如机器翻译“请给我打电话”:P(“please call me”) > P("please call I ")。 又比如拼写纠正:基于概率, “its 5pm now” → 纠正为 “it's 5pm now”

    没有比较就没有伤害。 对于语言模型的评估, 也需要有一个比较的对象。因此,要用两种方法建立不同的语言模型(当然也可以对比前人的工作成果)。显然,任意给一个测试用的句子,如果在某一模型中的出现概率都比较大,那么这个模型显然更好。 具体来说, 评估方法有两种:

    首个单词问题 :对于一个基于bigram或trigram的模型,在计算一个句子的perplexity时,前1或2个单词需要不能直接得到,依赖于句子开头的标识符。也即是说,在训练 n-gram 模型时, 对于每个句子,分别在开头和结尾填充n-1个<s>。从而保证在计算perplexity的时候能够正确地从第一个单词开始计算。这也是为什么前面 sentence segmentation 的时候要将句子区别存储的原因。

    显然,无论用来生成LM的corpus多么庞大,总会有些单词没有被包含其中(称为out of vocabulary, OOV)。 解决方法有两种, 一是实现设定一个固定的字典,在训练LM过程中,所有不在字典中的单词统一转换成 token <UNK>, 另一种是将LM中出现频率小于n次的单词当作 <UNK>,剩下的作为字典。 根据字典对测试数据做相同操作,就可以避免OOV的问题。

    在处理完OOV问题后,还有一个问题需要处理:所有单词都在字典中,但是单词的组合并没有在LM中出现这一情况。 此时就需要对基于bigram或trigram的LM进行smooth操作,规避这一问题。Smoothing过程有1点需要注意,就是smooth之后的模型,其所有概率加起来,必须仍然为1。常见的smoothing方法有:

    特别的,工程上最适合的应该是 stupid backoff algorithm, 这一算法并不确保整体概率为1。仅仅是在回退时乘以系数0.4计算。即如果trigram没有找到,就使用0.4×P(bigram), 如果bigram还是没找到, 就是要 0.4×0.4×P(unigram)。由于OOV问题已解决,所以对于任意一个词,必然能计算出其概率。

    相关阅读: Large Language Models in Machine Translation

    二、自然语言处理基础 - NLP

    什么是自然语言处理

    自然语言处理 (英语:natural language processing,缩写作 NLP) 是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

    自然语言处理有四大类常见的任务

    什么是命名实体识别

    命名实体识别(NER)是信息提取(Information Extraction)的一个子任务,主要涉及如何从文本中提取命名实体并将其分类至事先划定好的类别,如在招聘信息中提取具体招聘公司、岗位和工作地点的信息,并将其分别归纳至公司、岗位和地点的类别下。命名实体识别往往先将整句拆解为词语并对每个词语进行此行标注,根据习得的规则对词语进行判别。这项任务的关键在于对未知实体的识别。基于此,命名实体识别的主要思想在于根据现有实例的特征总结识别和分类规则。这些方法可以被分为有监督(supervised)、半监督(semi-supervised)和无监督(unsupervised)三类。有监督学习包括隐形马科夫模型(HMM)、决策树、最大熵模型(ME)、支持向量机(SVM)和条件随机场(CRF)。这些方法主要是读取注释语料库,记忆实例并进行学习,根据这些例子的特征生成针对某一种实例的识别规则。

    什么是词性标注

    词性标注 (pos tagging) 是指为分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程。

    什么是文本分类

    该技术可被用于理解、组织和分类结构化或非结构化文本文档。文本挖掘所使用的模型有词袋(BOW)模型、语言模型(ngram)和主题模型。隐马尔可夫模型通常用于词性标注(POS)。其涵盖的主要任务有句法分析、情绪分析和垃圾信息检测。

    GLUE benchmark

    General Language Understanding Evaluation benchmark,通用语言理解评估基准,用于测试模型在广泛自然语言理解任务中的鲁棒性。

    LM:Language Model

    语言模型,一串词序列的概率分布,通过概率模型来表示文本语义。

    语言模型有什么作用?通过语言模型,可以量化地衡量一段文本存在的可能性。对于一段长度为n的文本,文本里每个单词都有上文预测该单词的过程,所有单词的概率乘积便可以用来评估文本。在实践中,如果文本很长,P(wi|context(wi))的估算会很困难,因此有了简化版:N元模型。在N元模型中,通过对当前词的前N个词进行计算来估算该词的条件概率。

    重要文献与资料

    https://segmentfault.com/a/1190000015460828

    https://segmentfault.com/a/1190000015284996

    https://segmentfault.com/a/1190000015285996

    我们介绍词的向量表征,也称为 word embedding 。词向量是自然语言处理中常见的一个操作,是搜索引擎、广告系统、推荐系统等互联网服务背后常见的基础技术。

    在这些互联网服务里,我们经常要比较两个词或者两段文本之间的相关性。为了做这样的比较,我们往往先要把词表示成计算机适合处理的方式。最自然的方式恐怕莫过于向量空间模型(vector space model)。 在这种方式里,每个词被表示成一个实数向量(one-hot vector),其长度为字典大小,每个维度对应一个字典里的每个词,除了这个词对应维度上的值是1,其他元素都是0。

    One-hot vector虽然自然,但是用处有限。比如,在互联网广告系统里,如果用户输入的query是“母亲节”,而有一个广告的关键词是“康乃馨”。虽然按照常理,我们知道这两个词之间是有联系的——母亲节通常应该送给母亲一束康乃馨;但是这两个词对应的one-hot vectors之间的距离度量,无论是欧氏距离还是余弦相似度(cosine similarity),由于其向量正交,都认为这两个词毫无相关性。 得出这种与我们相悖的结论的根本原因是:每个词本身的信息量都太小。所以,仅仅给定两个词,不足以让我们准确判别它们是否相关。要想精确计算相关性,我们还需要更多的信息——从大量数据里通过机器学习方法归纳出来的知识。

    在机器学习领域里,各种“知识”被各种模型表示,词向量模型(word embedding model)就是其中的一类。通过词向量模型可将一个 one-hot vector映射到一个维度更低的实数向量(embedding vector),如embedding(母亲节)=[0.3,4.2,−1.5,...],embedding(康乃馨)=[0.2,5.6,−2.3,...]。在这个映射到的实数向量表示中,希望两个语义(或用法)上相似的词对应的词向量“更像”,这样如“母亲节”和“康乃馨”的对应词向量的余弦相似度就不再为零了。

    词向量模型可以是概率模型、共生矩阵(co-occurrence matrix)模型或神经元网络模型。在用神经网络求词向量之前,传统做法是统计一个词语的共生矩阵X。

    X是一个|V|×|V| 大小的矩阵,Xij表示在所有语料中,词汇表V(vocabulary)中第i个词和第j个词同时出现的词数,|V|为词汇表的大小。对X做矩阵分解(如奇异值分解),得到的U即视为所有词的词向量:

    但这样的传统做法有很多问题:

    基于神经网络的模型不需要计算和存储一个在全语料上统计产生的大表,而是通过学习语义信息得到词向量,因此能很好地解决以上问题。

    神经网络

    当词向量训练好后,我们可以用数据可视化算法t-SNE[ 4 ]画出词语特征在二维上的投影(如下图所示)。从图中可以看出,语义相关的词语(如a, the, these; big, huge)在投影上距离很近,语意无关的词(如say, business; decision, japan)在投影上的距离很远。

    另一方面,我们知道两个向量的余弦值在[−1,1]的区间内:两个完全相同的向量余弦值为1, 两个相互垂直的向量之间余弦值为0,两个方向完全相反的向量余弦值为-1,即相关性和余弦值大小成正比。因此我们还可以计算两个词向量的余弦相似度。

    模型概览

    语言模型

    在介绍词向量模型之前,我们先来引入一个概念:语言模型。 语言模型旨在为语句的联合概率函数P(w1,...,wT)建模, 其中wi表示句子中的第i个词。语言模型的目标是,希望模型对有意义的句子赋予大概率,对没意义的句子赋予小概率。 这样的模型可以应用于很多领域,如机器翻译、语音识别、信息检索、词性标注、手写识别等,它们都希望能得到一个连续序列的概率。 以信息检索为例,当你在搜索“how long is a football bame”时(bame是一个医学名词),搜索引擎会提示你是否希望搜索"how long is a football game", 这是因为根据语言模型计算出“how long is a football bame”的概率很低,而与bame近似的,可能引起错误的词中,game会使该句生成的概率最大。

    对语言模型的目标概率P(w1,...,wT),如果假设文本中每个词都是相互独立的,则整句话的联合概率可以表示为其中所有词语条件概率的乘积,即:

    然而我们知道语句中的每个词出现的概率都与其前面的词紧密相关, 所以实际上通常用条件概率表示语言模型:

    N-gram neural model

    在计算语言学中,n-gram是一种重要的文本表示方法,表示一个文本中连续的n个项。基于具体的应用场景,每一项可以是一个字母、单词或者音节。 n-gram模型也是统计语言模型中的一种重要方法,用n-gram训练语言模型时,一般用每个n-gram的历史n-1个词语组成的内容来预测第n个词。

    Yoshua Bengio等科学家就于2003年在著名论文 Neural Probabilistic Language Models [ 1 ] 中介绍如何学习一个神经元网络表示的词向量模型。文中的神经概率语言模型(Neural Network Language Model,NNLM)通过一个线性映射和一个非线性隐层连接,同时学习了语言模型和词向量,即通过学习大量语料得到词语的向量表达,通过这些向量得到整个句子的概率。因所有的词语都用一个低维向量来表示,用这种方法学习语言模型可以克服维度灾难(curse of dimensionality)。注意:由于“神经概率语言模型”说法较为泛泛,我们在这里不用其NNLM的本名,考虑到其具体做法,本文中称该模型为N-gram neural model。

    在上文中已经讲到用条件概率建模语言模型,即一句话中第t个词的概率和该句话的前t−1个词相关。可实际上越远的词语其实对该词的影响越小,那么如果考虑一个n-gram, 每个词都只受其前面n-1个词的影响,则有:

    给定一些真实语料,这些语料中都是有意义的句子,N-gram模型的优化目标则是最大化目标函数:

    其中f(wt,wt−1,...,wt−n+1)表示根据历史n-1个词得到当前词wt的条件概率,R(θ)表示参数正则项。

    Continuous Bag-of-Words model(CBOW)

    CBOW模型通过一个词的上下文(各N个词)预测当前词。当N=2时,模型如下图所示:

    具体来说,不考虑上下文的词语输入顺序,CBOW是用上下文词语的词向量的均值来预测当前词。

    其中xt为第t个词的词向量,分类分数(score)向量 z=U∗context,最终的分类y采用softmax,损失函数采用多类分类交叉熵。

    Skip-gram model

    CBOW的好处是对上下文词语的分布在词向量上进行了平滑,去掉了噪声,因此在小数据集上很有效。而Skip-gram的方法中,用一个词预测其上下文,得到了当前词上下文的很多样本,因此可用于更大的数据集。

    如上图所示,Skip-gram模型的具体做法是,将一个词的词向量映射到2n个词的词向量(2n表示当前输入词的前后各n个词),然后分别通过softmax得到这2n个词的分类损失值之和。

    我们介绍了词向量、语言模型和词向量的关系、以及如何通过训练神经网络模型获得词向量。在信息检索中,我们可以根据向量间的余弦夹角,来判断query和文档关键词这二者间的相关性。在句法分析和语义分析中,训练好的词向量可以用来初始化模型,以得到更好的效果。在文档分类中,有了词向量之后,可以用聚类的方法将文档中同义词进行分组,也可以用 N-gram 来预测下一个词。希望大家在本章后能够自行运用词向量进行相关领域的研究。

    参考: https://www.paddlepaddle.org.cn/documentation/docs/zh/user_guides/simple_case/word2vec/README.cn.html

    三、常用NLP模型的简介

    符号统一:X即样本矩阵

    LSI:即SVD(奇异值)分解,X≈UΣVT(VT代表V的转置),设X为n×m矩阵,共m个文档,每个文档由n个词构成,而Σ为s×s矩阵,代表s个主题,V为m×s,每行代表每个文档分别和每个主题的相似度。通常文本分类用到V矩阵。U矩阵即n×s,每行代表每个词和每个主题的相似度。U和V分别成为左、右奇异矩阵。PS:我们知道PCA是对XTX求特征值和特征向量,设X=UΣVT,由于U和V都是正交阵,则XTX=VΣ²VT,即右奇异矩阵就是PCA分解后的特征矩阵,XXT→左奇异矩阵也是同理。

    Word2Vec: 最常用的自然语言的数字化表达,简而言之就是若共100篇文章,vocabulary_size=10000,那么每个词都可以用10000维的one-hot向量表达,而经过word2vec的embedding后,每个词都可以用例如300维向量表示,不仅降了维度,而且相似词义的词将拥有更接近的向量表示。word2vec分为两种模型,CBOW - 根据上下文预测词语,SkipGram - 根据词语预测上下文。

    CBOW:对C个上下文的词语每个词用C组不同的权重W全连接映射到一个N维的隐层上,得到C个N维隐层值,取平均,再对这个平均的N维隐层用权重W'的全连接+softmax对V个词语赋予概率值,V即vocabulary_sizee。W和W'分别是V×N和N×V的矩阵(全连接↔左乘权重矩阵的转置),假设某词word是Vocabulary的第j个词,那么W的第j行称为word的输入词向量,W'的第j列向量为word的输出词向量。 点此 查看原论文,不过我没看懂所谓的word embedding最终输出的到底是哪个向量,输入、输出、还是隐层。

    SkipGram: CBOW的反向操作。

    两者都是用BP算法更新。

    LSTM:假设输入一句话长度10,每个词用32维向量展示,则LSTM将这个[10, 32]的向量转化为[k]的输出(hidden state),k可以是小于32的任意整数。也可输出每个time_step的输出([10,32]),和最后的cell state。并可对输出的k维向量加一个全连接降维或再加一个softmax实现分类。LSTM和RNN的区别在于有门控制,主要是通过忘记门来保留长期记忆,避免梯度消失。

    Seq2Seq:Seq2Seq本来有着非常广阔的定义,但通常是指一个基于神经网络与 LSTM 的 经典seq2seq模型 ,后续流行的Transformer、BERT、GPT3等都是基于此。大致功能是实现机器翻译,通过encoder将原文转换为一个理解的矩阵后,用decoder一词一词地根据这个理解输出目标语言对应的句子。结构大致是先将原文每个词embedding后输入一个名为encoder的LSTM,并将其输出(即LSTM的最后一个cell的h和c)作为对原文的理解。然后一个名为decoder的LSTM会将这个理解转化为答案,decoder用BOS代表句子开始,EOS代表结束。训练时,例如将“我爱你”翻译为“I love you”,第一个输入是BOS,embedding后经过cell(用之前得到的h和c初始化)后用softmax激活得到第一个输出“I”,“I”作为第二个输入再次embedding经过cell后softmax激活得到第二个输出“love”,同理得到第三个输出“you”,最后得到EOS。通过BP梯度下降训练完成后,以同样的方式完成机器翻译的预测任务。

    Attention:最早用于Seq2Seq模型。例如要将“我爱你”翻译为“I love you”时,首先根据encoder获得对原文每个词的理解,即encoder_output。decoder每次输出时,对当前输入找一个合适的attention分布,即权重(所谓更注意的地方,即权重更高的地方),该权重点乘encoder_output后求和即经过注意力机制后当前的输入。简而言之,在decoder每次输出时,会根据输入对encoder_output给予一个不同的attention分布。( 此段话尚未验证,需读过论文后修正 )

    Self-Attention: 第一次出现在Transformer,由于Transformer没有使用传统s2s所用的RNN或LSTM,所以自称Attention is all you need (You don't need RNN or LSTM)。Self-Attention和Attention的区别有很多,首先对它而言可以不需要decoder直接在encoder内完成自注意力,其次它没有关注序列信息,因此需要额外先进行Positional Encoding,添加序列信息。它的重点在于在关注一个词时,可以将它和上下文的其他词联系到一起计算,对关联较大的词赋予更多的关注(权重)。计算方法是通过三个不同的权重矩阵来乘输入X,获得Q K V三个矩阵,即将原文X拆分为了3部分:问题、目录、内容,通过QKT除以一个常数(原论文是根号dk,这个数越大则概率分布越平均,越小则越极端,也会导致梯度消失)后softmax,来找到和Q对应的K,再通过这个K找到相应的V,即代表此时的关注的内容。

    Transformer( 论文 及 较好的一篇介绍 ): 虽然也有encoder和decoder,但后续的发展改进通常只用encoder,而encoder的主要部分是self-attention。整体结构是6个encoder层接6个decoder层。每个encoder层大致结构是输入X经Positional Encoding后,经self-attention加工和自身残差连接后相加并norm(所谓残差连接相当于给了X两个通道,一个是直接输入,一个是经过attention输入),随后再通过前向网络分别对每个输出全连接处理后(一方面避免直接concat维度太大,一方面可以并行计算)与自身残差相加并norm。decoder大致相同,就在中间多了一个Mask的Self Attention来接受encoder的输入,mask是因为decoder按顺序输出,需要把后面的mask掉。

    四、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函数中去拿到判定结果,然后大于0.5的为正例,小于0.5的为反例,实际上只要反过来,Sigmod函数输出0.5时候的输入就是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)。

    判别式方法不仅在推理时进行穷尽搜索,而且在训练算法上也具有全局最优性,需要在训练实例上重复句法分析过程来迭代参数,训练过程也是推理过程,训练和分析的时间复杂度一致。

    确定性依存方法

    确定性依存分析方法以特定的方向逐次取一个待分析的词,为每次输入的词产生一个单一的分析结果,直至序列的最后一个词。

    这类算法在每一步的分析中都要根据当前分析状态做出决策(如判断其是否与前一个词发生依存关系),因此,这种方法又称决策式分析方法。

    通过一个确定的分析动作序列来得到一个唯一的句法表达,即依存图(有时可能会有回溯和修补),这是确定性句法分析方法的基本思想。

    短语结构与依存结构之间的关系

    短语结构树可以被一一对应地转换成依存关系树,反之则不然。因为一棵依存关系树可能会对应多棵短语结构树。

    以上就是关于nlp算法相关问题的回答。希望能帮到你,如有更多相关问题,您也可以联系我们的客服进行咨询,客服也会为您讲解更多精彩的知识和内容。


    推荐阅读:

    listenup怎么读(listenl怎么读)

    百度nlp(百度nlp面经)

    下载ourchat这个软件(download our app)

    淘宝最近某个商品搜索量(淘宝最近某个商品搜索量低)

    抖音团购券怎么上架(抖音团购券怎么上架商品链接)