赞
踩
复习自用
条件随机场模型
定义:自然语言处理主要研究如何是计算机自动(或半自动)地处理、理解、分析以及应用人类语言。它关注人与计算机之间使用自然语言进行有效通信的各种理论和方法,目标是让计算机能够"理解"自然语言,代替人类执行语言翻译和问题回答等任务。
分类:可以分为自然语言理解(NLU)和自然语言生成(NLG)两部分。
NLU涉及语言、语境和各种语言形式,使机器能够理解"自然语言"的争议上下文和含义,而不仅仅是字面上的含义。目标是能够像人类一样理解书面或口头语言。
NLG则是将结构化数据转换成自然语言的过程。例如生成长文本,交互式对话(聊天机器人)
语音分析、词法分析、句法分析、语义分析、语用分析
图灵测试(判断计算机是否理解了某种自然语言):
序列标注:序列标注任务就是在给定的文本序列上预测序列中需要做出标注的标签。
分类:主要包括文本分类和情感倾向分析。
文本分类:在给定的分类体系中,将文本指定到莫格或墨迹个类别中。比如新闻划分到财经、体育、娱乐等。
情感倾向分析:对带有情感色彩(褒义/贬义、正向/负向)的主观文本进行分析,以确定该文本的观点、喜好、情感倾向等。
关系判断:主要包括文本相似度计算和自然语言推理
自然语言生成:主要包括机器翻译和文本摘要
对于中文来说,词法分析的首要任务是能够将一串连续的字符正确地切分成一个一个的词,然后能够正确的判断每个词的词性,以便于后续句法分析的实现。中文分词和词性标注等词法分析任务一般被统称为中文词法分析。
中文词法分析主要方法可以分为三种:基于规则的方法,基于统计的方式(基于机器学习的方法),以及基于规则和统计的混合方法。
让计算机在文本中的词与词之间自动加上空格或其他边界标记。
三大挑战:分词规范模糊、歧义、未登录词(OOV)识别困难。实际工作中未登录词出现频率高于歧义文本。
中文分词方案:1.基于词典的分词方法(规则) 2.基于统计的分词方法(机器学习或者统计模型) 3.基于理解的分词方法 4.词典与统计结合
正向最大匹配法
(1)导入字典
(2)设定字典最大的字符长度为n
(3)开始循环遍历语料,从左到右将语料切分成第一个n个字符(我爱中国!!!)进行匹配,若字典中有,则匹配词被切分出来,没有就检查n-1个字符(我爱中国!!),直到只有一个字符,就将这个字符设为单个词。
逆向最大匹配法
双向最大匹配法(设定一定规则,比较正向,逆向在这种规则下分数,取分数高的)
步骤:1.输入语料库,开始建模,训练出一个语言模型(类似HMM训练出来三个矩阵)
2.开始预测,将所需要测得的文本丢进语料库,看概率,并进行相应解码操作(类似Viterbi算法)
S(句子)有w1,w2·······wn个词构成,句子S出现的概率P(S)可以表示为
P
(
S
)
=
P
(
w
1
,
w
2
⋅
⋅
⋅
,
w
n
)
=
P
(
w
1
)
∗
P
(
w
2
∣
w
1
)
∗
P
(
w
3
∣
w
1
,
w
2
)
∗
⋅
⋅
⋅
P
(
w
n
∣
w
1
,
w
2
,
⋅
⋅
⋅
,
w
n
−
1
)
P(S) = P(w_1,w_2···,w_n)=P(w_1)*P(w_2|w_1)*P(w_3|w_1,w_2)*···P(w_n|w1,w2,···,w_{n-1})
P(S)=P(w1,w2⋅⋅⋅,wn)=P(w1)∗P(w2∣w1)∗P(w3∣w1,w2)∗⋅⋅⋅P(wn∣w1,w2,⋅⋅⋅,wn−1)
如果硬算,则对于wn最后一个词,前面出现的词有L^(n-1)种,L为词典大小。每一种情况下,wn都有一种出现概率,每个都计算不现实。
在此做一阶马尔可夫假设,即wn只与前一个状态有关。即
P
(
S
)
=
P
(
w
1
)
∗
P
(
w
2
∣
w
1
)
∗
P
(
w
3
∣
w
2
)
∗
⋅
⋅
⋅
∗
P
(
w
n
∣
w
n
−
1
)
P(S) = P(w_1)*P(w_2|w1)*P(w_3|w_2)*···*P(w_n|w_{n-1})
P(S)=P(w1)∗P(w2∣w1)∗P(w3∣w2)∗⋅⋅⋅∗P(wn∣wn−1)
这就是二元模型。
**总结:对式子做N阶马尔可夫假设,即假设句子中任意一个词wi出现的概率由它前面N-1个词决定,其对应的语言模型成为N元语言模型。**一般N<=3.
具体求法使用最大似然估计,上面是两个字毗邻出现次数,下面是单个字出现。
P
(
w
i
∣
w
i
−
1
)
=
c
o
u
n
t
(
w
i
−
1
w
i
)
c
o
u
n
t
(
w
i
−
1
)
P(w_i|w_{i-1}) = \frac{count(w_{i-1}w_i)}{count(w_{i-1})}
P(wi∣wi−1)=count(wi−1)count(wi−1wi)
又因为语料库一般不完善,有很多字出现次数是0(unicode 总共有65000多个字),所以岁P(wi|wi-1)要做平滑处理,不做第一个是因为分母不能为0,第二个是做了平滑了之后最终预测精度会上升(亲测HMM平滑和不平滑有3-5%的差距 处理方式是+无穷小量 +1e100)
以二元语言模型为例
Laplace平滑
加1法,V是词汇表中单词的总个数
P
(
w
n
∣
w
n
−
1
)
=
c
o
u
n
t
(
w
n
−
1
w
n
)
+
1
c
o
u
n
t
(
w
n
−
1
)
+
V
P(w_n|w_{n-1}) = \frac{count(w_{n-1}w_n)+1}{count(w_{n-1})+V}
P(wn∣wn−1)=count(wn−1)+Vcount(wn−1wn)+1
Good-Turning估计法
本质上将分子分母在进行一次映射
将其次数r调整为r*
r
∗
=
(
r
+
1
)
n
r
+
1
n
r
r^* = (r+1)\frac{n_{r+1}}{n_r}
r∗=(r+1)nrnr+1
nr是出现次数为r的事件个数,nr+1是出现次数为r+1的事件个数。这里对最大次数的调整应该有更特殊的说明。
假设语料库大小为N,为对于出现了r次的事件(对应分子),其概率为
P
r
=
r
∗
N
P_r= \frac{r^*}{N}
Pr=Nr∗
词w,文档d,w在d中的权重,其中|D|为文档总数
T
F
−
I
D
F
(
d
,
w
)
=
T
F
(
d
,
w
)
∗
I
D
F
(
d
,
w
)
=
T
F
(
d
,
w
)
∗
l
o
g
(
∣
D
∣
D
F
(
w
)
)
TF-IDF(d,w) = TF(d,w) * IDF(d,w) = TF(d,w)*log(\frac{|D|}{DF(w)})
TF−IDF(d,w)=TF(d,w)∗IDF(d,w)=TF(d,w)∗log(DF(w)∣D∣)
PageRank算法:
在一堆网页V={v1,v2,v3···,vn},n为网页总共有多少页,网页vj指向vi的链接权重mji,d为衰减因子(常数,一般取0.85)
p
(
v
i
)
=
1
−
d
n
+
d
∗
∑
v
j
∈
V
m
j
i
∗
p
(
v
j
)
p(v_i) = \frac{1-d}{n} + d*\sum_{v_j\in{V}}m_{ji}*p(v_j)
p(vi)=n1−d+d∗vj∈V∑mji∗p(vj)
TextRank算法类似,将文档中词映射为网页,词与词之间的联系(一起出现的频率)映射为网页之间的链接。
不需要大规模语料库
无监督
收敛快,计算速度快
根据上下文信息给句子中每个词标注一个最适合的词性标注。
五元组组成
H
M
M
=
<
S
,
O
,
A
,
B
,
π
>
HMM=<S,O,A,B,\pi>
HMM=<S,O,A,B,π>
两个假设:
三个问题:
似然度问题,给马尔可夫模型(A,B),告诉你观测序列,求似然概率
解码问题:给一个观测序列和一个马尔可夫模型(A,B),找出隐状态序列(利用viterbi算法)
学习问题:怎么统计A,B
其实pi也要在上面
先求局部最优,最后回溯
不考
还不是很清楚,P与全体X和周围Y有关
P
(
y
∣
x
)
=
1
z
0
e
x
p
∑
i
=
1
n
∑
j
=
1
m
λ
j
f
j
(
y
i
−
1
,
y
i
,
o
,
i
)
P(y|x) = \frac{1}{z_0}exp\sum_{i=1}^{n}\sum_{j=1}^{m}\lambda_jf_j(y_{i-1},yi,o,i)
P(y∣x)=z01expi=1∑nj=1∑mλjfj(yi−1,yi,o,i)
根据给定的文法(文章的书写规范)自动识别句子所包含的句法单位以及这些句法单位之间的关系。
主要方法有成分句法分析和依存句法分析。
成分句法分析:旨在发现句子中的短语及短语之间的层次组合情况。
依存句法分析:旨在发现单词之间的二元依存关系。
主要困难是:歧义,搜索空间大
书上就是一点概念
书上就是一点概念
1.前馈神经网络的前向传播
2.前馈神经网络的反向传播
向量大小为词典大小(维度灾难);每个单词都是独立的、正交的(无法计算余弦相似度)
它是一种离散表示法
词嵌入:其基本思想是将一个维数为所有词的数量的高维空间(one-hot形式表示的词)映射到一个维数低得多的连续向量空间,每个空间或词组都被映射为实数域上的向量,就像一个嵌入的过程,因此称为word-embedding。
一般使用余弦相似度来比较两个词的相似程度,定义为:
上面的6.1.1.3 异步序列到序列
将一个长度不确定的序列映射到另一个长度也未知的序列的问题成为序列到序列问题
后续使用的是编码-解码架构(Encoder-Decoder)构建Seq2Seq
可以这么来理解Attention,将Source中的构成元素想象成是由一系列的<Key,Value>数据对构成(对应到咱们上里面的例子,key和value是相等地,都是encoder的输出值h),此时给定Target中的某个元素Query(对应到上面的例子也就是decoder中的Hi),通过计算Query和各个Key的相似性或者相关性,得到每个Key对应Value的权重系数,然后对Value进行加权求和,即得到了最终的Attention数值。所以本质上Attention机制是对Source中元素的Value值进行加权求和,而Query和Key用来计算对应Value的权重系数。即可以将其本质思想改写为如下公式:(下面绿色框,本质就第一个绿框和第三个绿框,第二个绿框是softmax归一化,将原始计算分值整理成所有元素权重之和为1的概率分布,突出重要元素的权重,感觉是给人看的,机器是不需要这个的)
A
t
t
e
n
t
i
o
n
(
Q
u
e
r
y
,
S
o
u
r
c
e
)
=
∑
i
=
1
L
x
S
i
m
i
l
a
r
i
t
y
(
Q
u
e
r
y
,
K
e
y
i
)
∗
V
a
l
u
e
i
S
i
m
i
l
a
r
i
t
y
(
Q
u
e
r
y
,
k
e
y
i
)
=
点积
/
c
o
s
i
n
e
相似度
/
M
L
P
网络输出
Attention(Query,Source) = \sum_{i=1}^{L_x}Similarity(Query,Key_i)*Value_i\\ Similarity(Query,key_i) = 点积/cosine相似度/MLP网络输出
Attention(Query,Source)=i=1∑LxSimilarity(Query,Keyi)∗ValueiSimilarity(Query,keyi)=点积/cosine相似度/MLP网络输出
优点:
1.速度快(解码阶段)。Attention机制不再依赖于RNN,解决了RNN不能并行计算的问题。
2.效果好。效果好主要就是因为注意力机制,能够获取到局部的重要信息,能够抓住重点。
缺点:
1.只能在Decoder阶段实现并行运算,Encoder部分依旧采用的是RNN,LSTM这些按照顺序编码的模型,Encoder部分还是无法实现并行运算,不够完美。
2.就是因为Encoder部分目前仍旧依赖于RNN,所以对于中长距离之间,两个词相互之间的关系没有办法很好的获取。
三个矩阵的对象改了一下,Query=Key=Value,其他于注意力机制一致
位置编码:
输入inputs embedding后需要给每个word的词向量添加位置编码positional encoding。
Transformer 是完全基于self-Attention,而self-attention是不能获取词语位置信息地,就算打乱一句话中词语的位置,每个词还是能与其他词之间计算attention值,就相当于是一个功能强大的词袋模型,对结果没有任何影响。(一会儿在介绍Encoder的时候再详细说明)所以在我们输入的时候需要给每一个词向量添加位置编码。
多头注意力机制:
Multi-head Attention 的本质是,在参数总量保持不变的情况下,将同样的 Query,Key,Value 映射到原来的高维空间的不同子空间中进行 Attention 的计算(8个),在最后一步再合并不同子空间中的 Attention 信息。这样降低了计算每个 head 的 Attention 时每个向量的维度,在某种意义上防止了过拟合;由于 Attention 在不同子空间中有不同的分布,Multi-head Attention 实际上是寻找了序列之间不同角度的关联关系,并在最后拼接这一步骤中,将不同子空间中捕获到的关联关系再综合起来。
位置前馈网络(Position-wise Feed-Forward Networks)
位置前馈网络就是一个全连接前馈网络,每个位置的词都单独经过这个完全相同的前馈神经网络。其由两个线性变换组成,即两个全连接层组成。
残差连接和层归一化
编码器结构中有一个需要注意的细节:每个编码器的每个子层(Self-Attention 层和 FFN 层)都有一个残差连接,再执行一个层标准化操作。
解码器:
接下来会重复这个过程,直到输出一个结束符,表示 Transformer 解码器已完成其输出。每一步的输出都会在下一个时间步输入到下面的第一个解码器,解码器像编码器一样将解码结果显示出来。就像我们处理编码器输入一样,我们也为解码器的输入加上位置编码,来指示每个词的位置。
Encoder-Decoder Attention 层的工作原理和多头自注意力机制类似。不同之处是:Encoder-Decoder Attention 层使用前一层的输出构造 Query 矩阵,而 Key 和 Value 矩阵来自于编码器栈的输出。
BERT更擅长处理自然语言理解任务(NLU)
语言模型 是这样一个模型:对于任意的词序列,它能够计算出这个序列是一句话的概率。比如词序列A:“知乎|的|文章|真|水|啊”,这个明显是一句话,一个好的语言模型也会给出很高的概率,再看词序列B:“知乎|的|睡觉|苹果|好快”,这明显不是一句话,如果语言模型训练的好,那么序列B的概率就很小很小。
较为正式的定义。假设我们要为中文创建一个语言模型,V表示词典, V = { 猫,狗,机器,学习,语言,模型,…},wi属于V,语言模型就是这样一个模型:给定词典 V ,能够计算出任意单词序列w1,w2,w3···wn是一句话的概率P(w1,w2,w3···wn),其中,p > = 0 。
BERT(Bidirectional Encoder Representations from Transformers)是一种预训练的自然语言处理模型,它能够理解和生成文本。它的主要功能是将文本序列转换成语义丰富的向量表示。
就是Transformer左边的编码器变体
BERT 只使用了 Transformer 的 Encoder 模块,原论文中,作者分别用 12 层和 24 层 Transformer Encoder 组装了两套 BERT 模型,分别是:
其中层的数量(即,Transformer Encoder 块的数量)为L ,隐藏层的维度为H ,自注意头的个数为A 。在所有例子中,我们将前馈/过滤器(Transformer Encoder 端的 feed-forward 层)的维度设置为4H ,即当 H=768 时是3072 ;当 H=1024 是 4096 。
BERT的预训练阶段包括两个任务,一个是Masked Language Model"(MLM) ,还有一个是下句预测(Next Sentence Prediction,NSP)。
实际构建预训练任务时,是首选设计好 “下句预测” 任务,生成该任务的标注信息,在此基础上构建 “Masked LM” 任务,生成掩码语言模型的标注信息。考虑到预训练涉及两个句子,BERT 采用如下的输入信息表征方案:
**token embedding **:将各个词转换成固定维度的向量。在BERT中,每个词会被转换成768维的向量表示。在实际代码实现中,输入文本在送入token embeddings 层之前要先进行tokenization处理。此外,两个特殊的token会被插入到tokenization的结果的开头 ([CLS])和结尾 ([SEP])
segment embedding: 用于区分一个token属于句子对中的哪个句子。**Segment Embeddings 层只有两种向量表示。前一个向量是把0赋给第一个句子中的各个token, 后一个向量是把1赋给第二个句子中的各个token。**如果输入仅仅只有一个句子,那么它的segment embedding就是全0 。
position embedding:**Transformers无法编码输入的序列的顺序性,所以要在各个位置上学习一个向量表示来将序列顺序的信息编码进来。**加入position embeddings会让BERT理解下面下面这种情况,“ I think, therefore I am ”,第一个 “I” 和第二个 “I”应该有着不同的向量表示。
这3种embedding都是768维的,最后要将其按元素相加,得到每一个token最终的768维的向量表示。
BERT中只使用了经典Transformer架构中的Encoder部分, 完全舍弃了Decoder部分. 而两大预训练任务也集中体现在训练Transformer模块中
每一个Encoder的输入为上一层的所有输出(前后都有)
BERT的使用
**BERT最终输出的就是句子中每个token的768维的向量,**第一个位置是[CLS],它的向量表示蕴含了这个句子整体的信息,用于做文本分类等句子级任务;对于序列标注等token级任务,就需要使用到每一个token的向量表示。只要将768维向量通过一个线性层映射到最终的分类空间中即可。
生成式的预训练(generative pre-training)
GPT更擅长处理自然语言生成任务(NLG)
GPT采用的是单向Transformer模型, 例如给定一个句子[u1, u2, …, un], GPT在预测单词ui的时候只会利用[u1, u2, …, u(i-1)]的信息, 而BERT会同时利用上下文的信息[u1, u2, …, u(i-1), u(i+1), …, un].
Transformer的右边解码器的变体
经典的Transformer Decoder Block包含3个子层, 分别是Masked Multi-Head Attention层, encoder-decoder attention层, 以及Feed Forward层. 但是在GPT中取消了第二个encoder-decoder attention子层, 只保留Masked Multi-Head Attention层, 和Feed Forward层.
作为单向Transformer Decoder模型, GPT利用句子序列信息预测下一个单词的时候, 要使用Masked Multi-Head Attention对单词的下文进行遮掩, 来防止未来信息的提前泄露. 例如给定一个句子包含4个单词[A, B, C, D], GPT需要用[A]预测B, 用[A, B]预测C, 用[A, B, C]预测D. 很显然的就是当要预测B时, 需要将[B, C, D]遮掩起来.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。