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 embeddings2. 每句话对应的矩阵 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.mzph.cn/diannao/54448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Packet Tracer - 配置编号的标准 IPv4 ACL(两篇)

Packet Tracer - 配置编号的标准 IPv4 ACL(第一篇) 目标 第 1 部分:计划 ACL 实施 第 2 部分:配置、应用和验证标准 ACL 背景/场景 标准访问控制列表 (ACL) 为路由器 配置脚本,基于源地址控制路由器 是允许还是拒绝数据包。本练习的主要内…

leetcode练习 二叉树的最大深度

给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3提示: 树中节点的数量在 [0, 104] 区间内。-100 …

python学习第十节:爬虫基于requests库的方法

python学习第十节:爬虫基于requests库的方法 requests模块的作用: 发送http请求,获取响应数据,requests 库是一个原生的 HTTP 库,比 urllib 库更为容易使用。requests 库发送原生的 HTTP 1.1 请求,无需手动…

Linux:login shell和non-login shell以及其配置文件

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 shell是Linux与外界交互的程序,登录shell有两种方式,login shell与non-login shell,它们的区别是读取的配置文件不同,本…

NPM如何切换淘宝镜像进行加速

什么是淘宝镜像NPM? 淘宝镜像NPM和官方NPM的主要区别在于服务器的地理位置和网络访问速度。淘宝镜像NPM是由淘宝团队维护的一个npm镜像源,主要服务于中国大陆用户,提供了一个国内的npm镜像源,地址为 https://registry.npmmirror.…

解决Tez报错问题

在启动hive的时候,发现该报错 1、检测HADOOP_PATH环境变量 echo $HADOOP_CLASSPATH 如果没有输出,说明我们的配置文件没有生效,这时候需要重写source一下 2、刷新配置文件生效 source /etc/profile 有输出,环境生效 3、再次运…

【数据结构初阶】链式二叉树接口实现超详解

文章目录 1. 节点定义2. 前中后序遍历2. 1 遍历规则2. 2 遍历实现2. 3 结点个数2. 3. 1 二叉树节点个数2. 3. 2 二叉树叶子节点个数2. 3. 3 二叉树第k层节点个数 2. 4 二叉树查找值为x的节点2. 5 二叉树层序遍历2. 6 判断二叉树是否是完全二叉树 3. 二叉树性质 1. 节点定义 用…

SpringCloud从零开始简单搭建 - JDK17

文章目录 SpringCloud Nacos从零开始简单搭建 - JDK17一、创建父项目二、创建子项目三、集成Nacos四、集成nacos配置中心 SpringCloud Nacos从零开始简单搭建 - JDK17 环境要求:JDK17、Spring Boot3、maven。 那么,如何从零开始搭建一个 SpringCloud …

Qt构建JSON及解析JSON

目录 一.JSON简介 JSON对象 JSON数组 二.Qt中JSON介绍 QJsonvalue Qt中JSON对象 Qt中JSON数组 QJsonDocument 三.Qt构建JSON数组 四.解析JSON数组 一.JSON简介 一般来讲C类和对象在java中是无法直接直接使用的,因为压根就不是一个规则。但是他们在内存中…

使用 Internet 共享 (ICS) 方式分配ip

设备A使用dhcp的情况下,通过设备B分配ip并共享网络的方法。 启用网络共享(ICS)并配置 NAT Windows 自带的 Internet Connection Sharing (ICS) 功能可以简化 NAT 设置,允许共享一个网络连接给其他设备。 打开网络设置&#xff1…

灵当CRM系统index.php存在SQL注入漏洞

文章目录 免责申明漏洞描述搜索语法漏洞复现nuclei修复建议 免责申明 本文章仅供学习与交流,请勿用于非法用途,均由使用者本人负责,文章作者不为此承担任何责任 漏洞描述 灵当CRM系统是一款功能全面、易于使用的客户关系管理(C…

jacoco生成单元测试覆盖率报告

前言 单元测试是日常编写代码中常用的,用于测试业务逻辑的一种方式,单元测试的覆盖率可以用来衡量我们的业务代码经过测试覆盖的比例。 目前市场上开源的单元测试覆盖率的java插件,主要有Emma,Cobertura,Jacoco。具体…

2025年最新大数据毕业设计选题-Hadoop综合项目

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

Docker操作MySQL

1,拷贝; docker cp mysql01:/etc/mysql .2,修改conf.d和mysql.conf.d文件 3, vim mysql/my.cnf 4,拷贝并替换my.cnf文件 5,mysql镜像重启命令: docker exec -it mysql01 -uroot -p0000006&…

MySQL篇(运算符)(持续更新迭代)

目录 一、简介 二、运算符使用 1. 算术运算符 1.1. 加法运算符 1.2. 减法运算符 1.3. 乘法与除法运算符 1.4. 求模(求余)运算符 2. 比较运算符 2.1. 等号运算符 2.2. 安全等于运算符 2.3. 不等于运算符 2.4. 空运算符 2.5. 非空运算符 2.6.…

万字长文——ConvNeXt(2022CVPR),卷积网络的顶峰之作,在Transformer盛行的当下,卷积网络还能再战!

ConvNext:A ConvNet for the 2020s ConvNext:2020 年代的卷积神经网络 论文地址: https://arxiv.org/pdf/2201.03545 自从Transformer成功应用在视觉领域并且取得显著成绩后,很多人开始抛弃卷积网络架构,转而使用Transformer。然而有的大佬不认为卷积过时了,于是有了这篇…

【工具变量】科技金融试点城市DID数据集(2000-2023年)

时间跨度:2000-2023年数据范围:286个地级市包含指标: year city treat post DID(treat*post) 样例数据: 包含内容: 全部内容下载链接: 参考文献-pdf格式:https://…

[Visual Stuidio 2022使用技巧]2.配置及常用快捷键

使用vs2022开发WPF桌面程序时常用配置及快捷键。 语言:C# IDE:Microsoft Visual Studio Community 2022 框架:WPF,.net 8.0 一、配置 1.1 内联提示 未开启时: 开启后: 开启方法: 工具-选…

每日刷题(算法)

我们N个真是太厉害了 思路: 我们先给数组排序,如果最小的元素不为1,那么肯定是吹牛的,我们拿一个变量记录前缀和,如果当前元素大于它前面所有元素的和1,那么sum1是不能到达的值。 代码: #def…

python - 子类为什么调用父类的方法

菜鸟教程 - 面向对象https://www.runoob.com/python3/python3-class.html为什么写这个呢 ,因为很多时候,事情很简单,但我往往记住了使用方式,忘记了使用原因,也因为自己看到super()时,也想问为什么要用supe…