文章目录
- ngram
- 自回归语言模型
- Transformer
- GPT
- BERT(2018年提出)
- 基于 Transformer 架构的预训练模型
- 特点
- 应用
- 基于 transformer(2017年提出,attention is all you need)
- 堆叠层数
- 与原transformer 的差异
- bert transformer 层
 
- 输出形状
 
 
ngram

- N一般取 3-5
- 马尔可夫假设 - 假设第 n 个词出现的概率,仅收前面有限个词影响
- 处理未出现语料的概率 - 平滑方法:回退 - 谷歌给出的回退建议值:0.4
- 试用二元组代替三元组,做惩罚
- P(c | ab) = P(c | b) * Bow(ab)
 
 
- 平滑方法:回退 
 
自回归语言模型
-  RNN - 循环神经网络
 自带激活函数 tanh
  
  
- 特点 - 一种经典的序列模型,能够处理变长输入序列。
- 对输入内容串行处理,处理后面的内容,必须要等前面内容顺序先处理完毕,有效率问题。
 
- 应用
 语言建模、机器翻译和情感分析。
- 变体 - LSTM - 长短期记忆网络 - 神经语言模型
- 选择性遗忘
 通过多个 RNN 来实现
- 三个门
  - Gate 机制(门限机制) - Gate 机制(门限机制)- ft、it、ot 中用的是 sigmod 做激活函数
 Sigmod 输出的结果范围(0, 1),无限接近 0 的结果会被忽略
- 通过数据筛选,做记忆更新
- 生成候选记忆时用tanh
 
- ft、it、ot 中用的是 sigmod 做激活函数
 
- 特点 - RNN 的一种扩展,通过引入门控机制来解决传统 RNN 中的梯度消失问题。
- 双向 LSTM
 文本分别正向和反向输入得到两个 LSTM 输出- LSTM 是时序模型
- 双倍参数得到更好的训练效果
 
 
- 输出形状 - batch_first=True
 [batch_size, sentence_length, hidden_size], [sentence_length, hidden_size]
- batch_first=False
 [sentence_length, batch_size,, hidden_size], [sentence_length, hidden_size]
 
- batch_first=True
- 应用 - 处理长序列任务
- 语言建模、机器翻译和情感分析
 
 
- 长短期记忆网络 
- GRU
 门控循环单元- 神经语言模型
- 和 LSTM 相比,只有两个门 - 重置门
- 更新门 - 控制信息的保留和更新
- 将短期和长期记忆信息融合在一个隐藏状态中
 
 
- 特点
 也是一种带有门控机制的 RNN 变体,但它拥有更简单的结构。在某些情况下,GRU 的性能与 LSTM 相当。
- 应用 - 处理长序列任务。
- 语言建模、机器翻译和情感分析。
 
 
 
- LSTM 
 
- 循环神经网络
-  CNN 
 卷积神经网络
  
 按照文本长度卷积,需要先转置,卷积结束再转置回原形状。-  特点 - 可以捕获局部特征并将它们组合成全局特征。
- 有语序信息
- 可以并行计算
 
-  应用 
 文本分类和文本表示学习
-  变体 
 Gated-CNN
  
 卷积 A 与卷积 B 对位相乘,过滤 AB 相乘后为 0 部分,放缩 B 中在 0-1 的部分。
 
-  
Transformer
- 预训练语言模型
 基于自注意力机制 self attention。
- 特点
 完全摒弃了 RNN 和 CNN,取得了在各种 NLP 任务上的显著性能提升。
GPT
- 基于Transformer架构的生成式模型
 能够生成与训练数据类似的新样本的模型
- 应用
 生成文本
 回答问题
 完成对话
 文本摘要
 语言翻译
 …
BERT(2018年提出)
基于 Transformer 架构的预训练模型
- 下载预训练模型
 hugging face
- 预训练方式 - 完形填空 MLM(mask language model)
- 句子关系预测 NSP(next sentence pretraining)
 判断两句话是不是挨着的
 
特点
1. 通过大规模无监督预训练学习出通用的语言表示,通过微调(fine-tuning)在各种 NLP 任务上取得了令人瞩目的性能。- 预训练方法 pre-train + fine-tune- fine-tune可以理解为通过反向传播中对 bert 参数的再训练- Pre-train- 预训练会提前收集海量无标注文本数据- 进行预训练,在任务模型中使用- 预训练方式- 完形填空mask Language model `(预测 mask 对应字符)`- 句子关系预测两句话同时送入模型判断上下文关系`(二分类任务)`				- 在预训练过程中,BERT 被训练来预测给定句子中的缺失单词,这种预测任务被称为掩码语言模型(MLM)。
2. 是一种动态的,词义结合语境判断
3. 通过预训练利用了海量无标注文本数据
4. 相比词向量,bert 的文本标识结合了语境- 本质是一种文本表征- 词义是动态的,可以结合语境判断
5. Transformer 模型结构有很强的拟合能力,词与词之间的距离不会造成关系计算上的损失
6. 训练的效果得到大幅提升
- 核心思想 - 本质是一种动态的文本表征
- 通过双向(bidirectional)的训练方式,在预训练阶段学习出语言的上下文相关表示,从而在下游任务中更好地理解语言。
 
应用
- 常用于各种自然语言处理的判别式任务
- 具体分类
 文本分类
 命名实体识别
 文本相似度计算
 语义理解
 …
基于 transformer(2017年提出,attention is all you need)
堆叠层数
- base 版本
 共堆叠 12 层 transformer encoder 层
- large 版本
 共堆叠 24 层 transformer encoder 层
与原transformer 的差异
- 仅使用了transformer 的encoder 层
 通用 transformer 层
- position encoding
 位置编码最多512个
 原先是正余弦位置编码,是固定的,不可训练
- feed forward 两个线性层之间的激活函数
 使用了 Gelu
 原先是 Relu
bert transformer 层

- 前提 -  embedding 
 Embedding 层由三部分加和组成
  1. 每个词对应的矩阵 token embeddings2. 每句话对应的矩阵 segment embeddings判断来源语句3. 每个词位置矩阵 position embeddings带入语序信息4. 加入 [CLS] [SEP] 标记文本起始位置
-  矩阵维度 embedding_dim - 768
 bert base 版本
 多头机制切分12份64维度矩阵
- 1024
 bert large 版本
 
- 768
-  embedding 层加和后会做 layer normalization 
 做一次归一化操作(提高模型稳定性)
  公式注解:减均值,除以标准差,乘以可训练系数。其中:U 是均值σ 是标准差
-  总参数量 
 vocab * embedding_dim + max_sequence_length * embedding_dim + n * embedding_dim + embedding_dim + embedding_dim- 词表embedding 参数
 vocab * embedding_dim
- 句子参数
 n * embedding_dim
- layer_norm层参数
 embedding_dim + embedding_dim
- 位置参数
 max_sequence_length * embedding_dim
 允许最大长度 * embedding_size
 
- 词表embedding 参数
-  最终形状 
 [seq_len, embedding_dim]
 
-  
- multi-head self attention -  结构梳理  - embedding 的输出,作为 self attention 的输入
 Q、K、V 是三个形状相同的矩阵- 三个线性层权重不同
- 实现对 X 的不同变化
- 线性层不改变 x 的形状
 
- 公式解释与作用
 - Q * K的转置 - 得到 文本长度 * 文本长度的矩阵
 会得到每个字和整句话中任何一个字的相关性
 
- 得到 文本长度 * 文本长度的矩阵
- Softmax 对矩阵中每个向量做归一化(逐行softmax) - 得到每个字对整句话的注意力
 可以很好的捕捉长距离的关系。
- 分值越高,注意力越高,相关性越强,字之间相关性与注意力成正比
 
- 得到每个字对整句话的注意力
- 根号 dk - 根号下(神经元个数(768) / 总头数)
- 除以根号 dk
 可以拉低矩阵数值分布,提高 softmax 计算后每个维度数值在 0-1 的分布情况
 
 - 最终形状 - X * Q 、X * K、X * V
 [seq_len * embedding_dim]
- Z
 [seq_len * embedding_dim]
 
- X * Q 、X * K、X * V
 
- embedding 的输出,作为 self attention 的输入
-  多头自注意力机制 - 多头机制 muti-head - 每一份都执行一次 2 的计算流程
 最后把所有的计算结果拼起来
- 相当于模型集成 - 可以认为在同时训练相同大小的多个模型
- 可以提升模型拟合效果
 集成模型比单模型效果好
 
 
- 每一份都执行一次 2 的计算流程
 
- 多头机制 muti-head 
-  self attention 最终输出 
 经过 QKV 计算之后的结果,再经过一层线性层
-  总参数量 
 self_attention_parameters = embedding_dim * embedding_dim + embedding_dim + embedding_dim + embedding_dim- self_attention_out
 embedding_dim * embedding_dim + embedding_dim
- 残差机制 - embedding_dim + embedding_dim
 layerNorm(原始信息 x + self attention 输出)
- 深层次网络结构下,保留更多的原始信息
 
 
- self_attention_out
 
-  
- feedforward
 𝑜𝑢𝑡𝑝𝑢𝑡=𝐿𝑖𝑛𝑒𝑟(𝑔𝑒𝑙𝑢(𝐿𝑖𝑛𝑒𝑟(𝑥)))
 结构
 1. 线性映射到原来矩阵的 4 倍矩阵
 2. 4倍矩阵先经过 gelu
 3. 从 4 倍矩阵再映射回原矩阵大小
 为了增加高维数据的数据表征- 总参数量
 ([1, embedding_dim] * [embedding_dim, hide_size] + hide_size) + ([1, hide_size]* [hide_size, embedding_dim] + embedding_dim) + embedding_dim + embedding_dim- 第一个线性层
 [1, embedding_dim] * [embedding_dim, hide_size]
- 第二个线性层
 [1, hide_size] * [hide_size, embedding_dim] + embedding_dim
- 残差机制
 embedding_dim + embedding_dim
 layerNorm(原始信息 z + feed forward 输出)
 
- 第一个线性层
 
- 总参数量
- pooler层 - 将[CLS]这个token过一下全连接层,再过一下 tanh 激活函数,作为该句子的特征向量: 
- 这里的 pooler 层是一个线性变换,得到一个固定维度的池化表示,不是传统的池化
- 参数总量
 embedding_dim * embedding_dim + embedding_dim
 
- 将[CLS]这个token过一下全连接层,再过一下 tanh 激活函数,作为该句子的特征向量:
输出形状
[batch_size, sentence_length, hidden_size], [sentence_length, hidden_size]