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

自然语言处理里预训练模型——BERT

BERT,全称Bidirectional Encoder Representation from Transformers,是google在2018年提出的一个预训练语言模型,它的推出,一举刷新了当年多项NLP任务值的新高。前期我在零、自然语言处理开篇-CSDN博客 的符号向量化一文中简单介绍过其原理,今天我将更加详细的介绍下其工作流程。

零、BERT模型架构

当前的语言模型主要分为两种:

一种是自回归(Auto-Regressive)语言模型,Aotoregressive Lanuage Modeling,自回归语言模型:根据前面(或后面)出现的token来预测当前时刻的token,代表模型有ELMO、GTP(transformer中的decode解码器结构)(等,它一般采用生成类任务做预训练,类似于我们写一篇文章,自回归语言模型更擅长做生成类任务(Natural Language Generating,NLG),例如文章生成等。

另一种是自编码(Auto-Encoding)语言模型,Autoencoding Language Modeling,自编码语言模型:通过上下文信息来预测当前被mask的token,代表有BERT、Word2Vec(CBOW)等.它使用MLM做预训练任务,自编码预训模型往往更擅长做判别类任务,或者叫做自然语言理解(Natural Language Understanding,NLU)任务,例如文本分类,NER等。训练过程类似于做完形填空,下面会介绍到。

BERT模型采用的是transformer里的encode编码器的结构,它的模型总体结构如下:

 每一个transformer encode结构如下:

一、BERT的训练流程

1.0 BERT的输入

BERT的输入是一个长度为n的输入序列(n表示词组个数,token数),一般是512,通常包含下面三个部分:

(1)Token Embeddings:采用wordpiece对文本进行切割成一个个子词,经过embedding后每一个子词输出为768维的向量 (1, n, 768)。此层的tokenization使用的方法是WordPiece tokenization,将词转换为one hot编码,再经过embedding层,转换成768维向量。

(2)Segment Embeddings:切割句子用的(1, n, 768),相比transformer,这个是新增的

(3)Position Embeddings:用于标记词在句子中的位置,(1, n, 768),使用的是cos和sin的固定位置标记法。

整个输入是一个1*512*768的张量。

对于输入的句子,将进行以下两个预训练任务。 

1.1 BERT主要包含两个训练任务

1、 随机掩码训练任务:

(1)随机地将一句话里的某个单词替换成<mask>,输入到N层的transformer encode编码器里。

(2)将<mask>的隐层状态输入到softmax中进行预测,输出预测的单词结果。

(3)将预测得到的单词结果和原始数据中单词计算交叉熵,更新参数。

通过上面3步,可以学习到“研究生”这个单词单独的语义,又能学习到它的上下文的语义关系。是不是很像完形填空~。

2、下一个句子预测任务

这个任务主要学习句子间的关系,它的训练过程如下:

(1)将数据集中连续两个句子A和B进行拼接(负例的构建就是随机组合句子就行)。

(2)在拼接的句子前端加入<cls>标签,代表句子是否连续,在两个句子间加入<seg>标签,输入到N层的transformer encode里。

(3)将<cls>的隐层状态输入softmax进行预测。

(4)将预测结果和实际结果计算交叉熵,更新参数。

二、BERT应用时的微调方法

BERT微调时,采用少量的标注数据,进行少量轮次的迭代,即可将模型微调为一个特定领域的任务模型,比如句子相似性匹配,句子分类,问答对匹配、序列标注等。

http://www.lryc.cn/news/320415.html

相关文章:

  • 2024年信息技术与计算机工程国际学术会议(ICITCEI 2024)
  • 渗透测试修复笔记 - 02 Docker Remote API漏洞
  • Spring(创建对象的方式3个)
  • 【GPT-SOVITS-02】GPT模块解析
  • 6个选品建议,改善你的亚马逊现状。
  • SQL中的SYSDATE函数
  • Rust的async和await支持多线程运行吗?
  • P2676 [USACO07DEC] Bookshelf B
  • 【数学】第十三届蓝桥杯省赛C++ A组/研究生组《爬树的甲壳虫》(C++)
  • Java毕业设计 基于springboot vue招聘网站 招聘系统
  • Leetcode 1. 两数之和
  • 【elasticsearch实战】从零开始设计全站搜索引擎
  • 基于tcp协议的网络通信(基础echo版.多进程版,多线程版,线程池版),telnet命令
  • Ubuntu20系统安装完后没有WIFI
  • 计算机视觉——目标检测(R-CNN、Fast R-CNN、Faster R-CNN )
  • log4j2.xml配置文件不生效
  • QT信号与槽实现方式
  • Yarn面试重点
  • 高速口光口通信
  • python--剑指offer--15. 二进制中1的个数
  • uniapp h5 部署
  • 排序算法:快速排序(递归)
  • 蓝桥杯每日一题(BFS)
  • 【C语言】linux内核pci_save_state
  • 轻松打造完美原型:9款在线工具推荐
  • Vue3中Pinia状态管理库学习笔记
  • 共谋企业出海新篇章纷享销客荣获数字中国企业峰会“卓越成果奖”
  • 【MySQL】group_concat 函数和 locate 函数运用之找到每篇文章的主题
  • RedisCluster集群中的插槽为什么是16384个?
  • 一直出现问题,发现服务器磁盘空间已满导致,腾出服务器磁盘空间命令