自然语言处理基础
NLP-NLP基础
Index
NLP 概述
自然语言处理之序列模型 - 小象学院
解决 NLP 问题的一般思路
NLP 的历史进程
规则系统
正则表达式/自动机
规则是固定的
搜索引擎
概率系统
规则从数据中抽取
规则是有概率的
概率系统的一般工作方式
最重要的部分:数据收集、预处理、特征工程
示例
概率系统的优/缺点
+
规则更加贴近于真实事件中的规则,因而效果往往比较好-
特征是由专家/人指定的;-
流程是由专家/人设计的;-
存在独立的子任务
深度学习
深度学习相对概率模型的优势
特征是由专家指定的
->
特征是由深度学习自己提取的流程是由专家设计的
->
模型结构是由专家设计的存在独立的子任务
->
End-to-End Training
Seq2Seq 模型
评价机制
困惑度 (Perplexity, PPX)
Perplexity - Wikipedia
在信息论中,perplexity 用于度量一个概率分布或概率模型预测样本的好坏程度
../机器学习/信息论
基本公式
概率分布(离散)的困惑度
其中
H(p)
即信息熵概率模型的困惑度
通常
b=2
指数部分也可以是交叉熵的形式,此时困惑度相当于交叉熵的指数形式
其中
p~
为测试集中的经验分布——p~(x) = n/N
,其中n
为 x 的出现次数,N 为测试集的大小
语言模型中的 PPX
在 NLP 中,困惑度常作为语言模型的评价指标
直观来说,就是下一个候选词数目的期望值——
如果不使用任何模型,那么下一个候选词的数量就是整个词表的数量;通过使用
bi-gram
语言模型,可以将整个数量限制到200
左右
BLEU
一种机器翻译的评价准则——BLEU - CSDN博客
机器翻译评价准则
计算公式
c
为生成句子的长度;r
为参考句子的长度——目的是惩罚长度过短的候选句子
通常
N=4, w_n=1/4
ROUGE
自动文摘评测方法:Rouge-1、Rouge-2、Rouge-L、Rouge-S - CSDN博客
一种机器翻译/自动摘要的评价准则
语言模型
XX 模型的含义
如果能使用某个方法对 XX 打分(Score),那么就可以把这个方法称为 “XX 模型”
篮球明星模型:
Score(库里)
、Score(詹姆斯)
话题模型——对一段话是否在谈论某一话题的打分
概率/统计语言模型 (PLM, SLM)
语言模型是一种对语言打分的方法;而概率语言模型把语言的“得分”通过概率来体现
具体来说,概率语言模型计算的是一个序列作为一句话可能的概率
以上过程可以形式化为:
根据贝叶斯公式,有
其中每个条件概率就是模型的参数;如果这个参数都是已知的,那么就能得到整个序列的概率了
参数的规模
设词表的大小为
N
,考虑长度为T
的句子,理论上有N^T
种可能的句子,每个句子中有T
个参数,那么参数的数量将达到O(T*N^T)
可用的概率模型
统计语言模型实际上是一个概率模型,所以常见的概率模型都可以用于求解这些参数
常见的概率模型有:N-gram 模型、决策树、最大熵模型、隐马尔可夫模型、条件随机场、神经网络等
目前常用于语言模型的是 N-gram 模型和神经语言模型(下面介绍)
N-gram 语言模型
马尔可夫(Markov)假设——未来的事件,只取决于有限的历史
基于马尔可夫假设,N-gram 语言模型认为一个词出现的概率只与它前面的 n-1 个词相关
根据条件概率公式与大数定律,当语料的规模足够大时,有
以
n=2
即 bi-gram 为例,有
可靠性与可区别性
假设没有计算和存储限制,
n
是不是越大越好?早期因为计算性能的限制,一般最大取到
n=4
;如今,即使n>10
也没有问题,但是,随着
n
的增大,模型的性能增大却不显著,这里涉及了可靠性与可区别性的问题参数越多,模型的可区别性越好,但是可靠性却在下降——因为语料的规模是有限的,导致
count(W)
的实例数量不够,从而降低了可靠性
OOV 问题
OOV 即 Out Of Vocabulary,也就是序列中出现了词表外词,或称为未登录词
或者说在测试集和验证集上出现了训练集中没有过的词
一般解决方案:
设置一个词频阈值,只有高于该阈值的词才会加入词表
所有低于阈值的词替换为 UNK(一个特殊符号)
无论是统计语言模型还是神经语言模型都是类似的处理方式
平滑处理 TODO
count(W) = 0
是怎么办?平滑方法(层层递进):
Add-one Smoothing (Laplace)
Add-k Smoothing (k<1)
Back-off (回退)
Interpolation (插值法)
Absolute Discounting (绝对折扣法)
Kneser-Ney Smoothing (KN)
Modified Kneser-Ney
自然语言处理中N-Gram模型的Smoothing算法 - CSDN博客
神经概率语言模型 (NPLM)
神经概率语言模型依然是一个概率语言模型,它通过神经网络来计算概率语言模型中每个参数
其中
g
表示神经网络,i_w
为w
在词表中的序号,context(w)
为w
的上下文,V_context
为上下文构成的特征向量。V_context
由上下文的词向量进一步组合而成
N-gram 神经语言模型
A Neural Probabilistic Language Model (Bengio, et al., 2003)
这是一个经典的神经概率语言模型,它沿用了 N-gram 模型中的思路,将
w
的前n-1
个词作为w
的上下文context(w)
,而V_context
由这n-1
个词的词向量拼接而成,即
其中
c(w)
表示w
的词向量不同的神经语言模型中
context(w)
可能不同,比如 Word2Vec 中的 CBOW 模型每个训练样本是形如
(context(w), w)
的二元对,其中context(w)
取 w 的前n-1
个词;当不足n-1
,用特殊符号填充
同一个网络只能训练特定的
n
,不同的n
需要训练不同的神经网络
N-gram 神经语言模型的网络结构
【输入层】首先,将
context(w)
中的每个词映射为一个长为m
的词向量,词向量在训练开始时是随机的,并参与训练;【投影层】将所有上下文词向量拼接为一个长向量,作为
w
的特征向量,该向量的维度为m(n-1)
【隐藏层】拼接后的向量会经过一个规模为
h
隐藏层,该隐层使用的激活函数为tanh
【输出层】最后会经过一个规模为
N
的 Softmax 输出层,从而得到词表中每个词作为下一个词的概率分布其中
m, n, h
为超参数,N
为词表大小,视训练集规模而定,也可以人为设置阈值训练时,使用交叉熵作为损失函数
当训练完成时,就得到了 N-gram 神经语言模型,以及副产品词向量
原文的模型还考虑了投影层与输出层有有边相连的情形,因而会多一个权重矩阵,但本质上是一致的:
模型参数的规模与运算量
模型的超参数:
m, n, h, N
m
为词向量的维度,通常在10^1 ~ 10^2
n
为 n-gram 的规模,一般小于 5h
为隐藏的单元数,一般在10^2
N
位词表的数量,一般在10^4 ~ 10^5
,甚至10^6
网络参数包括两部分
词向量
C
: 一个N * m
的矩阵——其中N
为词表大小,m
为词向量的维度网络参数
W, U, p, q
:
模型的运算量
主要集中在隐藏层和输出层的矩阵运算以及 SoftMax 的归一化计算
此后的相关研究中,主要是针对这一部分进行优化,其中就包括 Word2Vec 的工作
相比 N-gram 模型,NPLM 的优势
单词之间的相似性可以通过词向量来体现
相比神经语言模型本身,作为其副产品的词向量反而是更大的惊喜
自带平滑处理
NPLM 中的 OOV 问题
在处理语料阶段,与 N-gram 中的处理方式是一样的——将不满阈值的词全部替换为 UNK
神经网络中,一般有如下几种处理 UNK 的思路
为 UNK 分配一个随机初始化的 embedding,并参与训练
最终得到的 embedding 会有一定的语义信息,但具体好坏未知
把 UNK 都初始化成 0 向量,不参与训练
UNK 共享相同的语义信息
每次都把 UNK 初始化成一个新的随机向量,不参与训练
常用的方法——因为本身每个 UNK 都不同,随机更符合对 UNK 基于最大熵的估计
How to add new embeddings for unknown words in Tensorflow (training & pre-set for testing) - Stack Overflow
Initializing Out of Vocabulary (OOV) tokens - Stack Overflow
基于 Char-Level 的方法
PaperWeekly 第七期 -- 基于Char-level的NMT OOV解决方案
最后更新于