一、文本预处理

文本是一类序列数据,一篇文章可以看作是字符或单词的序列,预处理通常包括四个步骤:
1、读入文本
2、分词:对每个句子进行分词,也就是将一个句子划分成若干个词(token),转换为一个词的序列。
3、建立字典:将每个词映射到一个唯一的索引(index)。为了方便模型处理,我们需要将字符串转换为数字。因此我们需要先构建一个字典(vocabulary),将每个词映射到一个唯一的索引编号。
4、将词转为索引:使用字典,我们可以将原文本中的句子从单词序列转换为索引序列

前面介绍的分词方式非常简单,它至少有以下几个缺点:
a、标点符号通常可以提供语义信息,但是我们的方法直接将其丢弃了
b、类似“shouldn’t", “doesn’t"这样的词会被错误地处理
c、类似"Mr.”, "Dr."这样的词会被错误地处理
5、用现有工具进行分词spaCyNLTK

二、语言模型

一段自然语言文本可以看作是一个离散时间序列,给定一个长度为 T 的词的序列w1,w2,,wTw_{1},w_{2},…,w_{T} ,语言模型的目标就是评估该序列是否合理,即计算该序列的概率:P(w1,w2,,wT)P(w_{1},w_{2},…,w_{T})
介绍基于统计的语言模型,主要是 n 元语法( n -gram)

1、n 元语法:

概念:通过马尔可夫假设简化模型,马尔科夫假设是指一个词的出现只与前面 n 个词相关,即 n 阶马尔可夫链(Markov chain of order n )

当 n 分别为1、2和3时,我们将其分别称作一元语法(unigram)、二元语法(bigram)和三元语法(trigram)。

当 n 较小时, n 元语法往往并不准确。例如,在一元语法中,由三个词组成的句子“你走先”和“你先走”的概率是一样的。然而,当 n 较大时, n 元语法需要计算并存储大量的词频和多词相邻频率。

缺点:参数空间过大;数据稀疏

2、时序数据的采样

在训练中我们需要每次随机读取小批量样本和标签。与之前章节的实验数据不同的是,时序数据的一个样本通常包含连续的字符。

如果序列的长度为 T ,时间步数为 n ,那么一共有 T−n 个合法的样本,但是这些样本有大量的重合。有更加高效的采样方式,分别是随机采样相邻采样
随机采样:在随机采样中,每个样本是原始序列上任意截取的一段序列,相邻的两个随机小批量在原始序列上的位置不一定相毗邻。
相邻采样:在相邻采样中,相邻的两个随机小批量在原始序列上的位置相毗邻

三、循环神经网络基础

下图展示了如何基于循环神经网络实现语言模型。我们的目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量HH,用HtH_{t}表示HH在时间步tt的值。HtH_{t}的计算基于XtX_{t}Ht1H_{t-1},可以认为HtH_{t}记录了到当前字符为止的序列信息,利用HtH_{t}对序列的下一个字符进行预测。
深度学习笔记(2)

1、循环神经网络的构造深度学习笔记(2)

2、one-hot向量

将字符表示成向量。假设词典大小是 N ,每次字符对应一个从 0 到 N−1 的唯一的索引,则该字符的向量是一个长度为 N 的向量,若字符的索引是 i ,则该向量的第 i 个位置为 1 ,其他位置为 0

3、裁剪梯度

循环神经网络中较容易出现梯度衰减或梯度爆炸,这会导致网络几乎无法训练。裁剪梯度(clip gradient)是一种应对梯度爆炸的方法。假设我们把所有模型参数的梯度拼接成一个向量gg,并设裁剪的阈值是θ\theta。裁剪后的梯度
min(θg,1)gmin(\frac{\theta}{||g||},1)g
L2L_{2}范数不超过θ\theta

4、困惑度

通常使用困惑度(perplexity)来评价语言模型的好坏。困惑度是对交叉熵损失函数做指数运算后得到的值。特别地,

最佳情况下,模型总是把标签类别的概率预测为1,此时困惑度为1;
最坏情况下,模型总是把标签类别的概率预测为0,此时困惑度为正无穷;
基线情况下,模型总是预测所有类别的概率都相同,此时困惑度为类别个数。

显然,任何一个有效模型的困惑度必须小于类别个数。

相关文章:

  • 2021-04-25
  • 2021-04-10
  • 2021-12-18
猜你喜欢
  • 2021-08-26
  • 2021-04-18
  • 2021-09-25
  • 2022-01-26
  • 2021-09-02
  • 2022-01-22
  • 2021-05-13
相关资源
相似解决方案