《深度学习进阶:自然语言处理》笔记
| 2023-2-4
0  |  阅读时长 0 分钟
日期
Feb 1, 2023
Tags
深度学习
python
NLP

Charpter2:自然语言和单词的分布式表示

单词:语言的含义由单词构成,单词是含义的最小单位
  • 单词含义的表示方法
      1. 基于同义词词典的方法
          • 为单词简历近义词集合,使用图(单词网络)表示个个单词的关系
      1. 基于计数的方法
          • 语料库:一般收集用于自然语言处理研究和应用的文本数据
            • 文本 → 单词列表 → 单词ID列表(语料库)
          • 单词的分布式表示(向量化):
            • 分布式假设:某个单词的含义由它周围的单词形成
            • 共现矩阵:各行对应相应单词的向量,记录了各个单词上下文中包含的单词频数
              • 余弦相似度:用于测量单词向量表示的相似度
            • 相似单词排序
          • 基于计数的方法的改进
            • 点互信息(PMI):PMI越高表明相关性越强
            • 降维:减少向量维度,常用方法为SVD(奇异值分解)
      1. 基于推理的方法(下一章)

Charpter3:word2vec

基于推理的方法:

  • 基于计数的方法的问题
      1. 在处理大规模语料库时会出现矩阵过大,计算困难的问题
      1. 一次性处理整个语料库的统计数据,获得单词的分布式表示
        1. 使用神经网络一次只需要一部分的学习数据,反复更新权重,逐步学习
神经网络中单词的处理方法:
  1. one-hot表示
CBOW模型:名为continuous bag-of-words,由Word2vec提出
从上下文的多个单词预测中间的单词(目标词)
  • CBOW模型的网络结构
notion image
skip-gram模型:反转了CBOW模型处理的上下文和目标词的模型
从中间的单词(目标词)预测周围的多个单词(上下文)
notion image
对比:
  • 从单词的分布式表示的准确度来看,在大多数情况下,skip-grm模型的结果更好。
  • 随着语料库规模的增大,在低频词和类推问题的性能方面,skip-gram模型往往会有更好的表现
  • 就学习速度而言, CBOW模型比skip-gram模型要快。这是因为skip-gram模型需要根据上下文数量计算相应个数的损失,计算成本变大

Charpter4:word2vec的高速化

Word2vec的计算瓶颈:
  1. 输入层的one-hot表示和权重矩阵的乘积
  1. 中间层和权重矩阵的乘积以及Softmax层的计算

1. Embedding层

存放词嵌入
词嵌入:在自然语言处理领域,单词的密集向量表示称为词嵌入或者单词的分布式表示
将模型的MatMul层改为Embedding层可以有效地减少不必要的计算,减少内存使用

2. 负采样(negative sampling)

将多分类问题转化为二分类问题,选择若干负例(负采样的本质)进行学习
负采样的采样方法:
  1. 根据语料库中单词频率,计算概率分布,依据概率分布进行采样
word2vec的应用:
  • 模型不同,精度不同(根据语料库选择最佳的模型)
  • 语料库越大,结果越好(始终需要大数据)
  • 单词向量的维数必须适中(太大会导致精度变差)

Charpter5:RNN

RNN(Recurrent Neural Network,循环神经网络):具有环路,可以在内部记忆隐藏状态
  • 通过展开RNN的循环,可以将其解释为多个RNN层连接起来的神经网络,可以通过常规的误差反向传播法进行学习(= BPTT)
马尔可夫性:马尔可夫性是指未来的状态仅依存于当前状态。
  • 当某个事件的概率仅取决于其前面的N个事件时,称为“N阶马尔可夫链”。
Backpropagation Through Time(基于时间的反向传播),简称BPTT。
  • Truncated BPTT是指按适当长度截断的误差反向传播法。
    • 为什么截断?
      • 序列太长,就会出现计算量或者内存使用量方面的问题
      • 随着层变长,梯度逐渐变小,梯度将无法向前一层传递
      • ⇒ 在水平方向上以适当的长度截断网络的反向传播的连接。
        Tips: 只截断反向传播,不截断正向传播
    • 为了维持正向传播的连接:
      • 需要按顺序输入数据
RNN层的计算图:
notion image

RNNLM:

RNNLM的模型结构
notion image
语言模型的评价:
  1. 困惑度(perplexity):用于评价语言模型的预测性能的指标
      • 表示概率的倒数,困惑度越小越好
      • 也可以称为分叉度:指下一个可以选择的选项的数量(下一个可能出现的单词的候选个数)。

Charpter6:Gated RNN

RNN的问题:

  1. RNN不擅长学习时序数据的长期依赖关系
      • BPTT会发生梯度消失和梯度爆炸的问题
        • 解决梯度爆炸的既定方法:梯度裁剪
⇒ 为了解决梯度消失问题:改变RNN层结构,提出了Gated RNN

Gated RNN

具有代表性的模型有LSTM和GRU
LSTM:Long Short-Term Memory(长短期记忆),意思是可以长(Long)时间维持短期记忆(Short-Term Memory)。
LSTM层与RNN层:
notion image
  • LSTM层多了路径称为记忆单元
LSTM层基于记忆单元计算隐藏状态
notion image
  • tanh的输出是-1.0~1.0的实数。我们可以认为这个-1.0~1.0的数值表示某种被编码的“信息”的强弱(程度)。
⇒ 添加输出门(管理下一个隐藏状态的输出)
notion image
⇒ 添加遗忘门(明确告诉记忆单元需要“忘记什么”)
notion image
⇒ 添加新的tanh节点(向记忆单元添加一些应当记住的新信息)
notion image
⇒ 添加输入门(判断新增信息g的各个元素的价值有多大)
notion image

RNNLM模型的改进

  • LSTM层的多层化:通过叠加多个层可以提高语言模型的精度
  • 基于Dropout抑制过拟合:
    • Dropout:在训练时随机忽略层的一部分
      • notion image
  • 权重共享:通过在不同层之间共享权重可以大大减少学习的参数数量,提高精度
    • 为什么说权重共享是有效的呢?
      • 直观上,共享权重可以减少需要学习的参数数量,从而促进学习。另外,参数数量减少,还能收获抑制过拟合的好处。
RNN的正则化很重要:模型正则化(Regularization),对学习算法的修改,限制参数的大小,减少泛化误差而不是训练误差。
 

Charpter7:基于RNN生成文本

使用语言模型生成文本:
  • 将输出结果按概率采样生成

seq2seq模型:也称Encoder-Decoder模型

seq2seq可以用在机器翻译、聊天机器人和自动图像描述等各种各样的应用中
seq2seq基于编码器和解码器进行时序数据的转换
  • 编码器
    • 编码器的层结构:Encoder类由Embedding层和LSTM层组成。Embedding层将字符(字符ID)转化为字符向量,然后将字符向量输入LSTM层。
    • notion image
  • 解码器
    • 解码器的层结构:Decoder类接收Encoder类输出的h,输出目标字符串。
    • notion image
 
时序数据转换:
  1. 可变长度的时序数据:
    1. 填充法

seq2seq的改进

  1. 反转输入数据:可以使得句子末尾单词的转换距离变近,梯度传播更容易,学习效率更高
  1. 偷窥(Peeky):
      • Peeky Decoder ⇒ 将编码器的输出h分配给所有时刻的LSTM层和Affine层
        • 将编码好的信息分配给解码器的其他层,这可以解释为其他层也能“偷窥”到编码信息。
      notion image

Charpter8: Attention

seq2seq的注意力机制(Attention mechanism):基于Attention机制,seq2seq可以像我们人类一样,将“注意力”集中在必要的信息上。

seq2seq存在问题:

  1. seq2seq中使用编码器对时序数据进行编码,然后将编码信息传递给解码器。此时,编码器的输出是固定长度的向量。
      • 固定长度的向量意味着,无论输入语句的长度如何(无论多长),都会被转换为长度相同的向量
      • 编码器强行把信息塞入固定长度的向量中,早晚会遇到瓶颈,即有用的信息会从向量中溢出。

编码器的改进

  1. 使用各个时刻LSTM层的隐藏状态

    解码器的改进

    1. 仅关注必要的信息,并根据该信息进行时序转换,即Attention机制
      1. 整体框架
      2. notion image
      3. 新增一个进行“某种计算”的层。这个“某种计算”接收(解码器)各个时刻的LSTM层的隐藏状态和编码器的hs
    1. 求解表示各个单词重要度的权重a
    1. 计算上下文向量
    Attention的实际含义:找到某个向量的相似向量
    • Attention从数据中学习两个时序数据之间的对应关系
    • Attention使用向量内积(方法之一)计算向量之间的相似度,并输出这个相似度的加权和向量
    ⇒ 具有Attention层的解码器的层结构
    notion image
    我们没有办法理解神经网络内部进行了什么工作(基于何种逻辑工作),而Attention赋予了模型“人类可以理解的结构和意义”。在上面的例子中,通过Attention,我们看到了单词和单词之间的关联性。由此,我们可以判断模型的工作逻辑是否符合人类的逻辑。
    双向RNN:eg:双向LSTM在之前的LSTM层上添加了一个反方向处理的LSTM层。然后,拼接各个时刻的两个LSTM层的隐藏状态,将其作为最后的隐藏状态向量
    • 双向处理,各个单词对应的隐藏状态向量可以从左右两个方向聚集信息。这些向量编码了更均衡的信息
    seq2seq的深层化和skip connection:
    • 加深层时为了避免泛化性能的下降,可以使用
      • 残差连接
      • Dropout
      • 权重共享
    Loading...
    目录