一、文本预处理
1.四个步骤:
①读入文本
②分词
③建立字典,将每个词映射到一个唯一的索引(index)
④将文本从词的序列转换为索引的序列,方便输入模型
读入文本:
分词:
建立字典:将字符串转换为数字,将每个词映射到一个唯一的索引编号。
两个重要的分词库:NLTK与spaCy
二、语言模型
定义:一段自然语言文本可以看作是一个离散时间序列,给定一个长度为T的时间序列w1~wt,语言模型的目标就是评估该序列是否合理,即计算该序列的概率:
语言模型:
即,语言模型的参数就是词的概率以及给定前几个词情况下的条件概率。
N元语法:
序列长度增加,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。
注意:当n较小时,n元语法往往不准确;当n较大时,n元语法需要计算并存储大量词频和多词相邻概率。
N元语法的缺陷:1.参数空间过大 2.数据稀疏
三、循环神经网络
1.模型结构:
注意:
循环神经网络的构造:
其实,循环神经网络的本质是增加了时间序列对于下一次预测的影响
2.梯度裁剪:
循环神经网络中较容易出现梯度衰减或梯度爆炸,这会导致网络几乎无法训练。裁剪梯度(clip gradient)是一种应对梯度爆炸的方法。假设我们把所有模型参数的梯度拼接成一个向量g,并设裁剪的阈值是θ。裁剪后的梯度
其中L2的二范数不超过θ
3.困惑度:
我们通常使用困惑度(perplexity)来评价语言模型的好坏。困惑度是对交叉熵损失函数做指数运算后得到的值。特别地
①最佳情况下,模型总是把标签类别的概率预测为1,此时困惑度为1;
②最坏情况下,模型总是把标签类别的概率预测为0,此时困惑度为正无穷;
③基线情况下,模型总是预测所有类别的概率都相同,此时困惑度为类别个数。
注意:任何一个有效模型的困惑度必须小于类别个数