NLP大纲

news2024/12/19 14:24:38

第一章:概述

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)TPTF
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/371691.html

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

相关文章

SpringBoot-运维实用篇

SpringBoot运维实用篇 1.SpringBoot程序的打包与运行 ​ 刚开始做开发学习的小伙伴可能在有一个知识上面有错误的认知&#xff0c;我们天天写程序是在Idea下写的&#xff0c;运行也是在Idea下运行的。 ​ 但是实际开发完成后&#xff0c;我们的项目是不可能运行在自己的电脑上…

图解LeetCode——剑指 Offer 46. 把数字翻译成字符串

一、题目 给定一个数字&#xff0c;我们按照如下规则把它翻译为字符串&#xff1a;0 翻译成 “a” &#xff0c;1 翻译成 “b”&#xff0c;……&#xff0c;11 翻译成 “l”&#xff0c;……&#xff0c;25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数&#x…

spring boot3 一、 spring alibaba cloud 整合 网关 nacos config

jm-apis服务jm-user-api用户服务jm-apis-common公共模块jm-apis-common-bean公共beanjm-apis-common-conf公共配置jm-apis-common-tool公共工具jm-dubbo-apisRPC服务jm-dubbo-user-api用户RPC服务 jianmu-springboot3-springalibabacloud pom.xml <?xml version"1.0&…

电容学习(1)

电解电容 是具有极性的电容&#xff1b; 电解电容的体积大&#xff0c;只有在需要较大容值的时候才需要&#xff1b; 缺点&#xff1a;电解电容容值不稳定&#xff0c;容易随着温度和其他参数变化而变化&#xff1b;因此相对来说非电解电容更稳点一些&#xff1b; 电容的公式&…

如何定制一个智能洒水装置(养狗/养花人士请进)

目录 如何用智能地教狗狗上厕所如何定制一个智能洒水装置 背景 上一篇文章中提到了&#xff0c;我实现了一个自动检测狗狗有没有进厕所的功能。现在我们家的狗狗用它那不算大的小脑瓜&#xff0c;已经百分百学会&#xff08;但是&#xff01;也不知道它是不是聪明过头了&…

非常好看的html网页个人简历

一. 前言 文末获取gitee链接 在前几天逛b站的时候&#xff0c;发现了个比较实用的东西-----个人简介网页版&#xff0c;相当于网页版的个人简历&#xff0c;相较于PDF形式的&#xff0c;网页版所能呈现内容更加丰富&#xff0c;而且更加美观&#xff0c;在BOOS上被HR小姐姐要…

FL Studio21MAC电脑中文升级版安装图文教程

FL Studio版本有很多,每个版本各有优点。除了最新版本外,还有历史经典版本,用户可以根据自己的需求进行下载,FL Studio21是一款功能十分丰富和强大的音乐编辑软件&#xff0c;能够帮助用户进行编曲、剪辑、录音、混音等操作&#xff0c;让用户能够全面地调整音频&#xff0c;软…

2288hv5超融合服务器 数码管报888

【问题现象】 2288hv5超融合服务器&#xff0c;前面板数码管报888&#xff0c;电源灯黄灯闪烁&#xff0c;开不了机&#xff0c;ibmc网络是通的&#xff0c;但是web网页打不开 【问题原因】 iBMC的版本过低&#xff0c;iBMC在智能诊断数据库保护机制存在异常&#xff0c;导…

【算法笔记】前缀和与差分

第一课前缀和与差分 算法是解决问题的方法与步骤。 在看一个算法是否优秀时&#xff0c;我们一般都要考虑一个算法的时间复杂度和空间复杂度。 现在随着空间越来越大&#xff0c;时间复杂度成为了一个算法的重要指标&#xff0c;那么如何估计一个算法的时间复杂度呢&#xf…

数据库浅谈之共识算法

数据库浅谈之共识算法 HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是数据库浅谈系列&#xff0c;收录在专栏 DATABASE 中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些数据库领域相关的知识 &#x1…

Linux SELinux讲解

目录 SELinux概念 SELinux配置文件 SELINUX 工作模式 SELINUX TYPE策略类型 配置安全上下文 查看安全上下文 修改安全上下文 修改默认的安全上下文 配置策略规则 查看策略规则 修改策略规则状态 SELinux概念 为什么提出SELinux 之前学习的权限&#xff0c;都是基于用…

深力科电子-MachXO2系列 前所未有的灵活桥接和I/O扩展功能 LCMXO2-256HC-4TG100C FPGA现场可编程门阵列

lattice莱迪斯MachXO2系列超低密度FPGA现场可编程门阵列&#xff0c;适用于低成本的复杂系统控制和视频接口设计开发&#xff0c;满足了通信、计算、工业、消费电子和医疗市场所需的系统控制和接口应用。 瞬时启动&#xff0c;迅速实现控制——启动时间小于1mS&#xff0c;在上…

FreeRTOS信号量

前面介绍过&#xff0c;队列&#xff08;queue&#xff09;可以用于传输数据&#xff1a;在任务之间&#xff0c;任务和中断之间。消息队列用于传输多个数据&#xff0c;但是有时候我们只需要传递一个状态&#xff0c;这个状态值需要用一个数值表示&#xff0c;比如&#xff1a…

Android运行时权限Runtime Permission源码分析

Runtime Permission源码跟踪 Android 8.1.0 请求权限时弹窗代码 应用使用requestPermissions申请权限时&#xff0c;系统会弹出一个选择窗口&#xff0c;可进行允许。 源码在packages/apps/PackageInstaller/文件下 GrantPermissionsActivity.java是进行权限分配的弹出窗口…

分布式之PBFT算法

写在前面 在分布式之拜占庭问题 一文中我们分析了拜占庭问题&#xff0c;并一起看了支持拜占庭容错的口信消息性和签名消息性算法&#xff0c;但是这两种算法都有一个非常严重的问题&#xff0c;就是消息数量太多&#xff0c;通信的成本太大&#xff0c;消息数量复杂度为O(n ^…

CentOS 环境 OpneSIPS 3.1 版本安装及使用

文章目录1. OpenSIPS 源码下载2. 工具准备3. 编译安装4. opensips-cli 工具安装5. 启动 OpenSIPS 实例1. OpenSIPS 源码下载 使用以下命令即可下载 OpenSIPS 的源码&#xff0c;笔者下载的是比较稳定的 3.1 版本&#xff0c;读者有兴趣也可前往 官方传送门 sudo git clone htt…

1个串口用1根线实现多机半双工通信+开机控制电路

功能需求&#xff1a; 主机使用一个串口&#xff0c;与两个从机进行双向通信&#xff0c;主机向从机发送数据&#xff0c;从机能够返回数据&#xff0c;由于结构限制&#xff0c;主机与从机之间只有3根线&#xff08;电源、地、数据线&#xff09;&#xff0c;并且从机上没有设…

【蓝牙mesh】access层(接入层)协议介绍

【蓝牙mesh】access层&#xff08;接入层&#xff09;协议介绍 Access层简介 Access层定义了应用层如何使用upper协议层的接口&#xff0c;它不仅定义了应用层的格式&#xff0c;还定义了应用数据在upper层的加密和解密。当收到下层的数据包时&#xff0c;它会检查数据的netke…

Web前端:选择AngularJS进行Web开发的12大理由!

无论你希望构建本地应用程序、渐进式web应用程序(PWA)&#xff0c;还是开发单页应用程序&#xff0c;每个企业都寻求具有影响力的数字形象&#xff0c;并希望构建交互式、跨平台和动态的web应用程序&#xff0c;以吸引客户。AngularJS&#xff0c;也称为Angular&#xff0c;是一…

李宏毅2023春季机器学习课程

目录2021&2022课程重磅须知我维护的其他项目更新日志课程地址课程资料直链课程作业直链其他优质课程2021&2022课程 CSDN Github 重磅须知 为方便所有网课资料与优质电子书籍的实时更新维护&#xff0c;创建一个在线实时网盘文件夹&#xff1b;   网盘获取方式&#…