自然语言处理实战10-文本处理过程与输入bert模型后的变化

news2025/1/25 9:22:45

大家好,我是微学AI,今天给大家介绍一下自然语言处理实战10-文本处理过程与输入bert模型后的变化,通过一段文本看看他的整个变化过程,经过怎样得变化才能输入到模型,输入到模型后文本又经过怎样的计算得到最后的结果。看完这篇文章大家对文本数据处理过程就会有非常深刻的理解了。

一、文本在输入BERT模型之前,需要进行以下处理:

  1. 分词:将文本数据划分成一个个词语,这可以使用通用的分词器,例如NLTK,Stanford CoreNLP等。

  2. 添加特殊标记:为了让BERT模型能够理解输入文本的含义,需要添加一些特殊标记,例如[CLS]表示序列的开始,[SEP]表示文本序列的结束。

  3. 限制序列长度:由于BERT模型的输入序列长度是固定的,因此需要对文本序列进行截断或填充操作,以确保其长度符合模型要求。

  4. 生成输入向量:将上述处理后的文本序列转换成对应的数字向量,这可以使用BERT提供的预训练模型中的tokenizer完成。

在进行BERT模型的文本数据输入之前,还需要注意以下细节:

  1. 对于不同的任务,输入数据预处理的方法可能会有所不同。例如,对于句子分类任务,需要将每个句子映射到一个固定长度的向量,而对于问答任务,则需要将问题和回答合并成一个字符串后再进行分词和其他预处理操作。

  2. 在进行文本序列截断或填充时,需要根据具体任务要求进行调整,以获得最好的处理效果。

  3. BERT模型的输入格式可能会随着版本升级而发生变化,因此需要根据使用的模型版本进行相应调整。

二、数据案例:

  1. “我今天很开心。这是一个美好的早上。”
  2. “这家餐馆的菜很好吃,服务也很好。”
  3. “明天又是新的一天,我要加油努力工作!”

对于这些数据,我们进行BERT模型输入之前的处理过程如下:

  1. 分词:我们使用jieba分词库进行中文分词,将每一个句子划分成一个个词语。
"我今天很开心。这是一个美好的早上。" -> ["我", "今天", "很", "开心", "。", "这是", "一个", "美好", "的", "早上", "。"]
"这家餐馆的菜很好吃,服务也很好。" -> ["这家", "餐馆", "的", "菜", "很", "好吃", ",", "服务", "也", "很", "好", "。"]
"明天又是新的一天,我要加油努力工作!" -> ["明天", "又", "是", "新", "的", "一天", ",", "我", "要", "加油", "努力", "工作", "!"]
  1. 添加特殊标记:在分词后,我们需要为每个段落添加特殊标记,即开头和结尾的标记。
"我今天很开心。这是一个美好的早上。" -> ["[CLS]", "我", "今天", "很", "开心", "。", "这是", "一个", "美好", "的", "早上", "。", "[SEP]"]
"这家餐馆的菜很好吃,服务也很好。" -> ["[CLS]", "这家", "餐馆", "的", "菜", "很", "好吃", ",", "服务", "也", "很", "好", "。", "[SEP]"]
"明天又是新的一天,我要加油努力工作!" -> ["[CLS]", "明天", "又", "是", "新", "的", "一天", ",", "我", "要", "加油", "努力", "工作", "!", "[SEP]"]
  1. 限制序列长度:将每个段落中的序列长度限制为512以内的固定长度。

  2. 生成输入向量:最后,我们使用BERT模型中提供的tokenizer将文本序列转换成对应的数字向量。例如:

"我今天很开心。这是一个美好的早上。" -> [101, 2769, 791, 2523, 2458, 511, 6821, 702, 1920, 4638, 8024, 511, 102]
"这家餐馆的菜很好吃,服务也很好。" -> [101, 6821, 2157, 7646, 8013, 2523, 1962, 3221, 8024, 4692, 738, 2523, 1962, 511, 102]
"明天又是新的一天,我要加油努力工作!" -> [101, 3193, 738, 3221, 1765, 4638, 702, 2769, 1962, 2140, 7378, 3416, 3305, 8013, 511, 102]

最终输入到BERT模型的数据就是上面这些数字向量,其中101和102分别表示[CLS]和[SEP]这两个特殊标记,数字向量的长度为固定的512。

三、数字向量计算变化

数字向量是BERT模型输入的格式,经过模型的计算后会得到相应的词向量表示。在BERT中,输入数据首先通过输入嵌入矩阵进行嵌入,在输入嵌入矩阵内对每个词语进行可训练的嵌入,得到词向量表示。因此,在BERT模型的计算过程中,数字向量会被转化为对应的词向量表示,以便进行下一步的计算。(需要注意的是,这里的“词向量”指的是包含嵌入在内的表示,与Word2Vec等传统词向量不同)。

为了更好地理解BERT模型中的词向量,我们可以通过一个简单的样例来看一下。假设有两个句子:

  • “我爱吃火锅”
  • “火锅是我最爱的食物”

通过预处理后,这两个句子的数字向量分别为:

  • [101, 2769, 4263, 1408, 6638, 102]
  • [101, 6638, 4263, 3221, 2769, 1920, 4263, 3696, 4638, 5543, 102]

其中,101和102分别代表[CLS]和[SEP]这两个特殊标记。在经过BERT模型的计算后,我们可以得到这两个句子的词向量表示:

  • [0.125, 0.241, …, -0.189]
  • [0.168, 0.025, …, -0.122]

这里的词向量表示是一个768维的向量,其中每个元素代表了一个特定维度上的值。例如,第一个句子中的第一个元素0.125代表了“我”这个词在第一个维度上的权重值。

需要注意的是,在BERT模型中,对于每个句子/段落,只会生成一个统一的词向量表示。因此,在实际应用中,需要对不同长度的句子进行填充或截断,以满足输入固定长度的要求。

在这里插入图片描述

四、模型微调与训练过程

BERT模型的训练过程主要是通过Transformer编码器来实现的。下面简单介绍一下BERT模型中的训练过程以及对上述句子的处理。

  1. 预训练任务

在BERT模型中,使用了两个预训练任务:Masked Language Model (MLM)和Next Sentence Prediction (NSP)。其中,MLM任务用于学习每个词在上下文中的表示,NSP任务则用于学习句子级别的表示。

针对上面的两个句子,BERT模型中训练数据会进行如下处理:

  • MLM任务:首先,对每个句子进行随机掩码操作,在一定比例上将输入序列中的一些词随机替换成[MASK]标记或原始词。然后,模型学习预测原始词。
  • NSP任务:将两个句子随机组合为一对新句子,同时给定标签表明它们是否真正是相邻的句子。模型学习预测是否真正相邻。
  • 在这里插入图片描述
  1. Fine-tuning

在预训练完成后,可以根据具体的任务对BERT模型进行微调。在Fine-tuning过程,需要将对应任务的数据输入到bert中,经过模型的计算后,得到任务相关的输出结果。最后根据任务要求,从输出结果中提取所需信息并进行相应的处理。

以下是对上述句子进行Fine-tuning的示例代码(以分类任务为例):

import torch
from transformers import BertTokenizer, BertForSequenceClassification

tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForSequenceClassification.from_pretrained('bert-base-chinese')

# 对输入文本进行预处理:分词,添加特殊标记,转化为数字向量
text = "我爱吃火锅"
inputs = tokenizer(text, return_tensors='pt')
# 将数字向量输入到模型中进行计算
outputs = model(**inputs)
# 从输出结果中提取所需信息(例如分类结果)
print(outputs[:2])

我们需要注意的是,Fine-tuning的过程中,模型的参数会根据具体任务的要求而有所调整。因此,通过Fine-tuning,BERT能够适应不同的自然语言处理任务,如文本分类等。

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

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

相关文章

逆向工程的未来在哪里?掌握逆向技能,开创新的职业道路!

前言 随着移动互联网的兴起,“APP”成了99%的互联网企业主要运营的产品,知名的例如“支付宝”、“美团”、“滴滴”、“抖音”等。用户基数的不断变大,安全性也经历着巨大的挑战。 app越来越多,也离不开我们的生活,而…

团队管理之性能实施团队日志10

在这一周中基本上遇到了性能实施过程中应该遇得到的复杂的问题。 像堆外内存引发OOM Killer,C coredump,负载该均衡不均衡,主机资源不够用,数据引发TPS抖动,IO引发TPS抖动之类的。 在这个项目中几乎碰到了我之前遇到…

2023Fiddler抓包学习笔记 -- 环境配置及工具栏介绍

一、Fiddler介绍 Fiddler是位于客户端和服务器端的HTTP代理,常用来抓http数据包,可以监控浏览器所有的http和https流量,查看分析请求数据包和响应数据包,伪造请求和响应等功能。 二、下载安装 1、下载地址 https://www.teleri…

企业——缺省路由

缺省路由是目的地址和掩码全为0的特殊路由 如果报文的目的地址无法匹配路由表中的任何一项,路由器将选择依照缺省路由来转发报文。 ip route-static 0.0.0.0 0.0.0.0 实验要求: 1、按照图中的要求配置IP 2、要求使用静态协议缺省实现访问2.0、3.0、…

linux时间同步,ntpd、ntpdate

linux时间同步,ntpd、ntpdate 一.Linux系统时间的设置二.Linux硬件时间的设置三.系统时间和硬件时间的同步四.不同机器之间的时间同步(重点)五.ntpd服务的设置六.ntp服务的启动与观察七.具体实践:7.1 NTP的配置7.1.1 配置/etc/ntp.conf7.1.2配置/etc/ntp…

VHDL语法

VHDL完整的、可综合的程序结构,必须包含实体和结构体两个最基本的语言结构。 具体取名由设计者自定,由于实体名实际上表达的是该设计电路的器件名,所以最好根据相应电路的功能来确定, 标识符命名规则: (1)标识符主要由字母、数字…

2023年中职组“网络安全”赛项南昌市竞赛任务书

2023年中职组“网络安全”赛项 南昌市竞赛任务书 网络空间安全赛项规程 一、赛项名称 赛项名称:网络空间安全 赛项组别:中职组 二、竞赛目的 通过竞赛,检验参赛选手对网络、服务器系统等网络空间中各个信息系统的安全防护能力&#xff0…

重用Playbook

文章目录 重用Playbookinclude语句如何写role默认变量和普通变量的区别tasks/main.yaml 如何使用变量、静态文件和模板使用x/*/main.yaml中的变量使用x/*/other_but_main.yaml中的资源 role的依赖 重用Playbook Ansible支持的两种重用机制是Roles和Includes。 Roles是一种可重…

【RuoYi-Cloud-Plus】学习笔记 06 - Sentinel(一)关于 StatisticSlot 以及 LeapArray

文章目录 前言参考目录学习笔记1、Sentinel 简介2、Sentinel 架构图3、Sentinel 源码学习3.1、包结构3.2、 LeapArray (滑动窗口算法的实现)3.3、StatisticSlot3.3.1、StatisticSlot#entry3.3.2、StatisticSlot#exit3.4、StatisticNode、StatisticSlot、…

Linux——基础网络设置

个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。座右铭:海不辞水,故能成其大;山不辞石,故能成其高。 个人主页:小李会科技的…

几个事件的问题

1.PC端的click是点击事件,移动端的lick会存在300ms延迟 移动端的click是单击事件,单击事件:第一次点击后,监测300ms, 看是否有第二次点击操作,如果有就是单击,如果有就是双击。 如何解决: 单手指事件模型…

Linux 操作系统原理 — tc 流量控制技术解析

目录 文章目录 目录Traffic ControlTraffic Control 的基本实现原理流量处理的三个层面流量处理的关键流程流量队列的类型FIFO 队列PFIFO_FAST 队列SFQ 队列令牌桶队列 Kernel Traffic Control 的工作原理Qdisc(队列描述)Class(分类&#xff…

电子元器件解析之电容(二)——电容分类与应用场景

书接上文:电子元器件解析之电容(一)——定义与性能参数:https://blog.csdn.net/weixin_42837669/article/details/131142286 摘要 本文总结了各种不同介质电容的特性,包括陶瓷电容、电解电容、薄膜电容等;同时对一些特殊场合的电容…

Transformer Block运算量

参考:Swin Transformer论文精读【论文精读】_哔哩哔哩_bilibili 在看朱毅老师讲解Swin Transformer论文时,里面有一个Transformer Block的计算复杂度的推导计算,感觉清晰明了,这里做一下记录,先说一下结果,…

Android:Handler

参考来源 参考来源 参考来源 参考来源 Handler机制(面试版) Binder/Socket用于进程间通信,而Handler消息机制用于同进程的线程间通信 handler机制是android系统运行的基础,它采用生产者,消费者模式进行设计。其中生产…

基于SSM的青少年编程学习系统设计与实现

摘 要:在智能技术飞速发展的今天,各国都努力争取在人工智能时代的发展中占据优势,青 少年编程教育就显得格外重要。不过,相比一些青少年编程教育发展更先进的国家,我国青少 年编程教育仍处在初级阶段,很多青…

服务器(裸机)如何安装Centos 7系统

1. 下载系统镜像(可以选择自己对应的版本) http://mirrors.aliyun.com/centos/7/isos/x86_64/2. 制作linux系统U盘 下载UltraISO制作工具并安装 再准备一个空U盘(注意:这个操作会将U盘内数据全部删除操作之前请将U盘内文件备份&…

Swift学习笔记(一)基础语法

文章目录 前言开发工具变量与常量变量和常量的定义和使用变量和常量的命名规范注释初识基本数据类型浮点型数据布尔型数据两种特殊的基本数据类型元组可选值类型 为类型取别名模拟面试 字符、字符串与集合类型字符串类型字符串的组合字符类型转义字符 字符串类型中的常用方法集…

Redis的大key

什么是 redis 的大 key redis 的大 key 不是指存储在 redis 中的某个 key 的大小超过一定的阈值,而是该 key 所对应的 value 过大对于 string 类型来说,一般情况下超过 10KB 则认为是大 key;对于set、zset、hash 等类型来说,一般…

K8s in Action 阅读笔记——【13】Securing cluster nodes and the network

K8s in Action 阅读笔记——【13】Securing cluster nodes and the network 13.1 Using the host node’s namespaces in a pod Pod中的容器通常在不同的Linux名称空间下运行,这使得它们的进程与其他容器或节点默认名称空间下运行的进程隔离开来。 例如&#xff…