文本预处理&&语言模型&&循环神经网络基础
一.文本预处理
常用分词工具:
英文:spaCy和NLTK
中文:SnowNLP、THULAC、NLPIR、StanfordCoreNLP, Jieba
二.语言模型
语言模型:
假设序列 w1,w2,…,wT 中的每个词是依次生成的,我们有
n元语法:
序列长度增加,计算和存储多个词共同出现的概率的复杂度会呈指数级增加。马尔科夫假设是指一个词的出现只与前面 n 个词相关,即 n阶马尔可夫链,基于n-1阶马尔可夫链,语言模型可化为:
例如,当 n=2时,含有4个词的文本序列的概率就可以改写为:
时序数据采样:
如果序列的长度为 T ,时间步数为 n ,那么一共有 T−n 个合法的样本,但是这些样本有大量的重合,我们通常采用更加高效的采样方式。我们有两种方式对时序数据进行采样,分别是随机采样和相邻采样。
-
随机采样
其中批量大小batch_size是每个小批量的样本数,num_steps是每个样本所包含的时间步数。 在随机采样中,每个样本是原始序列上任意截取的一段序列,相邻的两个随机小批量在原始序列上的位置不一定相毗邻。
每个间隔为num_steps:最后一个不够可以丢弃
-
相邻采样
在相邻采样中,相邻的两个随机小批量在原始序列上的位置相毗邻。
每个间隔为num_steps:最后一个不够可以丢弃
相同颜色为同一个batch_size
三.循环神经网络基础
我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量 H ,用 Ht 表示 H 在时间步 t 的值。 Ht 的计算基于 Xt 和 Ht−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_()
- 点赞
- 收藏
- 分享
- 文章举报
- ElitesAI·动手学深度学习PyTorch版学习笔记-文本预处理;语言模型;循环神经网络基础
- softmax与分类模型;多层感知机。文本预处理;语言模型;循环神经网络基础
- 《动手学深度学习》笔记 Task02:文本预处理;语言模型;循环神经网络基础
- 2.文本预处理、语言模型与循环神经网络基础
- 深度学习d2:文本预处理、语言模型、循环神经网络基础
- 02深度学习_文本预处理/语言模型/循环神经网络基础
- Task02:文本预处理;语言模型;循环神经网络基础
- 动手学深度学习(文本预处理+语言模型+循环神经网络基础)
- DL-Pytorch Task02:文本预处理;语言模型;循环神经网络基础
- 第二次打卡,文本预处理,语言模型,循环神经网络基础
- 文本预处理、语言模型、循环神经网络基础
- 文本预处理、语言模型、循环神经网络基础 #d2l#
- 动手学深度学习 Task02:文本预处理;语言模型;循环神经网络基础
- Task2:文本预处理;语言模型;循环神经网络基础(RNN)
- 伯禹教育AI训练营 Task02:文本预处理;语言模型;循环神经网络基础
- Task02:文本预处理;语言模型;循环神经网络基础;
- 动手学深度学习PyTorch版 | (2)文本预处理;语言模型;循环神经网络基础
- Task02:学习笔记文本预处理;语言模型;循环神经网络基础
- TASK2:文本预处理、语言模型、循环神经网络基础
- 《动手学深度学习》笔记 Task02:文本预处理;语言模型;循环神经网络基础