预处理通常包括四个步骤:
读入文本
分词
建立字典,将每个词映射到一个唯一的索引(index)
将文本从词的序列转换为索引的序列,方便输入模型
语言模型
假设序列w1,w2,…,wT
中的每个词是依次生成的,我们有
例如,一段含有4个词的文本序列的概率
语言模型的参数就是词的概率以及给定前几个词情况下的条件概率。设训练数据集为一个大型文本语料库,如维基百科的所有条目,词的概率可以通过该词在训练数据集中的相对词频来计算,例如,w1
的概率可以计算为:
其中n(w1)
为语料库中以w1作为第一个词的文本的数量,n
为语料库中文本的总数量。
类似的,给定w1
情况下,w2
的条件概率可以计算为:
其中n(w1,w2)
为语料库中以w1作为第一个词,w2作为第二个词的文本的数量。
n元语法
n元语法可能有哪些缺陷?
参数空间过大
数据稀疏
循环神经网络
循环神经网络的构造
我们先看循环神经网络的具体构造。假设是时间步t的小批量输入,
是该时间步的隐藏变量,则:
其中,,
,
,ϕ函数是非线性激活函数。由于引入了
,
能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。由于
的计算基于
,上式的计算是循环的,使用循环计算的网络即循环神经网络(recurrent neural network)。
在时间步t,输出层的输出为:
其中,
。
裁剪梯度
循环神经网络中较容易出现梯度衰减或梯度爆炸,这会导致网络几乎无法训练。裁剪梯度(clip gradient)是一种应对梯度爆炸的方法。假设我们把所有模型参数的梯度拼接成一个向量,并设裁剪的阈值是
。裁剪后的梯度
的L2范数不超过。
困惑度
我们通常使用困惑度(perplexity)来评价语言模型的好坏。回困惑度是对交叉熵损失函数做指数运算后得到的值。特别地,
最佳情况下,模型总是把标签类别的概率预测为1,此时困惑度为1;
最坏情况下,模型总是把标签类别的概率预测为0,此时困惑度为正无穷;
基线情况下,模型总是预测所有类别的概率都相同,此时困惑度为类别个数。
显然,任何一个有效模型的困惑度必须小于类别个数。在本例中,困惑度必须小于词典大小vocab_size。