统计自然语言处理的基础学习之一

标签: 统计 自然语言 基础 | 发表时间:2013-09-04 16:32 | 作者:viewcode
出处:http://blog.csdn.net

1. NLP的一些基本概念和问题

计算机如何处理自然语言?

理性主义:其实就是纯粹使用规则的方法处理自然语言,并认为这些语言规则天生就存在人的基因中。在计算机中重现这些规则,就能学会人的语言处理能力。

经验主义:认为人有感知和学习能力,通过概括、模式识别、联想等能力,来学习到自然语言的结构。


哲学上的问题,类似于起源之类,就先别考虑的。


统计方法在NLP中的地位是什么?

统计方法是解决NLP问题的方法之一。


问题:

一个句子是否合乎语法?是或否,这就是句子的二值问题

如何处理语言中的歧义问题?这个是NLP的难点。歧义范围包括词义、词类别、句法结构、语义范畴。


NLP学习和练习的首要条件是什么?

建立起要解决问题和获取语料库。

关于语料库,《统计NLP基础》书里给出了几个重要的语料库和URL.


NLP在统计上的一些基本问题:

一篇文章中有多少单词?

有多少个不同的单词?

每个单词出现频率是多少? “词频”

这些基本统计方法的意义是什么?


什么是Zipf法则?

最小精力付出原理:用最小的力气,做最多的事。

词频现象符合双曲分布。而不是线性或者高斯分布

词频与词的长度成反比。(这个可以用huffman编码原理理解,是历史演化的规律)

实词趋向于在相邻的位置出现,有点聚集的意思。


2. NLP的概率论基础

传统概率论概念:

概率空间

条件概率、独立性

乘法定律

贝叶斯定理:这个是很多处理方法的核心。简单实用

随机变量、随机分布、均值(期望)、方差

联合分布、条件分布

二项分布(离散的)、正态分布(连续的)

-----------------------

贝叶斯统计:

假设先验知识不是一成不变的,可以通过不断的实验,来寻找证据来更新这些先验知识。更新方法就是贝叶斯定理。

如质地均匀的硬币,正面向上的概率是0.5. 即先获取一个近似的先验分布,是P(u) = 6m(1-m)

在实验结果s的影响和更新下:

P(u|s) = p(s|u) * p(u) / p(s)

p(s)为先验概率。若10次实验、8次正面、2次反面,则更新后的先验概率就为0.75. 这样描述太粗糙了,需要仔细地看专业书来推理。


贝叶斯决策定理:

即MAP,极大后验概率决策。

由先验概率、先验概率条件下各情况发生的实际情况(如次数统计),计算出各实际情况下先验概率的更新。

并选择最大的MAP的条件进行决策。


概率论部分 是基础,需要精心的学习一下相关概念。


3. NLP的信息论基础

与其紧密相关的概念有:

概率密度函数

熵的定义   求和 -p(x) log(p(x)).  

它的意义:熵与编码长度的关系,用较少比特传输频率高的字符。利用熵理论,来确定 “求解不确定性的问题”所需多少资源。

熵与概率的关系紧密相连。


联合熵、条件熵

互信息:计算两个随机变量之间共有信息之间的度量。

噪声信道模型:信道容量、输入、输出、互信息取最大值、系统的概率分布。

香农信息论的意义:1. 定义了信息容量,使信道的传输速率有了一个上界;2.设计适当的编码能信道的传输速率最优

基于概率进行传输(翻译)。

K-L距离

交叉熵


2和3的概念在专业的书里面写的很详细,我在另外一篇blog里也总结过了,这里只列些紧要的东西。

http://blog.csdn.net/viewcode/article/details/8819361

http://blog.csdn.net/viewcode/article/details/8820272

http://blog.csdn.net/viewcode/article/details/9042187


4. 语言学基础概念

词性、词法:名词、代词、动词、形容词、副词、连词...   
短语结构:名短、动短、介词短语、副词短语、形容词短语

语义、语用

这些个都是比较专业的语言学知识。
现在自己能知道的,就是中学时学的英语的那点词法、语法,有的勉强能理解。


5. 如何证实一个二元组是短语搭配?

首先是固定短语搭配识别,二元组:
1)最简单的方法: 统计两个单词一起出现的次数/频率。这个会有很多功能词组合(如of the)的干扰,效果并不好。
2)利用词性过滤器:如形容词+名词、名词+名词、形容词+形容词+名词等。效果会很好。
观点:利用简单的统计技术+语言学知识(特征) 是很有用途的。

非固定词语搭配, 如knock on the door, knock his door, knock on the metal door.
对于这种非固定距离的搭配,采用的方法是 取一个搭配窗口,窗口中每个词对都作为候选的搭配词对,然后统计频率。这样会稍微扩大了一下计算量。
对于高频候选对,还可以统计其距离的均值和方差。距离均值和偏差是两个词之间的分布的重要特征。
若存在的是高偏差,那么这种搭配距离不固定,可能不是很有吸引力,而低偏差的搭配,说明词对的距离基本恒定,这个是一个很有意思的特征。

6. 如何对检测出的“词对”进行检验?

问题描述:应用5中的方法,检测出一个高频词对,并且是低偏差的。如 new 和companies,这个是可能的,它们并不是词对,仅仅是偶然同时出现在一个区域。
如何对这种词对进行假设检验?
若词w1,w2是完全独立产生的,那么P(w1, w2) = P(w1) * P(w2)
一般采用t分布,对均值进行假设检验。
低于a=0.005的置信水平的假设,即t 值小于 2.56,是会被拒绝的。

t分布也可以用来检测两个相近意义的词之间的差别。如strong和powerful的差别

t分布的假设前提:所有分布都服从正态分布。

其他检验方法:
卡方分布
似然比分布

7. 两个词之间的互信息如何度量?

两个词同时互现的互信息为  I (x, y)= log [ p(x, y) / p(x)p(y) ] = log [p(x|y) / p(x)] = log[p(y|x) / p(y)]

它 表明了两个词语之间有多大的联系。 若 x, y不相关,则 I(x, y)= log 1 = 0; 若x,y相关,则x,y完全相关时,p(x)=p(y), 则 I(x,y)= log [1 / p(x)].


8. 什么是shannon游戏? n元语法模型?

经典的语言建模问题,采用统计的方法,根据当前词来预测下一个词,可以用来拼写纠错,手写识别,机器翻译等等,也可以用于语义消岐和概率句法分析。

n元语法模型:
单词预测可以用下面的概率方程来表示
P(wn | w1 w2...wn-1),利用前面已经出现的n-1个词,来预测第n个词,这个就是n-1阶的马尔可夫模型,或叫n元语法模型。

n元语法模型的数量:
若一共有N个词,那么 穷举n个词组合的词表约有 N^(n-1) * (N-1) 个
2阶,3阶,4阶语言模型还是有可能的,目前而言5阶的语法模型就太大了。google的机器翻译语言模型目前应该是4阶的。

如何减小词表?
一个方法就是减小n的值,但n减小后,其推断能力也会受到影响。
另外一个方法就是使用词干化方法,删除词语的变形结尾,或使用语义类聚类的方法,构造等价类,减少词表的规模。
除了词汇,还应该考虑句子的结构,才能获取更好的结果。

9. 如何对n元语法模型进行统计估计?

继续使用概率的方式,求解P(wn | w1 w2...wn-1)
P(wn | w1 w2...wn-1) = P(w1 w2...wn) / P(w1 w2...wn-1)

1)最大似然估计
P(w1 w2...wn) = C(w1 w2 ... wn) / N,      C是n元组出现的频率,而N是训练实例的个数。
这个是最大似然估计的推导结果。
但最大似然估计有时不太适合NLP统计推理,因为数据稀疏的原因,数据不足就无法获取完整的概率分布。

采样训练数据不足,也可以用折扣的方法来弥补,即采用平滑的方法,将少量概率分配到没有看到的事件上去。

要分配多少概率到没有看到的事件上去哪?
2)Laplace法则,又称加1法
P(w1 w2...wn) = [C(w1 w2 ... wn) + 1] / (N+B)
这个方法的依据就贝叶斯估计,每个n元组都有相同的可能性,这个是假设的前提(?这个需要后续的理解)
方法缺点:依赖于词表的大小,对于大词表上的稀疏数据集,Laplace法则将太多的数据转移到未知事件上。

3)LidStone法则
Laplace平滑法则,缺点比较明显,其改进就是,将加1改为一个较小的值lamda。
P(w1 w2...wn) = [C(w1 w2 ... wn) + lamda] / (N+B*lamda)

常用的lamda值是0.5. 这个值是可以看做是最大似然估计和统一的先验概率论之间的线性插值。
这种方法的缺点: 需要猜想一个合理的lamda值,而且在低频情况下,这种方法在最大似然估计上的概率与经验分布不太相符。


4)什么是留存估计?

就是一个数据集,一部分用来训练,另外一部分留存的数据用来验证。

在训练的数据上进行验证是不正确的。

在不同的数据集上进行测试是必要的。

在训练数据上,交叉熵的值要比真实文本的熵低。


可以使用留存的数据来计算 转移的概率有多大。


5)交叉验证
相对于留存估计法,交叉验证是更有效率的,即训练数据的每一部分既作为训练数据,又作为留存验证数据。
缺点: 这种方法对低频仍然不太适用,它在较小语料库上,会导致对未知事件概率的估计偏高。

6)Good-Turing估计、古德-图灵估计法(两个人)
是一种平滑算法:
即将每个类别发生的频率r,变为 r* = (r+1) * n(r+1) / nr,      n(r+1)是训练语料中发生r+1次 N元组的个数,nr是训练语料中发生r次的N元组的个数。即调整后,每个类别的发生频率是由相邻两个类别决定。
而其概率也变为  Pr = r* / N, 这里的大N是语料库中种类个数。



从1到无穷大,所有发生的概率之和是小于1的。而剩余这部分概率就 n1 / N, 可以作为分配给未知事件的概率。

7) 常用的组合方法有哪些?
在多种模型获取不同的结果时,可以采用组合模型的方法,来获取更好的结果。
常用的方法有:
线性插值法
Katz退避法:对于频度小于某阈值的词,降低其频度,频度越小,下降就越多。这样未看见的词也会有一定的频率

10. 什么是语义消岐?有哪些处理算法?

语义有歧义,主要是因为歧义词在不同的语境有不同的含义。消岐的任务就是根据上下文环境确定一个歧义词的确切含义。
1)一些常用概念:
语义消岐的方法一般分为两类:
有监督方法: 一般是指分类任务,可以推断出分类函数的形态。但其需要标注好的语料,标注的工作比较麻烦。
无监督方法: 一般是指聚类任务。

伪词:合并两个或多个自然词来创建一个伪词,用于测试数据。人工构建含有歧义的文本。

算法的上下界:不同的歧义词,区分难度不同,应该区别对待,制定不同的区分标准。上界一般是指人工的区分度,而下界是指最简单算法的区分度。

2) 有监督消岐
有监督学习算法有很多种,而NLP中最常用的两个理论是 贝叶斯分类 和 信息论。

贝叶斯分类:
MAP, 最大化后验概率。计算一个词的后验概率时,需要两个条件:
一是统计出 这个词在每种语义中出现的概率Sk。
二是统计出 这个词在每种语义中被正确分类的概率c|Sk

然后就可以计算出 这个词 是处于哪种语义中的概率。
其算法伪代码如下:



基于信息论的算法:
Flip-Flop算法,用于处理两个语义的情况。
待详细补充。
伪代码如下:



3)基于词典或类义辞典的消岐

利用词典的解释来确定其语义

4) 无监督消岐
采用EM算法将有歧义词的上下文聚类到很多组中。

这块需要多熟悉点其他的东西才好消化。

后面对以上概念和算法,可以用natural language processing with python来实践一下。

作者:viewcode 发表于2013-9-4 8:32:40 原文链接
阅读:128 评论:0 查看评论

相关 [统计 自然语言 基础] 推荐:

统计自然语言处理的基础学习之一

- - CSDN博客互联网推荐文章
理性主义:其实就是纯粹使用规则的方法处理自然语言,并认为这些语言规则天生就存在人的基因中. 在计算机中重现这些规则,就能学会人的语言处理能力. 经验主义:认为人有感知和学习能力,通过概括、模式识别、联想等能力,来学习到自然语言的结构. 哲学上的问题,类似于起源之类,就先别考虑的. 统计方法在NLP中的地位是什么.

自然语言处理概览

- - 互联网 - ITeye博客
自然语言处理研究的是词、句、文档等几个层次的内容. 一、发展历史(前两个是理论、后一个是经验). 1、形式语法(复杂特征集). 2、词汇主义方法(WordNet、ConceptNet、FrameNet), 人工总结和整理概念、层次、结构等 . 3、统计语言模型(语言有统计规律性,让机器去自己学习规律).

自然语言处理某个pipeline

- - 互联网 - ITeye博客
1、数据源:包括文本、pdf、数据库等不同来源. 2、使用到的库:jieba gensim sklearn keras . 3、可以实现的服务:找出相关和相近词(以分词为准)、比较2个分词的相似度、和哪些相关同时和别的不相关(语义上的模糊查找). 数据源的load->gensim->classifier(传统基于词频的/深度学习的 keras).

[微信机器人_04]自然语言处理简单实现

- - CSDN博客互联网推荐文章
这篇博文中将介绍奇迹蛋自然语言处理模块的实现,自然语言处理的三个关键词:分词、建库、匹配. 机器人要如何来记忆这两组对话呢?. 这样存储当然没有问题,但是显然太土了,有没有其它的办法呢. 在存储过程中,总是希望能够去除冗余,即相同的词语能够只存储一次. 很容易想到,把句子拆分成词来存储. 如图所示,每个问题都拆分成词,并以词为节点建立树.

Quora在自然语言处理上的所做的工作

- - 标点符
问答网站最核心的内容是提供给优质的内容,如何让内容更加优质,处理分析大量的文本数据也是必不可少的工作. Quora有大量的文本数据,分布在Quora的数百万个问题、答案和评论中. 不仅如此,还有大量的元数据来补充我问答,包括”赞”和”踩”,用户对话题的兴趣或擅长与否,问题和话题的关系,话题去重合并,用户的社交和关系和影响力幅射,以及用户在Quora的每一个操作历史.

自然语言处理词向量化总结

- - 冰火岛
distributed representation 分布式表达(一类表示方法,基于统计含义),分散式表达(从一个高维空间X映射到一个低维空间Y) 分布假说(distributional hypothesis)为这一设想提供了 理论基础:上下文相似的词,其语义也相似.. 自然语言处理的基础是词向量化,即文本数值化,后面进行数据挖掘工作就和常见的任务类似,即分类,聚类等等.

自然语言处理之词性标注集

- - 标点符
词性标注(Part-of-Speech tagging 或POS tagging),又称词类标注或者简称标注,是指为 分词结果中的每个单词标注一个正确的词性的程序,也即确定每个词是名词、动词、形容词或其他词性的过程. 实词:名词、动词、形容词、状态词、区别词、数词、量词、代词. 虚词:副词、介词、连词、助词、拟声词、叹词.

自然语言处理第一番之文本分类器

- - 小石头的码疯窝
文本分类应该是自然语言处理中最普遍的一个应用,例如文章自动分类、邮件自动分类、垃圾邮件识别、用户情感分类等等,在生活中有很多例子,这篇文章主要从传统和深度学习两块来解释下我们如何做一个文本分类器. 传统的文本方法的主要流程是人工设计一些特征,从原始文档中提取特征,然后指定分类器如LR、SVM,训练模型对文章进行分类,比较经典的特征提取方法如频次法、tf-idf、互信息方法、N-Gram.

从NLP到“自然语言理解”,Facebook如何让Messenger更懂人类?

- - 雷锋网
雷锋网按:Facebook的AML和FAIR团队合作进行自然语言处理对自然语言理解进行着合作研究. 在2017年4月19日举办的F8开发者大会上,Facebook向公众介绍了他们的研究进展、自然语言理解在Facebook产品中的应用,并且介绍了平民化的自然语言理解平台CLUE,希望依靠大家的力量,继续丰富自然语言理解的应用.

周明:未来5-10年,自然语言处理将走向成熟

- - 微软亚洲研究院
近日,微软亚洲研究院副院长周明在「自然语言处理前沿技术分享会」上,与大家讲解了自然语言处理(NLP)的最新进展,以及未来的研究方向,以下内容由CSDN记者根据周明博士的演讲内容编写,略有删减. 周明博士于1999年加入微软亚洲研究院,不久开始负责自然语言研究组. 近年来,周明博士领导研究团队与微软产品组合作开发了微软小冰(中国)、Rinna(日本)、Zo(美国)等聊天机器人系统.