当前位置: 首页 > article >正文

NLP 主要语言模型分类

文章目录

    • 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
      在这里插入图片描述
      在这里插入图片描述
    • 特点
      • 一种经典的序列模型,能够处理变长输入序列。
      • 对输入内容串行处理,处理后面的内容,必须要等前面内容顺序先处理完毕,有效率问题。
    • 应用
      语言建模、机器翻译和情感分析。
    • 变体
      1. LSTM
        • 长短期记忆网络
          • 神经语言模型
          • 选择性遗忘
            通过多个 RNN 来实现
          • 三个门
            在这里插入图片描述 - Gate 机制(门限机制)
            • ft、it、ot 中用的是 sigmod 做激活函数
              Sigmod 输出的结果范围(0, 1),无限接近 0 的结果会被忽略
            • 通过数据筛选,做记忆更新
            • 生成候选记忆时用tanh
        • 特点
          • 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]
        • 应用
          • 处理长序列任务
          • 语言建模、机器翻译和情感分析
      2. GRU
        门控循环单元
        • 神经语言模型
        • 和 LSTM 相比,只有两个门
          1. 重置门
          2. 更新门
            • 控制信息的保留和更新
            • 将短期和长期记忆信息融合在一个隐藏状态中
        • 特点
          也是一种带有门控机制的 RNN 变体,但它拥有更简单的结构。在某些情况下,GRU 的性能与 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 的差异
  1. 仅使用了transformer 的encoder 层
    通用 transformer 层
  2. position encoding
    位置编码最多512个
    原先是正余弦位置编码,是固定的,不可训练
  3. feed forward 两个线性层之间的激活函数
    使用了 Gelu
    原先是 Relu
bert transformer 层

在这里插入图片描述

  • 前提
    • embedding
      Embedding 层由三部分加和组成
      在这里插入图片描述

        		1. 每个词对应的矩阵 token embeddings
        		2. 每句话对应的矩阵 segment embeddings
        			判断来源语句
        		3. 每个词位置矩阵 position embeddings
        			带入语序信息
        		4. 加入 [CLS] [SEP] 标记文本起始位置
      
    • 矩阵维度 embedding_dim

      • 768
        bert base 版本
        多头机制切分12份64维度矩阵
      • 1024
        bert large 版本
    • 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
    • 最终形状
      [seq_len, embedding_dim]

  1. multi-head self attention
    • 结构梳理在这里插入图片描述

      1. embedding 的输出,作为 self attention 的输入
        Q、K、V 是三个形状相同的矩阵
        • 三个线性层权重不同
        • 实现对 X 的不同变化
        • 线性层不改变 x 的形状
      2. 公式解释与作用
      • Q * K的转置
        • 得到 文本长度 * 文本长度的矩阵
          会得到每个字和整句话中任何一个字的相关性
      • Softmax 对矩阵中每个向量做归一化(逐行softmax)
        • 得到每个字对整句话的注意力
          可以很好的捕捉长距离的关系。
        • 分值越高,注意力越高,相关性越强,字之间相关性与注意力成正比
      • 根号 dk
        • 根号下(神经元个数(768) / 总头数)
        • 除以根号 dk
          可以拉低矩阵数值分布,提高 softmax 计算后每个维度数值在 0-1 的分布情况
      1. 最终形状
        • X * Q 、X * K、X * V
          [seq_len * embedding_dim]
        • Z
          [seq_len * embedding_dim]
    • 多头自注意力机制

      • 多头机制 muti-head
        • 每一份都执行一次 2 的计算流程
          最后把所有的计算结果拼起来
        • 相当于模型集成
          • 可以认为在同时训练相同大小的多个模型
          • 可以提升模型拟合效果
            集成模型比单模型效果好
    • 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 输出)
        • 深层次网络结构下,保留更多的原始信息
  • 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

输出形状

[batch_size, sentence_length, hidden_size], [sentence_length, hidden_size]


http://www.kler.cn/a/317305.html

相关文章:

  • 基于STM32的智能家居安防系统设计
  • Qt主线程把数据发给子线程,主线程会阻塞吗
  • vue动态列(表头)
  • 提升前端性能:如何优化多个异步请求的执行效率Promise.all()
  • 有了Makefile, CMake存在的意义是什么?如何借助Makefile构建ObjC语言编译环境?如何获取编译器的版本号?
  • CCI3.0-HQ:用于预训练大型语言模型的高质量大规模中文数据集
  • 项目实战:Qt+OSG爆破动力学仿真三维引擎测试工具v1.1.0(加载.K模型,子弹轨迹模拟动画,支持windows、linux、国产麒麟系统)
  • 鹏哥C语言43---函数的嵌套调用和链式访问
  • gin参数绑定panic错误分析
  • OpenCV特征检测(5)检测图像中的角点函数cornerMinEigenVal()的使用
  • 【TS】TypeScript基础入门篇以及实践案例
  • 中间件:maxwell、canal
  • Unity 高亮插件HighlightPlus介绍
  • Node.js backend for OpenAI image generation giving error code 400
  • Excel导入时,一个简单的匹配中文外键的方法
  • 防护装备穿戴与否检测系统源码分享
  • Vue.js Emit
  • 多旋翼无人机维修、组装、调试技术详解
  • typora使用和激活
  • 【机器学习】生成对抗网络(GAN)——生成新数据的神经网络
  • 共建智能座舱AI应用生态 夸克合作斑马智行开拓AI搜索新场景
  • 【Linux】SSH:远程连接
  • python 项目中使用Elasticsearch
  • Qt Creator项目模板介绍
  • 使用OVPN导致电脑网速变慢的原因
  • MySQL record 08 part