NLP复习大纲

news2024/9/24 3:23:03

第一章:概述

1. 什么是自然语言处理?

计算机具备人类的听、说、读、写、译、问、答、搜索、摘要、对话和聊天等能力

知识和常识进行推理和决策

支持客服、诊断、法律、教学等场景

2. 自然语言处理的主要任务有哪些?

分析、理解、转换、生成

  1. 转换:
  • 翻译 • 运用翻译规则或统计模型等,将源语言的文本转换为目标语言的文本
  • 文摘 • 对源语言的长文本进行压缩,提取出关键句子的短文本
  1. 生成
  • 自动作文 生成符合逻辑的连贯的文本
  • 聊天对话生成 模拟人类生成对话

3. 自然语言存在的难点?

词汇句法方面的问题尚未解决,已开始挑战语义、知识、推理等深层课题

  1. 注音歧义 --针对单字
  2. 语音歧义 --针对句子
  3. 分词歧义 --中文;英文介词的分割
  4. 修饰歧义
  5. 句法歧义
  6. 篇章歧义 --文章上下文语境
  7. 语义歧义 --针对单字
  8. 病构——真实文本的语言现象很复杂,不规范,不干净
  • 未登录词
  • 已知词的新用法(有事微信我
  • 不合乎语法的句子
  1. 重述
  2. 层间循环依赖问题
  • 高层模块-需要-底层模块分析
  • 底层模块-需要-高层模块的指导

第二章:文本处理基础

1. 会写正则表达式

中括号内表示匹配任意字符

"[wW]"
#匹配w或W

"[abcd]"
#匹配abcd
# 等价于[a-d]

^且方框中,放在字符最前端,表示“非” —— 非后面的字符开头
(不是字符最前端则视为匹配^本身)

"[^wW]"
#匹配不是w或W开头的字符串

如Wwthie,返回Ww后面的第一个字符,t

^且方框[]外,表示以[]里面的字符开头

'^[A-Z]'
# start with a capital letter

'^[^A-Za-z]' 
# not start with a capital letter

$表示以前面字符结尾

\.$ 
# ending with .

.$ 
# ending with any character
  • ? 前置字符出现0次或1次
  • * 前置字符出现0次或多次(包括一次)
  • + 前置字符出现1次或多次
  • . 匹配任意一个字符(只出现一次,多了少了都不行)

没有括号内外区别

.匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即0-9
\D匹配非数字,即不是数字
\s匹配空白,即 空格,tab键
\S匹配非空白
\w匹配单词字符,即a-z、A-Z、0-9、_\W 匹配非单词字符,即 "\w"的补集,等价于 [^a-zA-Z0-9_]
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有1次
?匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m,n}匹配前一个字符出现从m到n次
^匹配字符串开头
$匹配字符串结尾 (到此处结尾,后面没有内容,有内容报错)

分组

要使析取运算符仅适用于特定模式,我们需要使用括号运算符。将模式括在括号中,使其在相邻操作符中充当单个字符

语法:

  1. 优先级由高到低
  2. 匹配选择贪婪策略 —— [a-z]*,0次或者多次,然而,正则表达式
    匹配最大字符串。

捕获组

()捕获组

r=r"(\d{4})-(\d{2})-(\d\d)"
p=re.compile(r)
print(p.match('2008-12-03').group())
print(p.match('2008-12-03').group(1))
print(p.match('2008-12-03').group(2))
print(p.match('2008-12-03').group(3))
# 2008-12-03 2008 12 03

(?P)命名捕获组

p = re.compile(r'(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d\d)')
match=p.match('2008-12-03-2009')
print(match.group("year"))
print(match.group("month"))
print(match.group("day"))
# 2008 12 03

(?:) 匹配pattern,但不捕获匹配结果

pattern = r"(?P<python>123)(?:456)(789)"
string = "123456789"
match = re.match(pattern,string)
if match:
print(match.group("python"))
print(match.groups())
# 123 ('123', '789')

(?=)匹配后面跟的是pattern的内容,不匹配pattern

s="windows2019windows2018windows1989"
res=re.sub("windows(?=2018|1989)","microsoft",s)
print(res)
# windows2019microsoft2018microsoft1989
# 匹配的前面改,后面的不捕获

(?<!)匹配后面跟的不是pattern的内容,不匹配pattern

s="windows2019windows2018windows1989"
res=re.sub("windows(?!2018|1989)","microsoft",s)
print(res)
# microsoft2019windows2018windows1989

(?<=pattern) 匹配前面是pattern的内容,不匹配pattern

s="windows2019microsoft2019windows1989"
res=re.sub("(?<=windows)2019","pattern",s)
print(res)
# windowspatternmicrosoft2019windows1989

(?<!pattern) 匹配前面不是pattern的内容,不匹配pattern,

s="windows2019microfost2019"
res=re.sub("(?<!microfost)2019","pattern",s)
print(res)
windowspatternmicrofost2019

给定字符串会写程序返回查询结果

3. 会写正向、逆向和双向匹配程序

def forward_match(st, dic, max_len):
    div_res = []
    location = 0
    while location < len(st):                       # 遍历整个字符串
        longest_word = st[location]         
        for i in range(location + 1, len(st) + 1):  # 在不超MAX_LENGTH的情况下往后加单个字符判断是否满足要求
            temp_word = st[location : i]
            if len(temp_word) > max_len:        
                break
            if temp_word in dic:
                if len(temp_word) > len(longest_word):
                    longest_word = temp_word
        div_res.append(longest_word)                # 加入结果
        location += len(longest_word)
    return div_res

def backward_match(st, dic, max_len):
    # 本质就是前缀反过来
    div_res = []
    location = 0
    st = st[::-1]
    while location < len(st):           #原理同forward,在处理过程中需要加入reverse操作来保证语义通顺
        longest_word = st[location]     #不加的话从右往左看其实也是可以的
        for i in range(location + 1, len(st) + 1):
            temp_word = st[location : i]
            if len(temp_word) > max_len:
                break
            temp_word = temp_word[::-1]
            if temp_word in dic:
                if len(temp_word) > len(longest_word):
                    longest_word = temp_word
        div_res.append(longest_word)
        location += len(longest_word)
    div_res.reverse()
    return div_res

def bidir_match_1(st, dic, max_len):
    fm = forward_match(st, dic, max_len)
    bm = backward_match(st, dic, max_len)

    lenf = len(fm)                              # 分词数量
    lenb = len(bm)
    singlef = sum(1 for i in fm if len(i) == 1) # 单字数量
    singleb = sum(1 for i in bm if len(i) == 1)
    bigf = sum(len(i)** 1.2 for i in fm)           # 高颗粒度词 给1.2次幂避免权重过大
    bigb = sum(len(i)** 1.2 for i in bm)            

    evaluation_f = bigf - 3 * (lenf + singlef)        # 高颗粒度 - 分词 - 单字作为输出指标
    evaluation_b = bigb - 3 * (lenb + singleb)
    if evaluation_f > evaluation_b:
        return "forward",fm
    else:
        return "backward",bm

会阅读/根据程序写出分词结果

5. 什么是文本标记化?

字符序列转换为标记(token)序列的过程。

输入字符流生成标记的过程叫作标记化(tokenization),在这个过程中,词法分析器还会对标记进行分类

  1. 分句
  2. 分词

预处理过程

  1. 原始数据文件
  2. 非数字字符的符号转化为空,大小写转换
  3. 文本标记化 —— 分词
  4. 去停用词
  5. 词性标注
  6. 词干提取/词形还原
  7. 统计排序

6. 什么是词干提取?什么是词形还原?有什么不同?

  1. 词干提取 - Stemming
    词干提取是去除单词的前后缀得到词根的过程。大家常见的前后词缀有「名词的复数」、「进行式」、「过去分词」
  • 抽取词的词干或词根形式
  • 不一定能够表达完整语义
  • 简单
  • 如 leave leav
  1. 词形还原 - Lemmatisation
    词形还原是基于词典,将单词的复杂形态转变成最基础的形态
    词形还原不是简单地将前后缀去掉,而是会根据词典将单词进行
    转换。比如「drove」会转换为「drive」
  • 把一个词汇还原为一般形式
  • 完整语义
  • 复杂 需要词性标注标签
  • leave - leaf

第三章:文本分类

1. 随机变量

  • 是一个随机实验结果的可能数值
  • 随机变量有数值集合……
  • 随机变量可以随机地取集合里任何的值,每个值可以有不同的可能性(概率)

2. 极大似然估计

似然估计:
参数估计的方法之一。

  • 已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚
  • 参数估计就是通过若干次试验,观察其结果,利用结果推出参数的大概值,
  • 似然估计提供了一种区分概率的方法,也是一种在所有可能性中选择单个最佳概率的策略。

选出最有可能的模型
P(X)的极大似然估计;我们观察到的数据(X)是最有可能的概率值

3. 贝叶斯公式

P ( Y = y ∣ X = x ) = P ( Y = y ) P ( X = x ∣ Y = y ) ∑ y P ( Y = y ) P ( X = x ∣ Y = y ) P(Y=y|X=x)=\frac{P(Y=y)P(X=x|Y=y)}{\sum_yP(Y=y)P(X=x|Y=y)} P(Y=yX=x)=yP(Y=y)P(X=xY=y)P(Y=y)P(X=xY=y)

推导
P ( A ∣ B ) = P ( B ∣ A ) P ( A ) P ( B ) = P ( B ∣ A ) P ( A ) P ( A ) P ( A ∣ B ) + P ( A ‘ ) P ( A ‘ ∣ B ) P(A|B) = \frac{P(B|A)P(A)}{P(B)} = \frac{P(B|A)P(A)}{P(A)P(A|B) + P(A`)P(A`|B)} P(AB)=P(B)P(BA)P(A)=P(A)P(AB)+P(A)P(A‘∣B)P(BA)P(A)

4. 拉普拉斯平滑

P ( x i ∣ y ) = n i , y + a n y + V a P(x_i|y) = \frac{n_{i,y}+a}{n_y+Va} P(xiy)=ny+Vani,y+a

每个样本都+1(不一定是+1,可以自行设置别的数a),然后总样本+n(别的数a对应+na)就是加一平滑 —— laplace的特殊情况

5. 会给定计算一句话计算情感是正向还是负向的概率

记 事件:出现某句话,为B
记 事件他是正向 A
所以就现场推贝叶斯代入计算比较即可

6. 会根据混淆矩阵,计算精确率、准确率和召回率

混淆矩阵

correct(实际yes)incorrect(实际no)
select(预测yes)TPFP
not select(预测no)FNTN
  1. TP true positive:认为是正向,并且确实是正向的数量
  2. FP false positive:认为是正向,实际是负向的数据
  3. TN:认为是负,实际是负
  4. FN :认为是负,实际为正

A C C = T P + T N T P + T N + N F + F P ACC = \frac{TP+TN}{TP+TN+NF+FP} ACC=TP+TN+NF+FPTP+TN
准确率:左上到右下/总和

P R E = T P T P + F P PRE = \frac{TP}{TP+FP} PRE=TP+FPTP
精确率:左上角/上横

R E C = T P T P + F N REC = \frac{TP}{TP+FN} REC=TP+FNTP
召回率:左上角/左竖

第四章:语言模型

1. 什么是语言模型?

目标:计算一个句子或一系列单词的概率

2. 如何计算语言模型?

链式
P ( “ i t s   w a t e r   i s   s o   t r a n s p a r e n t ” ) = P ( i t s ) × P ( w a t e r ∣ i t s ) × P ( i s ∣ i t s   w a t e r ) × P ( s o ∣ i t s   w a t e r   i s ) × P ( t r a n s p a r e n t ∣ i t s   w a t e r   i s   s o ) P(“its\ water\ is\ so\ transparent”) =P(its) × P(water|its) × P(is|its\ water) × P(so|its\ water\ is) × P(transparent|its\ water\ is\ so) P(its water is so transparent)=P(its)×P(waterits)×P(isits water)×P(soits water is)×P(transparentits water is so)

问题:可能句子太多,无法有重组数据

简化假设 —— 马尔科夫假设
P ( t h e ∣ i t s   w a t e r   i s   s o t r a n s p a r e n t   t h a t ) ≈ P ( t h e ∣ t h a t ) ≈ P ( t h e ∣ t r a n s p a r e n t   t h a t ) P(the |its\ water\ is\ so transparent\ that) \approx P(the |that) \approx P(the |transparent\ that) P(theits water is sotransparent that)P(thethat)P(thetransparent that)

3. 写出句子的n元文法

类似上文,只不过马尔科夫假设后面,条件概率的条件变为n - 1元 —— 需要注意START的标注

累乘

在这里插入图片描述

4. n的选取策略

  • n >= 4时数据稀疏和计算代价又变得显著起来,实际工程中几乎不使用

更大的n:对下一个词出现的约束信息更多,具有更大的辨别

更小的n:在训练语料库中出现的次数更多,具有更可靠的统计信息,具有更高的可靠性

  • 经验上,trigram用的最多,尽管如此,原则上,能
    用bigram解决,绝不使用trigram

5. 什么是困惑度,如何计算困惑度?

困惑度Perplexity = 测试数据的逆概率,按词平均

p e r = 1 P ( w 1 . . . w n ) n per = \sqrt[n]{\frac{1}{P(w_1...w_n)}} per=nP(w1...wn)1

一元
p e r = e − 1 N ∑ i N l o g P ( w i ) per = e^{-\frac{1}{N}\sum^N_i logP(w_i)} per=eN1iNlogP(wi)

三元
p e r = e − 1 N ∑ i N l o g P ( w i ∣ w i − 2 , w i − 1 ) per = e^{-\frac{1}{N}\sum^N_i logP(w_i|w_{i-2},w_{i-1})} per=eN1iNlogP(wiwi2,wi1)

6. 自然语言处理中N-Gram模型的Smoothing算法有哪些?

  1. 数据稀疏
  2. 拉普拉斯平滑
  3. 加一平滑MLE
  4. 回退法和插值法 λ p + ( 1 − λ ) q \lambda p +(1-\lambda)q λp+(1λ)q
  5. Kneser-Ney 平滑
  • 当退回到较低阶的n-gram时,可能整体的n-gram频率不是最好的 Francisco这个词出现的频率更高,但出现在较少且独特的bigram组合 (“San Francisco”)中
  • 估计一个词在新的序列中出现的可能性有多大

7. Laplace平滑 (add-one, add-α)和回退插值法的主要思想是什么?

前者:平滑是概率量的重新分配 —— 解决零概率的问题
后者:任意两个语言模型p和q(λ∈[0,1])的线性插值也是一个有效的语言
模型 —— 使高阶语言模型更加健壮

第五章:文本纠错

1. 计算两个词的最短编辑距离

DP

DP[i,0] = i
DP[0,j] = j
for i in range(n):
    for j in range(m):
        a = DP[i-1, j] + 1 #增删
        b = DP[i, j-1] + 1 #增删
        c = 0
        if x[i] == y[j]:
            c = DP[i-1, j-1]
        else:
            c = DP[i-1, j-1] + 2 # 替换
        min_num = min(a, b, c)
DP[n, m]是最短距离

2. 什么是噪声信道模型

正确的查询通过一个噪声信道传输,在传输过程中受到外界 千扰,导致在信息接收端收到的杳询发生错误

把有噪声的输出信号恢复输入信号

看到一个拼错的单词的观察值x
-》 找出正确的单词w
w = a r g m a x P ( w ∣ x ) = P ( x ∣ w ) P ( w ) / P ( x ) ≈ a r g m a x P ( x ∣ w ) P ( w ) w = argmax P(w| x) = P(x | w)P(w)/P(x)\approx argmaxP(x | w)P(w) w=argmaxP(wx)=P(xw)P(w)/P(x)argmaxP(xw)P(w)

3. 采用噪声信道模型需要的外部资源

一些拼写错误测试集
• Wikipedia’s list of common English misspelling
• Aspell filtered version of that list
• Birkbeck spelling error corpus
• Peter Norvig’s list of errors (includes Wikipedia and
Birkbeck, for training or testing

4. 文本纠错的实现步骤

  1. 对句子的单词生成候选词集合
    • 本身
    • 差一个字母的单词
    • 同音词
  2. 选择最佳候选词
    • 噪音信道
    • 任务分类器
    • 概率获取依靠:Language mode(n-gram) 或 Channel model(信道概率)
  • 给定一个句子w1,w2,w3,…,wn
  • 对每个词wi生成候选词集
  • 选择使P(W)最大化的序列W (在所有可能的句子中替换一个词)

在这里插入图片描述

EXAMPLE:

  1. 建立词典库
  2. 对于词库里没有的词,根据编辑距离生成候选词集合
  3. 下载spell-errors.txt,计算p(x|w)
  4. 计算句子中候选词的Unigram(p(w)),Bigram(p(w|w1))概率,注意平滑
  5. 选出概率和最高的候选词,作为修改词

第六章:词的语义表示:

1. 什么是词嵌入?

映射为实数域上向量的技术

  1. one-hot表示
  2. 分布式表示 不同的方式对“公司”(或上下文)的概念进行编码。
    • 词项-文档
    • 词项-上下文矩阵

2. One hot 编码的不足?

  • 会产生大量冗余的稀疏矩阵
  • 没体现维度(单词)间的关系

3. 如何计算TFIDF

针对 词项-文档矩阵

TF:即一个词在文中出现的次数

计算 词语t 出现在文档d中的次数
t f i , j = n i , j ∑ k n k , j tf_{i,j} = \frac{n_{i,j}}{\sum_k n_{k,j}} tfi,j=knk,jni,j
IDF:逆文档频率,一个词在若干文档中出现。出现的文档数越少,值越大
i d f i = l o g ∣ D ∣ ∣ { d : t i ∈ d } ∣ idf_i = log\frac{|D|}{|\{d:t_i\in d\}|} idfi=log{d:tid}D

两者相乘为TF-IDF

4. 如何计算PMI和PPMI

Pointwise mutual information
x和y这两个词在一起出现的次数比它们独立出现的次数多吗?
P M I ( X , Y ) = l o g 2 P ( x , y ) P ( x ) P ( y ) PMI(X,Y) = log_2\frac{P(x,y)}{P(x)P(y)} PMI(X,Y)=log2P(x)P(y)P(x,y)

PPMI (Positive PMI between two words):

  • 将所有小于0的PMI值替换为零

矩阵中计算

P ( i , j ) = f ( i , j ) / [ ∑ f ( i , n ) + ∑ f ( n , j ) ] P(i,j) = f(i,j) / [\sum f(i,n) + \sum f(n, j)] P(i,j)=f(i,j)/[f(i,n)+f(n,j)]
【就是(交点)除以(竖之和加横之和)

P ( i ) = ∑ f ( i , n ) / [ ∑ f ( i , n ) + ∑ f ( n , j ) ] P(i) = \sum f(i,n) / [\sum f(i,n) + \sum f(n, j)] P(i)=f(i,n)/[f(i,n)+f(n,j)]

(横之和)/(竖之和加横之和)

P ( i ) = ∑ f ( n , j ) / [ ∑ f ( i , n ) + ∑ f ( n , j ) ] P(i) = \sum f(n,j) / [\sum f(i,n) + \sum f(n, j)] P(i)=f(n,j)/[f(i,n)+f(n,j)]
算出P(i,j),P(i),P(j)代入上式PMI

5. 计算词语之间的余弦相似度

c o s ( v , w ) = v ∗ w ∣ v ∣ ∣ w ∣ = ∑ v i w i v i 2 w i 2 cos(v,w) = \frac{v * w}{|v||w|} = \frac{\sum v_iw_i}{\sqrt{v_i^2}{\sqrt{w_i^2}}} cos(v,w)=v∣∣wvw=vi2 wi2 viwi

  • -1: 向量指向相反的方向
  • +1: 向量指向同一个方向
  • 0: 向量正交

原始频率或PPMI为非负,因此余弦
范围为0-1

6. CBOW和Skip-Gram相同和不同之处

Skip-gram:基于目标词预测上下文

  • 以这个句子中的某个词作为训练输入 比如orange,通常把这样的词叫做中心词(center word)
  • 以这个词周围的词作为训练标签 比如juice,也叫做上下文词(context word)
  • 训练一个输入中心词预测上下文词的模型

CBOW:与SG相反,基于临近词(上下文词)预测目标词

相同之处:他们建立的模型是fake task,目的是为了获得词向量/词矩阵

第七章:词性标注

1. 什么是生成模型

由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。

基本思想是首先建立样本的联合概率概率密度模型P(X,Y),然后再得到后验概率P(Y|X),再利用它进行分类。

P ( x , y ) = P ( y ) P ( x ∣ y ) P(x,y) = P(y)P(x|y) P(x,y)=P(y)P(xy)

2. 什么是判别模型

由数据直接学习决策函数Y=f(X) 或者 条件概率分布P(Y|X) 作为预测的模型,即判别模型。

基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。典型的判别模型包括k近邻,感知级,决策树,支持向量机等

  • 给定输入x
  • 预测要输出什么y

EXAMPLE:

判别式模型:要确定一个羊是山羊还是绵羊,用判别式模型的方法是从历史数据中学习到模型,然后通过提取这只羊的特征来预测出这只羊是山羊的概率,是绵羊的概率。

生成式模型:是根据山羊的特征首先学习出一个山羊的模型,然后根据绵羊的特征学习出一个绵羊的模型,然后从这只羊中提取特征,放到山羊模型中看概率是多少,再放到绵羊模型中看概率是多少,哪个大就是哪个。

3. 隐马尔可夫模型的五个要素

  1. S:隐含状态集合。
  2. N:观察状态集合。
  3. A:隐藏状态间的转移概率矩阵。
  4. B:隐-显状态发散矩阵(即隐藏状态到输出状态的概率)。
  5. π \pi π:初始概率分布(隐藏状态的初始概率分布)。

4. 隐马尔可夫模型解决的三个问题

  1. 在给定模型 μ = ( A , B , π ) \mu =(A, B, \pi) μ=(A,B,π) 观察序列O=O1O2…OT的情况下,怎样快速计算概率p(O|μ)? --前向算法
  2. 在给定模型 和观察序列O=O1O2…OT的情况下,如何选择在一定意义下“最优”的状态序列Q = q1 q2 … qT,使得该状态序列“最好地解释”观察序列? —— 类似求最大似然估计 – Viterbi搜索算法
  3. 给定一个观察序列O=O1O2…OT ,如何根据最大似然估计来求模型的参数值?即如何调节模型的参数,使得p(O|μ)最大? – 前向后向算法

5. 隐马尔可夫模型的两个假设

  1. 如果在特定情况下,系统在时间t 的状态只与其在时间t-1 的状态相关,则该系统构成一个离散的一阶马尔可夫链
    p ( q t = S j ∣ q t − 1 = S i , q t − 2 = S j . . . ) = p ( q t = S j ∣ q t − 1 = S i ) p(q_t=S_j|q_{t-1}=S_i, q_{t-2}=S_j...) = p(q_t=S_j|q_{t-1}=S_i) p(qt=Sjqt1=Si,qt2=Sj...)=p(qt=Sjqt1=Si)
    类比2-gram模型

  2. 如果只考虑独立于时间t 的随机过程,即所谓的不动性假设,状态与时间无关,那么
    p ( q t = S j ∣ q t − 1 = S i ) = a i j p(q_t=S_j|q_{t-1} = S_i) = a_{ij} p(qt=Sjqt1=Si)=aij

6. 维特比算法的实现过程以及每个节点更新伪代码

在这里插入图片描述
在这里插入图片描述

第八章:逻辑回归和最大熵马尔可夫模型

1. 逻辑回归的假设函数

p = 1 1 + e − z p=\frac{1}{1+e^{-z}} p=1+ez1
得到[0,1]之间输出

2. 最大熵马尔可夫模型和隐马尔科夫模型的不同

  • HMM模型是对转移概率和表现概率直接建模,统计共现概率,HMM就是典型的概率有向图,其就是概率有向图的计算概率方式,只不过概率有向图中的前边节点会有多个节点,而隐马尔可夫前面只有一个节点

  • MEMM模型是对转移概率表现概率建立联合概率,统计时统计的是条件概率,但MEMM容易陷入局部最优,是因为MEMM只在局部做归一化

EXAMPLE:
对于一个标注任务,“我爱北京天安门“, 标注为” s s b e b c e”。

对于HMM的话,其判断这个标注成立的概率为 P = P ( s 转移到 s ) × P ( ‘我’表现为 s ) × P ( s 转移到 b ) × P ( ‘爱’表现为 s ) × … × P ( ) P= P(s转移到s)×P(‘我’表现为s)× P(s转移到b)×P(‘爱’表现为s)× …×P() P=P(s转移到s)×P(表现为s)×P(s转移到b)×P(表现为s)××P()

训练时,要统计状态转移概率矩阵和表现矩阵。

对于MEMM的话,其判断这个标注成立的概率为 P = P ( s 转移到 s ∣ ’我’表现为 s ) × P ( ‘我’表现为 s ) × P ( s 转移到 b ∣ ’爱’表现为 s ) × P ( ‘爱’表现为 s ) × . . P= P(s转移到s|’我’表现为s)×P(‘我’表现为s)× P(s转移到b|’爱’表现为s)×P(‘爱’表现为s)×.. P=P(s转移到s∣’表现为s)×P(表现为s)×P(s转移到b∣’表现为s)×P(表现为s)×..训练时,要统计条件状态转移概率矩阵和表现矩阵,相比于HMM,状态转移概率矩阵变成了条件状态概率矩阵。

3. 标注偏置问题

MEMM模型克服了观察值之间严格独立产生的问题,但是由于状态之间的假设理论,使得该模型存在标注偏置问题

状态总是倾向于留在自己的状态——而不是其他状态

由于分支数不同,概率的分布不均衡,导致状态的转移存在不公平的情况。

第九章:命名实体识别

1. 中文命名实体识别的难点

  • 实体边界识别和确定实体类别

时间、日期、货币和百分比的构成有比较明显的规律,识别起来相对容易
人名、地名、机构名的用字灵活,识别的难度很大

  • 在不同领域、 场景下, 命名实体的外延有差
  • 数量巨大,不能枚举,难以全部收录在词典中
  • 某些类型的实体名称变化频繁,并且没有严格的规律可以遵循
  • 表达形式多样
  • 首次出现后往往采用缩写形式

2. 隐马尔可夫模型与CRF模型的不同?

  1. 与HMM比较,CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。特征设计灵活(与MEMM一样)

3. 马尔科夫随机场,满足哪些特性?

  1. 成对马尔科夫性
  2. 局部马尔科夫性
  3. 全局马尔可夫性
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

4. 团和最大团

在这里插入图片描述

5. 条件随机场

设X与Y是随机变量,P(Y|X)是在给定X的条件下Y的条件概率分布。若随机变量Y构成一个由无向图G=(V,E)表示的马尔可夫随机场,则称条件概率分布P(Y|X)为条件随机场。

P ( Y v ∣ X , Y w , w ≠ v ) = P ( Y V ∣ X , Y w , w v ˜ ) P(Y_v|X,Y_w, w\neq v) = P(Y_V|X, Y_w,w\~v) P(YvX,Yw,w=v)=P(YVX,Yw,wv˜)

其中,w~v表示在图G=(V,E)中与结点v有边连接的所有结点w,w≠v表
示结点v以外的所有结点

6. 条件随机场通常采用的特征函数

在这里插入图片描述

7. 条件随机场解码方法

问题描述:给定条件随机场P(Y|X)和输入序列(观察序列)x,求条件概率
最大的输出序列(标记序列)y*
 Viterbi算法:

  • 根据上述公式,条件随机场的预测问题成为求非规范化概率最大的最优路径问题

第十章:成分句法分析

1. 什么上下文无关文法

若一个形式文法 G = ( N , Σ , P , S ) G = (N, Σ, P, S) G=(N,Σ,P,S) 的产生式规则都取如下的形式: V − > w V->w V>w,则谓之。其中 V ∈ N , w ∈ ( N ∪ Σ ) ∗ V∈N ,w∈(N∪Σ)* VNw(NΣ)

2. 什么是乔姆斯基范式

在计算机科学中,一个形式文法是Chomsky 范式的,当且仅当所有产生规则都有如下形式:

  1. A → B C A→BC ABC
  2. A → α A→ α Aα
  3. S → ε S→ ε Sε

这里的A,B和C是非终结符,α 是终结符(表示常量值的符号),S是开始符号,而 ε 是空串。还有,B和C都不可以是开始符号

所有的 Chomsky 范式的文法都是上下文无关,反过来,所有上下文无关文法都可以有效的变换成等价的 Chomsky 范式的文法。

3. CKY算法的实现

矩阵上三角的DP

function CKY-PARSE(words, grammar) returns table
​
  for j from 1 to LENGTH(words) do
    for all {A | A -> words[j] in grammar}
      table[j-1, j] += A
    for i from j-2 to 0 do
      for k from i+1 to j-1 do
        for all {A | A -> BC in grammar and B in table[i,k] and C in table [k,j]}
          table[i,j] += A

4. CKY for PCFGs算法实现

找出若干个PCFGs树,选出来概率最高的那个树

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/372678.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

要理解网络,其实不就是理解这三张表吗

我们如果要理解数据是如果在网络世界中穿梭的&#xff0c;那其实只要了解其中的三张表就可以了。这三张表分别为路由表、转发表、ARP 表。 假设我们用聊天工具聊天的时候&#xff0c;我在北京&#xff0c;你在广东&#xff0c;当我给你发送一条消息的时候。搭载这这条消息的数据…

带你沉浸式体验删库跑路

前言:学习的过程比较枯燥,后面会记录一些比较有意思的东西&#xff0c;比如程序员之间流传的删库跑路的梗,当然本次测试是在虚拟机上进行的并进行了快照保护,所以其实没太大问题。首先得要有一个虚拟机要有一个linux iso文件装在虚拟机上以上两点不是本文重点,如果有需要可以私…

CLIP论文阅读

Learning Transferable Visual Models From Natural Language Supervision 利用自然语言的监督信号学习可迁移的视觉模型 概述 迁移学习方式就是先在一个较大规模的数据集如ImageNet上预训练&#xff0c;然后在具体的下游任务上再进行微调。这里的预训练是基于有监督训练的&am…

排序基础之插入排序

目录 前言 一、什么是插入排序 二、实现插入排序 三、插入排序优化 四、插入排序的特性 前言 上一篇中我们说到了《排序基础之选择排序》&#xff0c;这一篇我们来学习一下排序算法中的另一种基础排序算法——插入排序。 一、什么是插入排序 简单来说就是&#xff1a;每…

break与continue关键字

1.概述 不知道大家有没有这样一种感受哈&#xff0c;有的时候容易混淆break语句和continue语句的用法&#xff0c;总是模棱两可&#xff0c;不敢确定自己是否使用正确了。正好&#xff0c;我们本篇的重点就是break和continue关键字的用法。 2.使用场景 Java中为啥会诞生break…

js——原型和原型链

最近看了很多面试题&#xff0c;看到这个js原型是常考点&#xff0c;于是&#xff0c;我总结了一些该方面的知识点分享给大家&#xff0c;其实原型就是那么一回事&#xff0c;搞明白了就没啥了。结果如下图所示&#xff1a;原型原型又可分为显式原型和隐式原型1.1显式原型显式原…

Linux C代码获取线程ID

Linux C代码获取线程ID gettid可以获取线程id,但是通过man gettid可以看到下面这两句 也就是说glibc没有为这个gettid封装系统调用&#xff0c;需要使用syscall。 #define _GNU_SOURCE#include <unistd.h>#include <sys/syscall.h>#include <sys/types.h>ti…

自动化测试 selenium常用操作

最简单的代码实例import org.openqa.selenium.By; import org.openqa.selenium.chrome.ChromeDriver;public class AutoTestDemo1 {//浏览器自动搜索,暂停是为了能看到&#xff0c;要不访问太快public void testKunKun() throws InterruptedException {//打开浏览器ChromeDrive…

【软件工程】课程作业(三道题目:需求分析、概要设计、详细设计、软件测试)

文章目录&#xff1a;故事的开头总是极尽温柔&#xff0c;故事会一直温柔……&#x1f49c;一、你怎么理解需求分析&#xff1f;1、需求分析的定义&#xff1a;2、需求分析的重要性&#xff1a;3、需求分析的内容&#xff1a;4、基于系统分析的方法分类&#xff1a;5、需求分析…

Java static关键字(重新认识main方法)

static关键字一、static修饰成员的特点二、static什么时候使用三、static注意事项四、重新认识main方法static 是静态的意思&#xff0c;可以修饰成员变量&#xff0c;也可以修饰成员方法 一、static修饰成员的特点 被其修饰的成员, 被该类的所有对象所共享多了一种调用方式, 可…

Vue(6)

文章目录1. 自定义指令1.1 函数式1.2 对象式1.3 自定义指令常见坑1.4 创建全局指令2. 生命周期2.1 引出生命周期2.2 分析生命周期2.3 总结3. 组件3.1 认识组件3.2 使用组件 (非单文件组件)3.3 全局组件3.4 组件的几个注意点3.5 组件的嵌套3.6 VueComponent 构造函数3.7 一个重要…

openresty学习笔记

openresty 简介 openresty 是一个基于 nginx 与 lua 的高性能 web 平台&#xff0c;其内部 集成了大量精良的 lua 库、第三方模块以及大数的依赖项。用于 方便搭建能够处理超高并发、扩展性极高的动态 web 应用、 web 服务和动态网关。 openresty 通过汇聚各种设计精良的 ngi…

LearnOpenGL-入门-纹理

本人刚学OpenGL不久且自学&#xff0c;文中定有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/LearnOpenGLProject LearnOpenGL中文官网&#xff1a;https://learnopengl-cn.github.io/ 文章目录纹理纹理环绕方式纹理过滤多…

3.抽象工厂模式(Abstract Factory)

与工厂模式对比 工厂模式 工厂模式是类创建模式。在工厂模式中&#xff0c;只需要生产同一种产品&#xff0c;只不过是生产厂家不同。 所以产品类的设计&#xff1a; 抽象的产品类Product具体的产品类Product_A&#xff0c;Product_B, Product_C, Product_D…… 工厂的设计…

BFC的含义以及应用

什么是BFC? BFC全称是Block Formatting context&#xff0c;翻译过来就是块级格式化上下文。简单来说&#xff0c;BFC是一个完全独立的空间。让空间里的子元素不会影响到外面的布局。&#x1f603;&#x1f603;&#x1f603; 如何触发BFC呢&#xff1f; mdn给了如下方式&a…

HMM-理论补充

目录 一.隐马尔科夫模型 二.HMM定义 三.隐马尔科夫模型的贝叶斯网络 四.HMM的确定 五.HMM的参数 六.HMM的参数总结 七.HMM的两个基本性质 1.齐次假设&#xff1a; 2.观测独立性假设&#xff1a; 八.HMM举例 九.HMM的3个基本问题 十.概率计算问题 1.直接算法 2.前向…

C语言学习笔记——程序环境和预处理

目录 前言 一、程序环境 1. 翻译环境 1.1 主要过程 1.2 编译过程 2. 运行环境 二、预处理 1. 预定义符号 2. #define 2.1 #define定义标识符 2.2 #define定义宏 2.3 命名约定和移除定义 3. 条件编译 4. 文件包含 结束语 前言 每次我们写完代码运行的时候都…

刷题28-有效的变位词

32-有效的变位词 解题思路&#xff1a; 注意变位词的条件&#xff0c;当两个字符串完全相等或者长度不等时&#xff0c;就不是变位词。 把字符串中的字符映射成整型数组&#xff0c;统计每个字符出现的次数 注意数组怎么初始化&#xff1a; int [] s1new int[26]代码如下&a…

C语言数据结构(一)—— 数据结构理论、线性表【动态数组、链表(企业版单向链表)】

数据结构理论1.1 数据数据&#xff1a;是描述客观事物的符号&#xff0c;是计算机中可以操作的对象&#xff0c;是能被计算机识别&#xff0c;并输入给计算机处理的符号集合。数据不仅仅包括整型、实型等数值类型&#xff0c;还包括字符及声音、图像、视频等非数值类型。1.2数据…

决策树、随机森林、极端随机树(ERT)

声明&#xff1a;本文仅为个人学习记录所用&#xff0c;参考较多&#xff0c;如有侵权&#xff0c;联系删除 决策树 通俗来说&#xff0c;决策树分类的思想类似于找对象。现想象一个女孩的母亲要给这个女孩介绍男朋友&#xff0c;于是有了下面的对话&#xff1a; 女儿&#x…