导航:首页 > 源码编译 > nlp自然语言处理算法

nlp自然语言处理算法

发布时间:2023-04-03 03:02:57

1. 自然语言处理(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

2. nlp全称是什么

nlp是自然语言处理。

自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。

自然语言处理是一门融语言学、计算机科学、数学于一体的科学。因此,这一领域的研究将涉及自然语言,即人们日常使用的语言,所以它与语言学的研究有着密切的联系,但又有重要的区别。

自然语言处理的特点:

自然语言处理以语言为对象,利用计算机技术来分析、理解和处理自然语言的一门学科,即把计算机作为语言研究的强大工具,在仿粗计算机的支持下对语言铅大慎信息进行定量化的研究,并提供可供人与计算机之间能共同使用的语言描写。

包括自然语言理解和自然语言生成两部分。它是典型边缘交叉学科,涉及到语言科学、槐敬计算机科学、数学、认知学、逻辑学等,关注计算机和人类(自然)语言之间的相互作用的领域。

3. nlp算法是什么

nlp算法是自然语言处理。

自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。

它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。

nlp算法发展:

在一般情况下,用户可能不熟悉机器语言,所以自然语言处理技术可以帮助这样的用户使用自然语言和机器交流。从建模的角度看,为了方便计算机处理,自然语言可以被定义为一组规则或符号的集合,我们组合集合中的符号来传递各种信息。

这些年,NLP研究取得了长足的进步,逐渐发展成为一门独立的学科,从自然语言的角度出发,NLP基本可以分为两个部分:自然语言处理以及自然语言生成,演化为理解和生成文本的任务。

4. AI PM应该懂的自然语言处理(NLP)知识

NLP是人工智能的一个子领域,作为AI产品经理,我们至少要知道NLP是什么,它能做什么事,这样我们就能获得一种解决问题的思维,将遇到的问题和方法连接起来。接下来我从“NLP是什么、能做什么、目前遇到的难题”三个方面来简单介绍下NLP。

一.什么是NLP

NLP,中文叫自然语言处理,简单来说,是一门让计算机理解、分析以及生成自然语言的学科,大概的研究过程是:研制出可以表示语言能力的模型——提出各种方法来不断提高语言模型的能力——根据语言模型来设计各种应用系统——不断地完善语言模型。

NLP理解自然语言目前有两种处理方式:

1.基于规则来理解自然语言,即通过制定一些系列的规则来设计一个程序,然后通过这个程序来解决自然语言问题。输入是规则,输出是程序;

2.基于统计机器学习来理解自然语言,即用大量的数据通过机器学习算法来训练一个模型,然后通过这个模型来解决自然语言问题。输入是数据和想要的结果,输出是模型。

接下来简单介绍NLP常见的任务或应用。

二.NLP能做什么:

1.分词

中文可以分为字、词、短语、句子、段落、文档这几个层面,如果要表达一个意思,很多时候通过一个字是无法表达的一个含义的,至少一个词才能更好表达一个含义,所以一般情况是以“词”为基本单位,用“词”组合来表示“短语、、句子、段落、文档”,至于计算机的输入是短语或句子或段落还是文档就要看具体的场景。由于中文不像英文那样词与词之间用空格隔开,计算机无法用区分一个文本有哪些词,所以要进行分词。目前分词常用的方法有两种:

(1)基于规则:Heuristic(启发式)、关键字表

(2)基于机器学习/统计方法:HMM(隐马尔科夫模型)、CRF(条件随机场)

(注:在这里就不具体介绍方法的原理和实现过程了,大家感兴趣,可以自行网络了解)

现状分词这项技术非常成熟了,分词的准确率已经达到了可用的程度,也有很多第三方的库供我们使用,比如jieba,所以一般在实际运用中我们会采用“jieba+自定义词典”的方式进行分词。

2.词编码

现在把“我喜欢你”这个文本通过分词分成“我”、“喜欢”、“你”三个词,此时把这三词作为计算机的输入,计算机是无法理解的,所以我们把这些词转换成计算机能理解的方式,即词编码,现在普遍是将词表示为词向量,来作为机器学习的输入和表示空间。目前有两种表示空间:

(1)离散表示:

A.One-hot表示

假设我们的语料库是:

我喜欢你你对我有感觉吗

词典{“我”:1,“喜欢”:2,“你”:3,“对“:4,“有”:5,“感觉”:6,“吗”:7} 。一共有七个维度。

所以用One-hot表示:

“我”  :[1, 0, 0, 0, 0, 0, 0]

“喜欢”:[0, 1, 0, 0, 0, 0, 0]

········

“吗”  :[0, 0, 0, 0, 0, 0, 1]

即一个词用一个维度表示

B.bag of word:即将所有词的向量直接加和作为一个文档的向量。

所以“我 喜欢 你”就表示为:“[1, 1, 1, 0, 0, 0, 0]”。

C. Bi-gram和N-gram(语言模型):考虑了词的顺序,用词组合表示一个词向量。

这三种方式背后的思想是:不同的词都代表着不同的维度,即一个“单位”(词或词组合等)为一个维度。

(2)分布式表示:word2vec,表示一个共现矩阵向量。其背后的思想是“一个词可以用其附近的词来表示”。

离散式或分布式的表示空间都有它们各自的优缺点,感兴趣的读者可以自行查资料了解,在这里不阐述了。这里有一个问题,当语料库越大时,包含的词就越多,那词向量的维度就越大,这样在空间储存和计算量都会指数增大,所以工程师在处理词向量时,一般都会进行降维,降维就意味着部分信息会丢失,从而影响最终的效果,所以作为产品经理,跟进项目开发时,也需要了解工程师降维的合理性。

3.自动文摘

自动文摘是指在原始文本中自动摘要出关键的文本或知识。为什么需要自动文摘?有两个主要的原因:(1)信息过载,我们需要在大量的文本中抽出最有用、最有价值的文本;(2)人工摘要的成本非常高。目前自动文摘有两种解决思路:第一种是extractive(抽取式),从原始文本中找到一些关键的句子,组成一篇摘要;另一种方式是abstractive(摘要式),计算机先理解原始文本的内容,再用自己的意思将其表达出来。自动文摘技术目前在新闻领域运用的最广,在信息过载的时代,用该技术帮助用户用最短的时间了解最多、最有价值的新闻。此外,如何在非结构的数据中提取结构化的知识也将是问答机器人的一大方向。

4.实体识别

实体识别是指在一个文本中,识别出具体特定类别的实体,例如人名、地名、数值、专有名词等。它在信息检索、自动问答、知识图谱等领域运用的比较多。实体识别的目的就是告诉计算机这个词是属于某类实体,有助于识别出用户意图。比如网络的知识图谱:

“周星驰多大了”识别出的实体是“周星驰”(明星实体),关系是“年龄”,搜索系统可以知道用户提问的是某个明星的年龄,然后结合数据“周星驰  出生时间  1962年6月22日”以及当前日期来推算出周星驰的年龄,并把结果直接把这个结果显示给用户,而不是显示候选答案的链接。

此外,NLP常见的任务还有:主题识别、机器翻译、文本分类、文本生成、情感分析、关键字提取、文本相似度等,以后有时间再为大家做简单介绍。

三.NLP目前存在的难点

1.语言不规范,灵活性高

自然语言并不规范,虽然可以找一些基本规则,但是自然语言太灵活了,同一个意思可以用多种方式来表达,不管是基于规则来理解自然语言还是通过机器学习来学习数据内在的特征都显得比较困难。

2.错别字

在处理文本时,我们会发现有大量的错别字,怎么样让计算机理解这些错别字想表达的真正含义,也是NLP的一大难点

3.新词

我们处在互联网高速发展的时代,网上每天都会产生大量的新词,我们如何快速地发现这些新词,并让计算机理解也是NLP的难点

4.用词向量来表示词依然存在不足

上述,我们讲到,我们是通过词向量来让计算机理解词,但是词向量所表示的空间,它是离散,而不是连续,比如表示一些正面的词:好,很好,棒,厉害等,在“好”到“很好”的词向量空间中,你是不能找到一些词,从“好”连续到“很好”,所以它是离散、不连续的,不连续最大的问题就是不可导.计算机是处理可导的函数非常容易,不可导的话,计算量就上来了。当然现在也有一些算法是计算词向量做了连续近似化,但这肯定伴随着信息的损失。总之,词向量并不是最好的表示词的方式,需要一种更好的数学语言来表示词,当然可能我们人类的自然语言本身就是不连续的,或者人类无法创建出“连续”的自然语言。

小结:通过上述的内容,我们已经大概知道了“NLP是什么、能做什么以及目前存在的难题”。作为人工智能产品经理,了解NLP技术能够提高我们自己的技术理解力,在理解行业需求、推进项目开展都有非常大的帮助,其实这可以让我们获得是一种连接能力,将需求与工程师连接起来,将问题与解决方案连接起来。虽然NLP等人工智能技术存在很多不足,但我们需要调整好自己的心态,人工智能应用化才刚刚开始,必然是不够完美的,不要成为批判者,而是成为人工智能时代的推进者。

nt-sizf@�2W��

5. 谁比较了解语音技术这块大家天天在说NLP,究竟什么是NLP

NLP 翻译成中文肆悄态就是自然语言处理,所有和自然语言相关的处理算法包括文本语音的算法都是属于 NLP 的范畴。可能大家熟悉的像 ASR 语音识别、 TTS 语音合成这种算法都是属于广义的 NLP 。过去几年大家只把文本理解叫成 NLP ,但是它是比较狭义的一个概念。
电话机器人这一块现在我‌们的产品做得还是挺好的。但是距离真正的真人客服还是有一定的差距。所以我‌们算法就是希望能够让机器人越来越拟人,像真人。其实说到最终的理想状态,我‌希望机器人能做得比人更好。
可以举一个例子,我‌们正常人打电话的过程中,说完一句话之后,它有一些线路的传输延时,可能你‌在七八百毫秒之后甚至一秒钟之后才能听到我‌现在裂源说的内容。包括如果信号不太好,你‌可能听到是断断续续的,可能就听到几个词但不是一句完整的话。对于一些普通人可能就不理解什么意思,但我‌们通过一些机器算法的运液方法,是可以把它真正的意思还原出来的。如果能做到这一步的话,其实我‌们机器人就会比真人理解能力更强。参考下网络也查得到的

6. 自然语言处理(NLP)入门

NLP:计算机或系统真正理解人类语言并以与人类相同的方式处理它的陆升能力。

难度:理解话中的潜在意图;理解句子中的歧义。

歧义包括:单词、句子、语义中歧义。

在文本数据上执行的一些基本操作

    正则表达式:对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对羡没字符串的一种过滤逻辑。

    给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

可以读取一个文本文件并根据需要将其转化为一列单词或句子。

方式:
1、将一个单词替换为另一个单词;
2、删除或添加某些特定类型的单词;
...

    可以通过urllib包获取。

    停止词:索引擎会忽略的常用词。例如:the

    是SciKit-Learn库的一个工具,可以接收任何大量的文本,将每个独特的单词作为特征返回,并计算每个单词在文本中出现的 次数。

TF:术语频率。特定单词的计数与文档中单词总数的比率。
IDF:反向文档频率。文档总数与包含特定单词的文档数量的对数比率。
TF-IDF权重:二者的乘积。

作用: 衡量一个词对于一段文本的重要性

    例如,文本可以被分为正面和负面。通调取TExtBlob包可以获取许多这样的架构。

神经网络的基本结构
基本原理:人工神经元或感知器的基本元素的集合。

采用多个二元输入x1, x2, x3....,如果总和大于激活电位,则产生单个二进制输出,神经元会执行称为"发射"的指令,发射的神经元沿着信号传递到与其他树突相连的神经元,如果超过了激活电位,其他神经元也会发射。

神经网络的类型

前馈神经网络:神经网络家族的基本单元

循环神经网络:处理 NLP 中普遍存在的动态输入序列的一个最佳的技术方案。但是很快被经典的LSTM取代

卷积神经网络:应用于文本的卷积神经网络只在两个维度上工作,其中滤波器(卷积核)只需要沿着时间维度移动。卷积也可以用来 加速 LSTM。

递归神经网络:将句子视为树而不是序列

词嵌入:利用所有个体单词 相邻 的单词,使用给定文本中的信息并将其传递给模型。这使得嵌入以密集向量的形式存在,在连续向量空间中表示个体单词的投影。 即将“不可计算”“非结构化”的词转化为“可计算”“结构化”的向量。
这一步解决的是”将现实问题转化为数学问题“ ,是人工智能非常关键的一步。
嵌入:单词在新学习的向量空间中的 坐标

词嵌入是无监督学习领域最重要的应用之一

2 神经语言模型

    Bengio提出的前馈神经网络语言模型(FNNLM)引入了前馈神经网络,是为词嵌入模型奠定了基础。

该模型中仍然用于词嵌入模型的部分有:

1、 嵌入层:
     作用:记录训练数据集中所有单词的表示。
    初始化:由一组随机权重初始化
    组成:词汇表的大小,词嵌入向量输出的大小、模型输入序列的长度
    结果输出:二维向量,包含给定单词序列中所有单词的最终嵌入

2、隐藏层:
    位置:位于初始层到最终层之间,可以一个或多个
    作用:通过将神经网络中的 非线性函数 应用于先前n个词的词嵌入,来产生 输入文本数据的表示 。

3、Softmax层:
    位置早派老:神经网络体系结构的最后一层
    作用:返回输入词汇表中存在的所用单词的 概率分布

该模型有助于实现当前词汇表中不存在的单词的泛化。

Word2vec 是 Word Embedding 的方法之一, Word Embedding 的模型本身并不重要,重要的是生成出来的结果——词向量。因为在后续的任务中会直接用到这个词向量。

包含两种模型:CBOW(连续词袋)和skip-gram
区别:执行预测的方式。
CBOW:利用上下文或周围的单词来预测中心词
skip-gram:使用中心词来预测上下文

优点:与单热编码相比,word2vec有利于减我码空间大小,并将单词的表示压缩到所需的向量长度。

word2vec创建单词表示的方式基于单词的上下文。

过程:使用序列中的当前单词来预测周围的单词

周围单词的分类 得分 基于 语法关系 和它们与中心词一起出现的 次数

CBOW模型

CBOW是一种基于窗口的语言模型。(窗口:句子中的一个固定长度的片段,窗口中间的词为中心词,其他词问中心词的上下文)

原理:通过三层神经网络接受上下文的特征向量,预测中心词是什么

结构:输入层、隐藏层、输出层

该模型的6个步骤:

7. 自然语言处理(NLP)的基础难点:分词算法

自然语言处理(NLP,Natural Language Processing)是人工智能领域中的一个重要方向,主要研究人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理的底层任务由易到难大致可以分为词法分析、句法分析和语义分析。分词是词法分析(还包括词性标注和命名实体识别)中最基本的任务,也是众多NLP算法中必不可少的第一步,其切分准确与否往往与整体结果息息相关。

金融领域分词的难点

分词既简单又复杂。简单是因为分词的算法研究已经很成熟了,大部分的算法(如HMM分词、CRF分词)准确率都可以达到95%以上;复杂则是因为剩下的5%很难有突破,主要可以归结于三点:

▲粒度,即切分时的最小单位,不同应用对粒度的要求不一样,比如“融资融券”可以是一个词也可以是两个词

▲歧义,比如“恒生”一词,既可指恒生公司,又可指恒生指数

▲未登录词,即未出现在算法使用的词典中的词,比如不常见的专业金融术语,以及各种上市公司的名称

在金融领域中,分词也具有上述三个难点,并且在未登录词方面的难点更为突出,这是因为金融类词汇本来就多,再加上一些专有名词不仅有全称还有简称,这就进一步增大了难度。

在实际应用中,以上难点时常会造成分词效果欠佳,进而影响之后的任务。尤其是在一些金融业务中,有许多需要与用户交互的场景,某些用户会用口语化的词汇描述业务,如果分词错误会影响用户意图的解析,这对分词的准确性提出了更高的要求。因此在进行NLP上层应用开发时,需要对分词算法有一定的了解,从而在效果优化时有能力对分词器进行调整。接下来,我们介绍几种常用的分词算法及其应用在金融中的优劣。

几种常见的分词算法

分词算法根据其核心思想主要分为两种:

第一种是基于字典的分词,先把句子按照字典切分成词,再寻找词的最佳组合方式,包括最大匹配分词算法、最短路径分词算法、基于N-Gram model的分词算法等;

第二种是基于字的分词,即由字构词,先把句子分成一个个字,再将字组合成词,寻找最优的切分策略,同时也可以转化成序列标注问题,包括生成式模型分词算法、判别式模型分词算法、神经网络分词算法等。

最大匹配分词寻找最优组合的方式是将匹配到的最长词组合在一起,主要的思路是先将词典构造成一棵Trie树(也称为字典树),Trie树由词的公共前缀构成节点,降低了存储空间的同时可以提升查找效率。

最大匹配分词将句子与Trie树进行匹配,在匹配到根结点时由下一个字重新开始进行查找。比如正向(从左至右)匹配“他说的确实在理”,得出的结果为“他/说/的确/实在/理”。如果进行反向最大匹配,则为“他/说/的/确实/在理”。

这种方式虽然可以在O(n)时间对句子进行分词,但是只单向匹配太过绝对,尤其是金融这种词汇较丰富的场景,会出现例如“交易费/用”、“报价单/位”等情况,所以除非某些词的优先级很高,否则要尽量避免使用此算法。

最短路径分词算法首先将一句话中的所有词匹配出来,构成词图(有向无环图DAG),之后寻找从起始点到终点的最短路径作为最佳组合方式,例:

我们认为图中每个词的权重都是相等的,因此每条边的权重都为1。

在求解DAG图的最短路径问题时,总是要利用到一种性质:即两点之间的最短路径也包含了路径上其他顶点间的最短路径。比如S->A->B->E为S到E到最短路径,那S->A->B一定是S到B到最短路径,否则会存在一点C使得d(S->C->B)<d(S->A->B),那S到E的最短路径也会变为S->C->B->E,这就与假设矛盾了。利用上述的最优子结构性质,可以利用贪心算法或动态规划两种求解算法:

(1)基于Dijkstra算法求解最短路径,该算法适用于所有带权有向图,求解源节点到其他所有节点的最短路径,并可以求得全局最优解;

(2)N-最短路径分词算法,该方法是对Dijkstra算法的扩展,在每一步保存最短的N条路径,并记录这些路径上当前节点的前驱,在最后求得最优解时回溯得到最短路径。这种方法的准确率优于Dijkstra算法,但在时间和空间复杂度上都更大。

相较于最大匹配分词算法,最短路径分词算法更加灵活,可以更好地把词典中的词组合起来,能更好地解决有歧义的场景。比如上述“他说的确实在理”这句话,用最短路径算法的计算结果为“他/说/的/确实/在理”,避免了正向最大匹配的错误。但是对于词典中未存在的词基本没有识别能力,无法解决金融领域分词中的“未登录词”难点。

N-Gram(又称N元语法模型)是基于一个假设:第n个词出现与前n-1个词相关,而与其他任何词不相关。在此种假设下,可以简化词的条件概率,进而求解整个句子出现的概率。

现实中,常用词的出现频率或者概率肯定比罕见词要大。因此,可以将求解词图最短路径的问题转化为求解最大概率路径的问题,即分词结果为“最有可能的词的组合“。

计算词出现的概率,仅有词典是不够的,还需要充足的语料,所以分词任务已经从单纯的“算法”上升到了“建模”,即利用统计学方法结合大数据挖掘,对“语言”(句子出现的概率)进行建模。

我们将基于N-gram模型所统计出的概率分布应用到词图中,可以得到词的概率图。对该词图用最短路径分词算法求解最大概率的路径,即可得到分词结果。

相较于前两种分词算法,基于N-Gram model的分词算法对词频进行了统计建模,在切分有歧义的时候力求得到全局最优值,比如在切分方案“证券/自营/业务”和“证券/自/营业/务”中,统计出“证券/自营/业务”出现的概率更大,因此结果有更高的准确率。但也依然无法解决金融场景中未登录词的问题。

生成式模型主要有隐马尔可夫模型(HMM,Hidden Markov Model)、朴素贝叶斯分类等。HMM是常用的分词模型,基于Python的jieba分词器和基于Java的HanLP分词器都使用了HMM。

HMM模型认为在解决序列标注问题时存在两种序列,一种是观测序列,即人们显性观察到的句子,另一种是隐状态序列,即观测序列的标签。假设观测序列为X,隐状态序列是Y,则因果关系为Y->X。因此要得到标注结果Y,必须对X的概率、Y的概率、P(X|Y)进行计算,即建立P(X,Y)的概率分布模型。

HMM算法可以在一定程度上解决未登录词的问题,但生成式模型的准确率往往没有接下来要谈到的判别式模型高。

判别式模型主要有感知机、支持向量机(SVM,Support Vector Machine)、条件随机场(CRF,Conditional Random Field)、最大熵模型等,其中感知机模型和CRF模型是常用的分词模型。

(1)平均感知机分词算法

感知机是一种简单的二分类线性模型,通过构造超平面,将特征空间(输入空间)中的样本分为正负两类。通过组合,感知机也可以处理多分类问题。但由于每次迭代都会更新模型的所有权重,被误分类的样本会造成很大影响,因此采用平均的方法,在处理完一部分样本后对更新的权重进行平均。

(2)CRF分词算法

CRF可以看作一个无向图模型,假设给定的标注序列为Y,观测序列为X,CRF对条件概率P(Y|X)进行定义,而不是对联合概率建模。

平均感知机算法虽然速度快,但仍不够准确。适合一些对速度要求高、对准确性要求相对不那么高的场景。CRF分词算法可以说是目前最常用的分词、词性标注和实体识别算法,它对未登陆词也有很好的识别能力,是目前在速度、准确率以及未登录词识别上综合表现最突出的算法,也是我们目前所采用的解决方案,但速度会比感知机慢一些。

在NLP中,最常用的神经网络为循环神经网络(RNN,Recurrent Neural Network),它在处理变长输入和序列输入问题中有着巨大的优势。LSTM(Long Short-Term Memory,长短期记忆网络)为RNN变种的一种,在一定程度上解决了RNN在训练过程中梯度消失和梯度爆炸的问题。

目前对于序列标注任务,业内公认效果最好的模型是BiLSTM+CRF。相比于上述其它模型,双向循环神经网络BiLSTM,可以更好地编码当前字等上下文信息,并在最终增加CRF层,核心是用Viterbi算法进行解码,以得到全局最优解,避免B,S,E这种不可能的标记结果的出现,提高准确率。

神经网络分词虽然能在准确率、未登录词识别上有更好的表现,但RNN无法并行计算,在速度上没有优势,所以该算法通常在算法研究、句子精确解析等对速度要求不高的场景下使用。

分词作为NLP底层任务之一,既简单又重要,很多时候上层算法的错误都是由分词结果导致的。因此,对于底层实现的算法工程师,不仅需要深入理解分词算法,更需要懂得如何高效地实现和调试。

而对于上层应用的算法工程师,在实际分词时,需要根据业务场景有选择地应用上述算法,比如在搜索引擎对大规模网页进行内容解析时,对分词对速度要求大于精度,而在智能问答中由于句子较短,对分词的精度要求大于速度。

8. nlp算法判断是不是胡乱输入

不是。该种算宽镇法不是雀巧乱胡乱输入的。nlp算法是自然语言处理算法。自然语言处理是计算顷档机科学领域与人工智能领域中的一个重要方向。

9. nlp算法是什么

nlp算法是自然语言处理。

自然语言处理( Natural Language Processing, NLP)是计算机科学领域与人工智能领域中的一个重要方向。它研究能实现人与计算机之间用自然语言进行有效通信的各种理论和方法。自然语言处理是一门融语言学、计算机科学、数学于一体的科学。

相关信息:

自然语言处理是指利用人类交流所使用的自然语言与机器进行交互通讯的技术。通过人为的对自然语言的处理,使得计算机对其能够可读并理解。自然语言处理的相关研究始于人类对机器翻译的探索。

虽然自然语言处理涉及语音、语法、语义、语用等多维度的操作,但简单而言,自然语言处理的基本任务是基于本体词典、词频统计、上下文语义分析等方式对待处理语料进行分词,形成以最小词性为单位,且富含语义的词项单元。

10. NLP自然语言处理

罗素悖论:由所有不包含自身的集合构成的集合

例子:理发师称只给那些不给自己理发隐空的人理发。

基于集合论,理发师无论给自己理发还是不给自己理发都是矛盾的。

因此集合论不是完备的。 即使后面冯罗伊德等科学家提出了各种假定条件。

由于上述的原因,集合率无法很好的描述自然语言,科学家发现通过概率模型可以更好的描述自然语言。

深度学习来处理自然语言属于概率模型

证明最小点位于坐标轴上

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自然语言处理算法相关的资料

热点内容
dd命令u盘 浏览:568
单片机生日快乐程序 浏览:891
安卓手机连车载的叫什么 浏览:223
怎么让自己的手机键盘变得好看app 浏览:53
能看qq的文件夹 浏览:515
android二维码生成代码 浏览:567
焦炉气压缩机 浏览:402
imap接收邮件服务器地址 浏览:291
小乔肖恩解压密码 浏览:645
php网页网盘源码 浏览:181
签到任务源码 浏览:814
母亲节的文案怎么写app 浏览:984
加密协议aes找不到 浏览:250
java服务器端开发源码 浏览:551
编译器编译运行快捷键 浏览:333
住房app怎么快速选房 浏览:174
怎么在电脑上编译成功 浏览:214
单片机可调时钟设计方案 浏览:192
qq文件夹密码忘记怎么找回 浏览:683
php扩展插件 浏览:608