1.文本预处理
文本是一类序列数据,一篇文章可以看作是字符或单词的序列,本节将介绍文本数据的常见预处理步骤,预处理通常包括四个步骤:
- 读入文本
- 分词
- 建立字典,将每个词映射到一个唯一的索引(index)
- 将文本从词的序列转换为索引的序列,方便输入模型
2语言模型
一段自然语言文本可以看作是一个离散时间序列,给定一个长度为的词的序列,语言模型的目标就是评估该序列是否合理,即计算该序列的概率:
本节我们介绍基于统计的语言模型,主要是元语法(-gram)。在后续内容中,我们将会介绍基于神经网络的语言模型。
假设序列中的每个词是依次生成的,我们有
$$
begin{align*}
P(w_1, w_2, ldots, w_T)
&= prod_{t=1}^T P(w_t mid w_1, ldots, w_{t-1})
&= P(w_1)P(w_2 mid w_1) cdots P(w_T mid w_1w_2cdots w_{T-1})
end{align*}
$$
例如,一段含有4个词的文本序列的概率
语言模型的参数就是词的概率以及给定前几个词情况下的条件概率。设训练数据集为一个大型文本语料库,如维基百科的所有条目,词的概率可以通过该词在训练数据集中的相对词频来计算,例如,的概率可以计算为:
$$
hat P(w_1) = frac{n(w_1)}{n}
$$
其中为语料库中以作为第一个词的文本的数量,为语料库中文本的总数量。
类似的,给定情况下,的条件概率可以计算为:
$$
hat P(w_2 mid w_1) = frac{n(w_1, w_2)}{n(w_1)}
$$
其中为语料库中以作为第一个词,作为第二个词的文本的数量。
n元语法
序列长度增加,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。元语法通过马尔可夫假设简化模型,马尔科夫假设是指一个词的出现只与前面个词相关,即阶马尔可夫链(Markov chain of order ),如果,那么有。基于阶马尔可夫链,我们可以将语言模型改写为
以上也叫元语法(-grams),它是基于阶马尔可夫链的概率语言模型。例如,当时,含有4个词的文本序列的概率就可以改写为:
$$
begin{align*}
P(w_1, w_2, w_3, w_4)
&= P(w_1) P(w_2 mid w_1) P(w_3 mid w_1, w_2) P(w_4 mid w_1, w_2, w_3)
&= P(w_1) P(w_2 mid w_1) P(w_3 mid w_2) P(w_4 mid w_3)
end{align*}
$$
当分别为1、2和3时,我们将其分别称作一元语法(unigram)、二元语法(bigram)和三元语法(trigram)。例如,长度为4的序列在一元语法、二元语法和三元语法中的概率分别为
$$
begin{aligned}
P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2) P(w_3) P(w_4) ,
P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 mid w_1) P(w_3 mid w_2) P(w_4 mid w_3) ,
P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 mid w_1) P(w_3 mid w_1, w_2) P(w_4 mid w_2, w_3) .
end{aligned}
$$
当较小时,元语法往往并不准确。例如,在一元语法中,由三个词组成的句子“你走先”和“你先走”的概率是一样的。然而,当较大时,元语法需要计算并存储大量的词频和多词相邻频率。
3.循环神经网络
本节介绍循环神经网络,下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量,用表示在时间步的值。的计算基于和,可以认为记录了到当前字符为止的序列信息,利用对序列的下一个字符进行预测。
循环神经网络的构造
我们先看循环神经网络的具体构造。假设是时间步的小批量输入,是该时间步的隐藏变量,则:
其中,,,,函数是非线性**函数。由于引入了,能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于的计算基于,上式的计算是循环的,使用循环计算的网络即循环神经网络(recurrent neural network)。
在时间步,输出层的输出为:
其中,。
GRU
RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT)
⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系
RNN:
GRU:
• 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
• 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:文本预处理,语言模型,循环神经网络 - Python技术站