自然语言处理复习汇总(南京大学)

时间:2021-04-16 01:35:30

自然语言处理复习汇总(南京大学)

标签(空格分隔): 自然语言处理
参考书籍:统计自然语言处理–宗成庆
该文档用markdown编写,github地址为https://github.com/lyfadvance/nlp/blob/master/%E8%87%AA%E7%84%B6%E8%AF%AD%E8%A8%80%E5%A4%84%E7%90%86%E5%A4%8D%E4%B9%A0%E6%96%87%E6%A1%A3.md
如果想继续编写,可以fork


统计语言模型

N-Gram

N-1阶马尔可夫链我们称之为N元语言模型

P(wi|wi1)=P(wi1wi)P(wi1)=Count(wi1wi)wCount(wi1w)

Count(wi1wi) 由于稀疏性,值可能等于0.从而导致整个句子的概率都等于0

进行平滑处理:

线性平滑:

P(wi|wi1)=P(wi1wi)P(wi1)=Count(wi1wi)+αw(Count(wi1w)+α)

laplace 平滑:

P(wi|wi1)=P(wi1wi)P(wi1)=Count(wi1wi)+kP(w)(wCount(wi1w))+k

简单线性插值平滑:

Neural language model

word2vector

文本分类

朴素贝叶斯模型

D为待分类的文档, ck 指第k个类别

argmaxckP(ck|D)=argmaxckP(D|ck)P(ck)P(D)=argmaxckP(D|ck)P(ck)

1. Bernoulli document model(伯努利文档模型)

一个文档被表示成01向量.向量中每一个元素表示相应的单词是否在文档中出现了
Di 表示第i个文档的01向量

Dit 表示第i个文档的01向量中第t个元素的值,即单词 wt 是否在文档i中出现了
P(wt|ck) 表示单词 wt 在类别 ck 中出现的文档数的占比.

P(wt|ck)=ckwtck

P(Dit|ck)=DitP(wt|ck)+(1Dit)(1P(wt|ck))

P(Di|Ck)=|V|t=1P(Dit|ck)

2. Multinomial document model

一个文档被表示成整数向量.向量中每一个元素表示相应的单词在文档中出现了多少次

Di 表示第i个文档的向量

Dit 表示第i个文档的向量中第t个元素的值

P(wt|ck) 表示单词 wt 在类别 ck 中出现的文档数的占比.

训练句向量

一般来讲每一个类别 ck 也可以看成一个向量,记为 f(ck)

文本 Di 也表示成向量 w

训练句向量也就是训练打分模型 score(w,f(ck))

可以根据这个设计各种loss函数。用SVM的loss函数训练

文本或句子向量化

词袋模型

0-1向量

N-Gram Bag-of-Words

Vocab = set of all n-grams in corpus

Document = n-grams in document w.r.t vocab with multiplicity

For bigram:

Sentence 1: “The cat sat on the hat”

Sentence 2: “The dog ate the cat and the hat”

Vocab = { the cat, cat sat, sat on, on the, the hat, the dog, dog ate, ate the, cat and, and the}

Sentence 1: { 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}

Sentence 2 : { 1, 0, 0, 0, 0, 1, 1, 1, 1, 1}

TF-IDF

TF(词频)

(TF)=

IDF(逆文档频率)

(IDF)=log+1

特征过滤

  • 停用词
  • 基于文档频率(DF)的特征提取法
    从训练预料中统计出包含某个特征的文档的频率(个数),然后根据设定的阈值,当该特征项的DF值小于某个阈值时,从特征空间中去掉该特征项,因为该特征项使文档出现的频率太低,没有代表性;当该特征项的DF值大于另外一个阈值时,从特征空间中也去掉该特征项,因为该特征项使文档出现的频率太高,没有区分度
  • 信息增益法
    信息增益(IG)法依据某特征项 ti 为整个分类所能提供的信息量多少来衡量该特征项的重要程度,从而决定对该特征项的取舍。某个特征项 ti 的信息增益是指有该特征或没有该特征时,为整个分类所能提供的信息量的差别,其中,信息量的多少由熵来衡量。因此,信息增益即不考虑任何特征时文档的熵和考虑该特征后文档的熵的差值:
    Gain(ti)=Entropy(S)Expected Entropy(Sti)={j=1MP(Cj)logP(Cj)}{P(ti)[j=1MP(Cj|ti)logP(Cj|ti)]   +P(ti¯)[j=1MP(Cj|ti¯)logP(Cj|ti¯)]}

    其中 P(Cj) 表示 Cj 类文档在预料中出现的概率, P(ti) 表示语料中包含特征项 ti 的文档的概率, P(Cj|ti) 表示文档包含特征项 ti 时属于 Cj 类的条件概率, P(ti¯) 表示语料中不包含特征项 ti 的文档的概率, P(Cj|ti¯) 表示文档不包含特征项 ti 时属于 Cj 的条件概率, M 表示类别数
  • mutual information(互信息法)
  • χ2 统计量

Distributional similarity-based representations

  • LSI
  • First Propose
  • Word2vec
  • Doc2Vec

词性标注与隐马尔科夫模型

维特比算法和算法

A 是状态转移概率矩阵

B 是观测概率矩阵

π 是初始状态概率向量

隐马尔科夫模型的三个基本问题

  • 概率计算问题。给定模型 λ=(A,B,π) 和观测序列 O=(o1,o2,...,oT) ,计算在模型 λ 下观测序列 O 出现的概率 P(O|λ)
  • 学习问题.已知观测序列 O=(o1,o2,...,oT) .估计模型 λ=(A,B,π) 参数,使得在该模型下观测序列概率 P(O|λ) 最大.即用极大似然估计的方法估计参数.
  • 预测问题,也称为解码(decoding)问题。已知模型 λ=(A,B,π) 和观测序列 O=(o1,o2,...,oT) ,求对给定观测序列条件概率 P(I|O) 最大的状态序列 I=(i1,i2,...,iT) .即给定观测序列,求最有可能的对应的状态序列.

问题1:

前向算法.

定义前向概率:

给定隐马尔科夫模型 λ ,定义到时刻 t 部分观测序列为 o1,o2,...,ot 且状态为 qi 的概率为前向概率,记作

αt(i)=P(o1,o2,...,ot,it=qi|λ)

输入:隐马尔科夫模型 λ ,观测序列 O

输出:观测序列概率 P(O|λ)

(1) 初值

α1(i)=πibi(o1),i=1,2,...,N

(2) 递推 对t=1,2,…,T-1

αt+1(i)=j=1Nαt(j)ajibi(ot+1),i=1,2,...N

(3) 终止

P(O|λ)=i=1NαT(i)

(4)最优路径回溯

后向算法:

定义后向概率:

给定隐马尔科夫模型 λ ,定义在时刻 t 状态为 qi 的条件下,从 t+1 T 的部分观测序列为 ot+1,ot+2,...,oT 的概率为后向概率,记作

βt(i)=P(ot+1,ot+2,...,oT|it=qi,λ)

输入:隐马尔可夫模型 λ ,观测序列 O :

输出:观测序列概率 P(O|λ)

(1)

βT(i)=1,i=1,2,...,N

(2)对 t=T1,T2,...,1

βt(i)=j=1Naijbj(ot+1)βt+1(j),i=1,2...N

(3)

P(O|λ)=i=1Nπibi(o1)β1(i)

问题2

Baum-Welch算法(无监督学习方法)

假设给定训练数据只包含 S 个长度为 T 的观测序列 O1,O2,...,OS 而没有对应的状态序列,目标是学习隐马尔科夫模型 λ=(A,B,π) 的参数。我们将观测序列数据看做观测数据 O ,状态序列数据看做不可观测的隐数据 I ,那么隐马尔科夫模型事实上是一个含有隐变量的概率模型

P(O|λ)=IP(O|I,λ)P(I|λ)

它的参数学习可以由 EM 算法实现

参数估计问题是HMM面临的第三个问题,即给定一个观察序列 O=O1O2...OT ,如何调节模型 u=(A,B,π) 的参数,使得 P(O|u) 最大化:

argmaxuP(Otraining|u)

模型的参数是指构成 u πi,aij,bj(k) .最大似然估计方法可以作为HMM参数估计的一种选择。如果产生观察序列 O 的状态序列 Q=q1q2...qT 已知,根据最大似然估计,HMM的参数可以通过如下公式计算:
π¯i=δ(q1,si)

a¯ij=QqiqjQqi(qi)=T1t=1δ(qt,si)δ(qt+1,sj)T1t=1δ(qt,si)

b¯j(k)=QqjvkQqj

但实际上,由于HMM中的状态序列Q是观察不到的(隐变量),因此,这种最大似然估计的方法不可行。所幸的是,期望最大化(expectation maximization,EM)算法可以用于含有隐变量的统计模型的参数最大似然估计。其基本思想是,初始时随机地给模型的参数赋值,该复制遵循模型对参数的限制,例如,从某一状态出发的所有转移概率的和为1。给模型参数赋初值以后,得到模型 u0 ,然后,根据 u0 可以得到模型中隐变量的期望值。例如,从u_0得到从某一状态转移到另一状态的期望次数,用期望次数来替代上式中的实际次数,这样可以得到模型参数的新估计值,由此得到新的模型 u1 .从 u1 又可以得到模型中隐变量的期望值,然后,重新估计模型的参数,执行这个迭代过程,知道参数收敛于最大似然估计值.

问题3

维特比算法:

其实就是前向算法的变种形式

输入:隐马尔科夫模型 λ ,观测序列 O

输出:最优路径 I=(i1,i2,...,iT)

(1) 初值

α1(i)=πibi(o1),i=1,2,...,N

ψ1(i)=0

(2) 递推 对t=1,2,…,T-1

αt+1(i)=max1jNj=1Nαt(j)ajibi(ot+1),i=1,2,...N

ψt+1(i)=argmax1jNj=1Nαt(j)aji,i=1,2,...N

(3) 终止

P=max1iNαT(i)

iT=argmaxiiNαT(i)

统计语义分析

PCFG,概率上下文无关文法

三个基本问题
- 给定一个句子 W=w1w2...wn 和文法 G ,如何快速计算概率 P(W|G)
- 给定一个句子 W=w1w2...wn 和文法 G ,如何选择该句子的最佳结构?即选择句法结构树 t 使其具有最大概率: argmaxtP(t|W,G)
- 给定PCFG G和句子 W=w1w2...wn ,如何调节G的概率参数,使句子的概率最大?即求解 argmaxGP(W|G)

问题1:

内向算法和外向算法:

内向算法的基本思想是:利用动态规划算法计算非终结符 A 推导出 W 中子串 wiwi+1...wj 的概率 aij(A)

有递推公式如下:

aii(A)=P(A>wi)

aij(A)=B,Cikj1P(A>BC)aik(B)a(k+1)j(C)

算法如下:

输入:PCFG G(S)和句子 W=w1w2...wn

输出: aij(A),1ijn

步1 初始化: aii(A)=P(Awi),1in

步2 归纳计算: j=1...n,i=1...nj ,重复下列计算:

ai(i+j)(A)=B,Ciki+j1P(ABC)aik(B)a(k+1)(i+j)(C)

步3 终结: P(Sw1w2...wn)=a1n(S)

外向算法的基本思想是:

定义外向变量 βij(A) 为初始非终结符 S 在推导出语句 W=w1w2...wn 的过程中,产生符号串 w1...wi1Awj+1...wn 的概率

有如下递推公式:

β1n(A)={10A=SAS

βij(A)=B,Ck>jP(BAC)α(j+1)k(C)βik(B)   +B,Ck<iP(BCA)αk(i1)(C)βkj(B)

问题2:
就是将内向算法的递推式取最大
aii(A)=P(Awi)

aij(A)=argmaxB,CN;iki+jP(ABC)aik(B)a(k+1)j(C)

然后用变量 βij 记忆子串 wi...wj 的维特比句法分析树

βij(A)=argmaxB,CN;iki+jP(ABC)aik(B)a(k+1)j(C)

Treebank

Chomsky Normal Form

统计机器翻译