您的位置:首页 > 理论基础 > 计算机网络

文本预处理&&语言模型&&循环神经网络基础

2020-03-06 16:09 1021 查看

一.文本预处理
常用分词工具:
英文:spaCyNLTK
中文:SnowNLP、THULAC、NLPIR、StanfordCoreNLP, Jieba

二.语言模型
语言模型:
假设序列 w1,w2,…,wT 中的每个词是依次生成的,我们有


n元语法:
序列长度增加,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。马尔科夫假设是指一个词的出现只与前面 n 个词相关,即 n阶马尔可夫链,基于n-1阶马尔可夫链,语言模型可化为:

例如,当 n=2时,含有4个词的文本序列的概率就可以改写为:

时序数据采样:
如果序列的长度为 T ,时间步数为 n ,那么一共有 T−n 个合法的样本,但是这些样本有大量的重合,我们通常采用更加高效的采样方式。我们有两种方式对时序数据进行采样,分别是随机采样和相邻采样。

  1. 随机采样
    其中批量大小batch_size是每个小批量的样本数,num_steps是每个样本所包含的时间步数。 在随机采样中,每个样本是原始序列上任意截取的一段序列,相邻的两个随机小批量在原始序列上的位置不一定相毗邻。
    每个间隔为num_steps:最后一个不够可以丢弃

  2. 相邻采样

在相邻采样中,相邻的两个随机小批量在原始序列上的位置相毗邻。
每个间隔为num_steps:最后一个不够可以丢弃
相同颜色为同一个batch_size

三.循环神经网络基础
我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量 H ,用 Ht 表示 H 在时间步 t 的值。 Ht 的计算基于 XtHt−1 ,可以认为 Ht 记录了到当前字符为止的序列信息,利用 Ht 对序列的下一个字符进行预测。


循环网络的构造公式:

裁剪梯度
由于在循环网络中容易产生梯度爆炸和梯度衰减现象,这会导致网络几乎无法训练。所有模型参数的梯度拼接成一个向量 g ,并设裁剪的阈值是 θ 。裁剪后的梯度

困惑度
困惑度是对交叉熵损失函数做指数运算后得到的值

训练模型的改进

for epoch in range(num_epochs):
if not is_random_iter:  # 如使用相邻采样,在epoch开始时初始化隐藏状态
state = init_rnn_state(batch_size, num_hiddens, device)
l_sum, n, start = 0.0, 0, time.time()
data_iter = data_iter_fn(corpus_indices, batch_size, num_steps, device)
for X, Y in data_iter:
if is_random_iter:  # 如使用随机采样,在每个小批量更新前初始化隐藏状态
state = init_rnn_state(batch_size, num_hiddens, device)
else:  # 否则需要使用detach函数从计算图分离隐藏状态
for s in state:
s.detach_()
  • 点赞
  • 收藏
  • 分享
  • 文章举报
流水荡荡 发布了13 篇原创文章 · 获赞 0 · 访问量 439 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐