自然语言处理系列五十二》文本分类算法》BERT模型算法原理及文本分类

news2025/2/24 2:10:59

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】

文章目录

  • 自然语言处理系列五十二
    • 文本分类算法》BERT模型算法原理及文本分类
      • BERT中文文本分类代码实战
  • 总结

自然语言处理系列五十二

文本分类算法》BERT模型算法原理及文本分类

BERT是2018年10月由Google AI研究院提出的一种预训练模型。BERT的全称是Bidirectional Encoder Representation from Transformers。BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩: 全部两个衡量指标上全面超越人类,并且在11种不同NLP测试中创出SOTA表现,包括将GLUE基准推高至80.4% (绝对改进7.6%),MultiNLI准确度达到86.7% (绝对改进5.6%),成为NLP发展史上的里程碑式的模型成就。
14.5.1 BERT模型介绍及原理
除了OCR、语音识别,自然语言处理有四大类常见的任务。第一类任务:序列标注,譬如命名实体识别、语义标注、词性标注、分词等;第二类任务:分类任务,譬如文本分类、情感分析等;第三类任务:句对关系判断,譬如自然语言推理、问答QA、文本语义相似性等;第四类任务:生成式任务,譬如机器翻译、文本摘要、写诗造句等。
BERT刷新了GLUE benchmark的11项测试任务最高记录,这11项测试任务可以简单分为3类。序列标注类:命名实体识别CoNNL 2003 NER;单句分类类:单句情感分类SST-2、单句语法正确性分析CoLA;句对关系判断类:句对entailment关系识别MNLI和RTE、自然语言推理WNLI、问答对是否包含正确答案QNLI、句对文本语义相似STS-B、句对语义相等分析QQP和MRPC、问答任务SQuAD v1.1。虽然论文中没有提及生成式任务,BERT核心的特征提取器源于谷歌针对机器翻译问题所提出的新网络框架Transformer,本身就适用于生成式任务。
想深入了解BERT模型,首先应该理解语言模型。预训练的语言模型对于众多自然语言处理问题起到了重要作用,比如SQuAD问答任务、命名实体识别以及情感识别。目前将预训练的语言模型应用到NLP任务主要有两种策略,一种是基于特征的语言模型,如ELMo模型;另一种是基于微调的语言模型,如OpenAI GPT。这两类语言模型各有其优缺点,而BERT的出现,似乎融合了它们所有的优点,因此才可以在诸多后续特定任务上取得最优的效果。
1. 语言模型
语言模型(Language Model)是一串词序列的概率分布,通过概率模型来表示文本语义。语言模型有什么作用?通过语言模型,可以量化地衡量一段文本存在的可能性。对于一段长度为n的文本,文本里每个单词都有上文预测该单词的过程,所有单词的概率乘积便可以用来评估文本。在实践中,如果文本很长,P(wi|context(wi))的估算会很困难,因此有了简化版:N元模型。在N元模型中,通过对当前词的前N个词进行计算来估算该词的条件概率。对于N元模型,常用的有unigram、bigram和trigram,N越大,越容易出现数据稀疏问题,估算结果越不准。此外,N元模型没法解决一词多义和一义多词问题。
为了解决N元模型估算概率时的数据稀疏问题,研究者提出了神经网络语言模型,代表作有2003年Bengio等提出了的NNLM,但效果并不吸引人,足足沉寂了十年。在另一计算机科学领域机器视觉,深度学习混得风生水起,特别值得一提的是预训练处理,典型代表:基于ImageNet预训练的Fine-Tuning模型。图像领域的预处理跟现在NLP领域的预训练处理思路相似,基于大规模图像训练数据集,利用神经网络预先训练,将训练好的网络参数保存。当有新的任务时,采用相同的网络结构,加载预训练的网络参数初始化,基于新任务的数据训练模型,Frozen或者Fine-Tuning。Frozen指底层加载的预训练网络参数在新任务训练过程中不变,Fine-Tuning指底层加载的预训练网络参数会随着新任务训练过程不断调整以适应当前任务。深度学习是适用于大规模数据,数据量少训练出来的神经网络模型效果并没有那么好。所以,预训练带来的好处非常明显,新任务即使训练数据集很小,基于预训练结果,也能训练出不错的效果。
2. BERT模型总体结构
BERT是一种基于微调的多层双向Transformer编码器,其中的Transformer与原始的Transformer是相同的,并且实现了两个版本的BERT模型,在两个版本中前馈大小都设置为4层:
lBERTBASE:L=12,H=768,A=12,Total Parameters=110M
lBERTLARGE:L=24,H=1024,A=16,Total Parameters=340M
其中层数(即Transformer blocks块)表示为L,隐藏大小表示为H,自注意力的数量为A。
3. BERT模型输入
输入表示可以在一个词序列中表示单个文本句或一对文本(例如,[问题,答案])。对于给定的词,其输入表示是可以通过三部分Embedding求和组成。Embedding的可视化表示如图14.4所示。
在这里插入图片描述

图14.4 Embedding的可视化表示(图片来源于博客园)
Token Embeddings表示的是词向量,第一个单词是CLS标志,可以用于之后的分类任务,对于非分类任务,可以忽略词向量;
Segment Embeddings用来区别两种句子,因为预训练不只做语言模型还要做以两个句子为输入的分类任务;
Position Embeddings是通过模型学习得到的。
4. BERT模型预训练任务
BERT模型使用两个新的无监督预测任务对BERT进行预训练,分别是Masked LM和Next Sentence Prediction:。
1)Masked LM
为了训练深度双向Transformer表示,采用了一种简单的方法:随机掩盖部分输入词,然后对那些被掩盖的词进行预测,此方法被称为“Masked LM”(MLM)。预训练的目标是构建语言模型,BERT模型采用的是bidirectional Transformer。那么为什么采用“bidirectional”的方式呢?因为在预训练语言模型来处理下游任务时,我们需要的不仅仅是某个词左侧的语言信息,还需要右侧的语言信息。
在训练的过程中,随机地掩盖每个序列中15%的token,并不是像Word2vec中的cbow那样去对每一个词都进行预测。MLM从输入中随机地掩盖一些词,其目标是基于其上下文来预测被掩盖单词的原始词汇。与从左到右的语言模型预训练不同,MLM目标允许表示融合左右两侧的上下文,这使得可以预训练深度双向Transformer。Transformer编码器不知道它将被要求预测哪些单词,或者哪些已经被随机单词替换,因此它必须对每个输入词保持分布式的上下文表示。此外,由于随机替换在所有词中只发生1.5%,所以并不会影响模型对于语言的理解。
2)Next Sentence Prediction
很多句子级别的任务如自动问答(QA)和自然语言推理(NLI)都需要理解两个句子之间的关系,譬如上述Masked LM任务中,经过第一步的处理,15%的词汇被遮盖。那么在这一任务中我们需要随机将数据划分为等大小的两部分,一部分数据中的两个语句对是上下文连续的,另一部分数据中的两个语句对是上下文不连续的。然后让Transformer模型来识别这些语句对中,哪些语句对是连续的,哪些对子不连续。
5. 模型比较
ELMo、GPT、BERT都是近几年提出的模型,在各自提出的时候都取得了不错的成绩。并且相互之间也是相辅相成的关系,3个模型比较如图14.5所示。
在这里插入图片描述

图14.5 BERT、GPT、ELMo模型比较(图片来源于博客园)
再往前看,在NLP中有着举足轻重地位的模型和思想还有Word2vec、LSTM等。Word2vec作为里程碑式的进步,对NLP的发展产生了巨大的影响,但Word2vec本身是一种浅层结构,而且其训练的词向量所“学习”到的语义信息受制于窗口大小,因此后续有学者提出利用可以获取长距离依赖的LSTM语言模型预训练词向量,而此种语言模型也有自身的缺陷,因为此种模型是根据句子的上文信息来预测下文的,或者根据下文来预测上文,直观上来说,我们理解语言都要考虑到左右两侧的上下文信息,但传统的LSTM模型只学习到了单向的信息。Word2vec,单向LSTM,ELMo,OpenAI GPT,BERT几种模型比较如表14.1所示。
在这里插入图片描述
语言模型的每一次进步都推动着NLP的发展,从Word2vec到ELMo,从OpenAI GPT到BERT。通过这些发展我们也可以洞悉到,未来表征学习(Deep learning is representation learning)将会越来越多的应用到NLP相关任务中,它们可以充分的利用目前海量的数据,然后结合各种任务场景,去训练出更为先进的模型,从而促进AI项目的落地。

BERT中文文本分类代码实战

BERT中文文本分类代码实战内容请参见
《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】书籍。
更多的技术交流和探讨也欢迎加我个人微信chenjinglei66。

总结

此文章有对应的配套新书教材和视频:

【配套新书教材】
《自然语言处理原理与实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:本书从自然语言处理基础开始,逐步深入各种NLP热点前沿技术,使用了Java和Python两门语言精心编排了大量代码实例,契合公司实际工作场景技能,侧重实战。
全书共分为19章,详细讲解中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注、文本相似度算法、语义相似度计算、词频-逆文档频率(TF-IDF)、条件随机场、新词发现与短语提取、搜索引擎Solr Cloud和Elasticsearch、Word2vec词向量模型、文本分类、文本聚类、关键词提取和文本摘要、自然语言模型(Language Model)、分布式深度学习实战等内容,同时配套完整实战项目,例如对话机器人实战、搜索引擎项目实战、推荐算法系统实战。
本书理论联系实践,深入浅出,知识点全面,通过阅读本书,读者不仅可以理解自然语言处理的知识,还能通过实战项目案例更好地将理论融入实际工作中。
《分布式机器学习实战》(人工智能科学与技术丛书)【陈敬雷编著】【清华大学出版社】
新书特色:深入浅出,逐步讲解分布式机器学习的框架及应用配套个性化推荐算法系统、人脸识别、对话机器人等实战项目。

【配套视频】

推荐系统/智能问答/人脸识别实战 视频教程【陈敬雷】
视频特色:把目前互联网热门、前沿的项目实战汇聚一堂,通过真实的项目实战课程,让你快速成为算法总监、架构师、技术负责人!包含了推荐系统、智能问答、人脸识别等前沿的精品课程,下面分别介绍各个实战项目:
1、推荐算法系统实战
听完此课,可以实现一个完整的推荐系统!下面我们就从推荐系统的整体架构以及各个子系统的实现给大家深度解密来自一线大型互联网公司重量级的实战产品项目!
2、智能问答/对话机器人实战
由浅入深的给大家详细讲解对话机器人项目的原理以及代码实现、并在公司服务器上演示如何实际操作和部署的全过程!
3、人脸识别实战
从人脸识别原理、人脸识别应用场景、人脸检测与对齐、人脸识别比对、人脸年龄识别、人脸性别识别几个方向,从理论到源码实战、再到服务器操作给大家深度讲解!

自然语言处理NLP原理与实战 视频教程【陈敬雷】
视频特色:《自然语言处理NLP原理与实战》包含了互联网公司前沿的热门算法的核心原理,以及源码级别的应用操作实战,直接讲解自然语言处理的核心精髓部分,自然语言处理从业者或者转行自然语言处理者必听视频!

人工智能《分布式机器学习实战》 视频教程【陈敬雷】
视频特色:视频核心内容有互联网公司大数据和人工智能、大数据算法系统架构、大数据基础、Python编程、Java编程、Scala编程、Docker容器、Mahout分布式机器学习平台、Spark分布式机器学习平台、分布式深度学习框架和神经网络算法、自然语言处理算法、工业级完整系统实战(推荐算法系统实战、人脸识别实战、对话机器人实战)。

上一篇:自然语言处理系列五十一》文本分类算法》Python快速文本分类器FastText
下一篇:自然语言处理系列五十三》文本聚类算法》文本聚类介绍及相关算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2099152.html

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

相关文章

day7 测试知识积累

1.有一个班级表,里面有学号,姓名,学科,分数。找到语文学科分数最高的前10位的姓名(SQL) select 姓名 from 班级表 where 学科=语文 order by 分数 DESC limit 10; 2.有一张年级表,有班级,年级,学生姓名,找到这10名同学所在的班级(SQL) select class from 年级表 wher…

《python语言程序设计》第8章第12题生物信息:找出基因,生物学家使用字母A C T和G构成字符2串建模一个基因组(上)

草稿一、用单一方法遍历文本 9.1代码 genome_text TTATGTTTTAAGGATGGGGCGTTAGTTdef div_word(word_to_judge):len_num len(word_to_judge)save_word ""if len_num % 3 0:print("This word is valid")if save_word.find("ATG") "ATG&qu…

SpringBoot链路追踪②:如何集成?

首先下载Zipkin的jar包&#xff1a;Central Repository: io/zipkin/zipkin-server (maven.org) 根据自己的项目版本。我的版本分别是&#xff1a; <spring-boot.version>2.7.18</spring-boot.version> <spring-cloud.version>2021.0.8</spring-cloud.ve…

Spring理论知识(Ⅳ)——Spring Instrumentation模块

Spring的组成 Spring由20个核心依赖组成&#xff0c;这20个核心依赖可以分为6个核心模块 Spring Instrumentation模块介绍 总的来说&#xff0c;Spring Instrumentation提供了类植入&#xff08;Instrumentation&#xff09;支持和类加载器的实现&#xff0c;可以在特定…

解决报错【ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。】

1、问题发生 用pip安装时出现报错【ERROR: Could not install packages due to an OSError: [WinError 5] 拒绝访问。: c:\\programdata\\anaconda3\\lib\\site-packages\\__pycache__\\typing_extensions.cpython-39.pyc Consider using the --user option or check the perm…

多媒体信息共享|基于SprinBoot+vue的多媒体信息共享平台(源码+数据库+文档)

多媒体信息共享平台 目录 基于SprinBootvue的多媒体信息共享平台 一、前言 二、系统设计 三、系统功能设计 系统前台功能模块 后台模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌…

软考计算机软件基础知识总结

目录 前言 计算机软件概述 操作系统 数据库 文件系统 网络协议 中间件 软件构件 应用软件 最后 前言 早期的计算机软件和计算机程序 (Computer Program) 的概念几乎不加区别&#xff0c;后来计算机 软件的概念在计算机程序的基础上得到了延伸。计算机软件是指计算机系…

基于HybridCLR做的一个FlyBird Demo

周末学习了下HybridCLR的原理和用法做了个FlyBrid小demo。记录一下 官网里写的原理&#xff1a; 对于这个我的理解是&#xff1a; Unity引擎的代码使用还是AOT方式。对于项目业务这块打成多个程序集。运行时使用了解释器&#xff0c;解释执行。从而完成热更新。 一。环境安装…

MySQL5.6迁移到DM8

注意&#xff1a; MySQL 5.7 与 MySQL 8.0 的语法有所区别&#xff0c;本文档是将MySQL5.6迁移到DM8。 迁移前准备 源库 数据库信息 统计源端业务库要迁移的数据量、字符编码、归档保留等信息。 内容 说明 备注 数据库架构 单机 节点数 1 数据库版本 MySQL 5.6…

OpenGL/GLUT实践:实现反弹运动的三角形动画与键盘控制(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub&#xff1a;A-UESTCer-s-Code 文章目录 1 运行效果2 实验过程2.1 环境配置2.2 绘制三角形2.2.1 渲染函数2.2.2 主函数2.2.3 运行结果 2.3 调整窗口大小2.4 简单动画与按键控制2.4.1 简单旋转2.4.2 键盘控制 2.5 窗口反弹动画2.5.1 处理窗口大小变化2.5.2 渲染函数…

【Redis】缓存(下)

经过缓存这篇文章的概述&#xff0c;已经对缓存有了初步的了解和认知。在本篇文章中&#xff0c;主要是通过代码来实现缓存的应用&#xff0c;以及在使用缓存过程中出现的经典问题。 简单应用 需求&#xff1a;根据菜品id来查询缓存 流程&#xff1a;① 从缓存中查询&#x…

『功能项目』怪物的信息显示【15】

本章项目成果展示 我们打开上一篇14怪物反击主角复活的项目&#xff0c; 本章要做的事情是当主角进入怪物的攻击范围之内时显示怪物的血量信息 在Canvas创建一个空物体 将空物体GameObject钉到视角上方 重命名为KingInfoUI 在子级创建一个Image 在资源文件夹下创建一个空文件命…

【数据结构 | 每日一题】图的概念辨析

图的概念辨析 考点分析&#xff1a;我们学习数据结构图的第一小节就是&#xff1a;图的基本概念&#xff0c;我们会发现图的概念非常多且有些概念之间又很像&#xff0c;而对于初学者来说&#xff0c;相比树的概念是不好理解的&#xff0c;很容易搞混&#xff0c;因此做了这么…

Tapd敏捷开发平台的使用心得

Tapd敏捷开发平台的使用心得 一、Tapd 简介 TAPD(Tencent Agile Product Development),腾讯敏捷产品研发平台行业领先的敏捷协作方案,贯穿敏捷产品研发生命周期的一站式服务,了解敏捷如下图 二、几个核心模块概念 需求迭代缺陷故事墙前期项目需求的管理,可以按类别建…

如何交叉编译 Linux v4l-utils 依赖库?

本文将以在 Ubuntu 20.04 系统的 x86_64 机器上&#xff0c;为 aarch64 架构的嵌入式机器&#xff0c;交叉编译 v4l-utils&#xff08;libv4l&#xff09;为例&#xff0c;进行介绍。 安装编译 v4l-utils 所需的依赖库。 $ apt update $ apt install make automake libtool安…

【docker】docker 简介

docker 简介 是什么虚拟化、容器化案例为什么要虚拟化、容器化&#xff1f; 是什么虚拟化、容器化 物理机&#xff1a;实际的服务器或者计算机。相对于虚拟机而言的对实体计算机的称呼。物理机提供给虚拟机以硬件环境&#xff0c;有时也称为“寄主”或“宿主”。 虚拟化&…

【时间盒子】-【3.新建项目】创建元服务工程,选择默认模板Empty Ability

一、新建项目 1、打开DevEco Studio >>文件>>新建>>新建项目&#xff0c;选择元服务 Atomic Service>>默认模板Empty Ability。 2、设置元服务的工程名称、Bundle name等&#xff0c;模型选Stage&#xff0c;语言是ArkTS&#xff0c;支持的设备类型只…

异步并发处理利器:在 Jupyter Notebook 中玩转 asyncio

asyncio.run报错 RuntimeError: asyncio.run() cannot be called from a running event loop 在jupyter notebook中运行下述代码就会出现上述报错 import uvicorn from fastapi import FastAPI from fastapi.responses import JSONResponse app FastAPI() app.get(“/”) d…

Openwrt 安装 AX210 无线网卡

安装 TTYD 我安装的是官方原版的 Openwrt&#xff0c;首先需要安装 YYTD 来从网页控制 Openwrt。 安装驱动 参考这个链接&#xff0c;跟着做。 iwlwifi-firmware-ax210 我买设备技术提供代码如下&#xff0c;但是没有安装 成功&#xff0c;中间报错。 opkg update opkg i…

<el-table> 把表格内同一列相同的数据合并为一行

<el-table> 把表格内同一列相同的数据合并为一行 具体效果如下图&#xff1a; 参考代码&#xff08;可直接运行&#xff09;&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"/><meta name"viewport" co…