导图社区 NLP自然语言处理
【NLP入门指南】从文本处理到预训练模型实战,10天掌握自然语言处理核心技能! 内容涵盖:文本预处理、词向量训练(FastText)、RNN/LSTM/GRU时序模型,以及Transformer架构详解对比BERT(双向编码器)与GPT(单向解码器)的差异,实践微调与迁移学习技巧附带多标签分类、注意力机制等实战案例,助你快速构建NLP项目。
编辑于2025-12-21 09:42:23"探索机器学习的核心算法与应用场景!本文涵盖聚类、贝叶斯、集成学习等经典算法,从理论到实践全面解析你将了解:Kmeans无监督聚类的流程与评价指标,朴素贝叶斯的概率分类原理,Bagging与Boosting的集成差异,决策树三种算法(ID3/C4.5/CART)对比,逻辑回归解决二分类问题的评估方法,线性回归的梯度下降与正规方程求解,以及KNN算法的特征预处理与网格搜索技巧适合想系统掌握机器学习基础算法的学习者"。
【NLP入门指南】从文本处理到预训练模型实战,10天掌握自然语言处理核心技能! 内容涵盖:文本预处理、词向量训练(FastText)、RNN/LSTM/GRU时序模型,以及Transformer架构详解对比BERT(双向编码器)与GPT(单向解码器)的差异,实践微调与迁移学习技巧附带多标签分类、注意力机制等实战案例,助你快速构建NLP项目。
"揭秘互联网公司高效运转的核心密码!本文系统解析互联网公司的组织架构与工作流程,涵盖技术团队协作全场景:从典型架构类型(职能型/项目型/矩阵型)到核心部门协同,完整呈现需求分析、开发测试、发布运维的项目全生命周期重点拆解三大开发方法论(瀑布模型/敏捷开发/DevOps),详解工程师双轨发展路径(技术线从初级到架构师,管理线从TL到技术总监)更附实用工具链指南:代码管理(GitHub/GitLab)、CI/CD(Jenkins/GitLab CI)、监控(Prometheus/Grafana)、协作(JIRA/Confluence/飞书),助你掌握互联网企业高效协作的底层逻辑。"
社区模板帮助中心,点此进入>>
"探索机器学习的核心算法与应用场景!本文涵盖聚类、贝叶斯、集成学习等经典算法,从理论到实践全面解析你将了解:Kmeans无监督聚类的流程与评价指标,朴素贝叶斯的概率分类原理,Bagging与Boosting的集成差异,决策树三种算法(ID3/C4.5/CART)对比,逻辑回归解决二分类问题的评估方法,线性回归的梯度下降与正规方程求解,以及KNN算法的特征预处理与网格搜索技巧适合想系统掌握机器学习基础算法的学习者"。
【NLP入门指南】从文本处理到预训练模型实战,10天掌握自然语言处理核心技能! 内容涵盖:文本预处理、词向量训练(FastText)、RNN/LSTM/GRU时序模型,以及Transformer架构详解对比BERT(双向编码器)与GPT(单向解码器)的差异,实践微调与迁移学习技巧附带多标签分类、注意力机制等实战案例,助你快速构建NLP项目。
"揭秘互联网公司高效运转的核心密码!本文系统解析互联网公司的组织架构与工作流程,涵盖技术团队协作全场景:从典型架构类型(职能型/项目型/矩阵型)到核心部门协同,完整呈现需求分析、开发测试、发布运维的项目全生命周期重点拆解三大开发方法论(瀑布模型/敏捷开发/DevOps),详解工程师双轨发展路径(技术线从初级到架构师,管理线从TL到技术总监)更附实用工具链指南:代码管理(GitHub/GitLab)、CI/CD(Jenkins/GitLab CI)、监控(Prometheus/Grafana)、协作(JIRA/Confluence/飞书),助你掌握互联网企业高效协作的底层逻辑。"
NLP自然语言处理
自然语言处理
是计算机科学与语言学中关注于计算机与人类语言间转换的领域
文本预处理
文本处理的基本方法
分词
将连续的字序列按照一定的规范重新组合成词序列的过程
jieba特性
支持多种分词模式
精确模式
全模式
搜索引擎模式
支持中文繁体分词
支持用户自定义词典
命名实体识别
通常我们将人名,地名,机构名等专有专有名词统称命名实体
Named Enitity Recognition 简称NER
就是识别出一段文本中可能存在的命名实体
命名实体7小类:
人名 地名 机构名 时间 日期 货币 百分比
作用
命名实体也是人类理解文本的基础单元,因此也是AI解决NLP领域高阶任务的重要基础环节
词性标注
词性
语言中对词的一种分类方法,以语法特征为主要依赖,兼顾词汇意义对词进行划分的结果
Par-Of-Speech tagging 简称POS
就是标注出一段文本中每个词汇的词性
作用
词性标注以分词为基础, 是对文本语言的另一个角度的理解, 因此也常常成为AI解决NLP领域高阶任务的重要基础环节.
API
jieba.lcut
jieba.cut
返回对象地址
jieba.lcut(cut_all = True)
全模式,默认为False
jieba.lcut_for_search
搜索引擎模式
jieba.load_userdict()
pseg.lcut()
文本张量表示方法
将一段文本使用张量进行表示,其中一般将词汇表示成向量,称作词向量,再由各个词向量按顺序组成矩阵形成文本表示
方法
one-hot编码
使用热编码的方式来表示词向量
特点
简单,方便理解
割裂了词与词之间的联系
如果词表过大,则容易造成内存溢出
Word2vec
概述
一种无监督的词向量的训练方式,使用深度学习模式的网络参数来表示词向量
训练模式
CBOW
通过上下文预测中间词
Skipgram
通过中间词预测上下文
实现
fasttext
概述
一个快速进行文本分类的工具
作用
文本分类
词向量表示
API
fasttext.train_unsupervised()
model.save_model()
fasttext.load_model()
model.get_word_vector()
model.get_nearest_neighbors()
获取邻近词
Word Embedding
概述
通过一定的方式将词汇(token)映射到指定维度(一般是更高维度)的空间
广义
任何把token映射到固定大小的稠密的向量空间
狭义
就是神经网络的一层:词嵌入层
API
nn.Embadding(词表大小, 词向量维度)
word2vec 和 word Embadding
静态词向量 动态词向量
RNN及其变体
概念
RNN(Recurrent Neural Network) , 循环神经网络, 它一般以序列数据为输入,通过网络内部的结构设计有效捕捉序列之间的关系特征,一般也是以序列形式进行输出
分类
从两个角度来做的分类
第一个角度是输入输出的结构
N vs N
如:诗句
N vs 1
如:做分类
1 vs N
如:图生成文字
N vs M
如:翻译
第二个角度是RNN的内部构造
传统RNN
LSTM
Bi-LSTM
GRU
Bi-GRU
RNN
内部结构
如何使用
nn.RNN(input_size, hidden_size, num_layers)
input = torch.randn(seq_len, batch_size, input_size)
h0 = torch.zeros(num_layers, batc_size, hidden_size)
深层理解
省略h0
默认全0 初始化
一次性送入批次的所有样本,和单次单样本,结果一样
batch_first
batch_size前置
input会有变化, h0不变
优缺点
结构简单,计算量小
处理长文本时会出现梯度消失或者梯度爆炸
串行,不能并行,效率低
LSTM
概述
长短时记忆结构,Long Short-Term Memory
内部结构
如何使用
nn.LSTM(input_size, hidden_size, num_layers)
input = torch.randn(seq_len, batch_size, input_size)
h0 = torch.zeros(num_layers, batc_size, hidden_size)
c0 = torch.zeros(num_layers, batc_size, hidden_size)
优缺点
缓解RNN中的梯度消失或者梯度爆炸的现象
相比RNN来说能够处理长文本序列
内部结构复杂,计算量大,效率低
内部结构是串行
GRU
概述
门控循环单元, Gated Recurrent Unit
内部结构
如何使用
nn.RNN(input_size, hidden_size, num_layers)
input = torch.randn(seq_len, batch_size, input_size)
h0 = torch.zeros(num_layers, batc_size, hidden_size)
优缺点
缓解RNN中的梯度消失或者梯度爆炸的现象
相比LSTM来说,内部结构简单,也能够处理长文本序列
没办法根治梯度消失或者梯度爆炸的现象
内部结构是串行
双向模型
定义模型时bidirectional=True
隐藏层的形状的第一个参数num_layers 2倍
人名分类器
需求
基于人名,预测国家
数据
第一列
人名
第二列
国家
数据总共20074条,国家18个类别
中间使用\t(制表符)分割
流程
数据预处理
读取数据
转化为dataset
继承Dataset类
实现__init__, __len__, __getitem__三个方法
转化为dataloader
模型构建
继承nn.Model类
实现__init__, forward方法
模型训练
加载数据
转化为Dataset
转化为Dataloader
初始化模型
损失函数
优化器
轮次
遍历
外层遍历轮次
内层遍历dataloader
前向传播
损失计算
梯度清零
反向传播
梯度更新
模型保存
模型预测
加载数据
对人名进行数值化+张量化表示
加载模型
加载权重参数
预测
with torch.no_grad()
不需要梯度更新,用于预测和推理阶段
前向传播
TOP3
topv, topi = torch.topk(数据, k=前几名)
注意力机制
注意力机制介绍
概述
把[注意力]放在[事物最具有辨识度]的地方
特点
并行
没有位置信息
能够处理长序列问题
作用
能解决长文本中梯度消失或者爆炸的问题
能够解决串行的问题
注意力
Q
query,查询张量,想要查询什么,什么就是Q
K
key, 键张量, 就是索引,下标, 标签等
V
value, 值张量, 就是内容
分类
一般注意力
Q != K != V 或者 Q = K != V
三者不完全相等
自注意力
Q = K = V相等, 或者 QKV来自同一个输入
规则
softmax(linear([Q, K])) · V
第一步: Q, K拼接后,经过线性层,再经过softmax,再和V相乘
第二步: 把上一步的结果和Q拼接
第三步: 再经过线性层,转换成想要的维度
seq2seq架构中的注意力
概述
seq2seq架构,是一个经典的句子对句子架构,一般输入是一句话,输出也是一句话,一般应用在翻译等场景中
组成
编码器
解码器
中间语义张量C
注意力如何应用
Q: 就是要查询的token, 如果刚开始,那就是特殊token, Go
一句话总结,查询什么,输入的数据就是该查询张量Q
K: 上一个时间步的隐藏层输出,如果是第一个,那就是编码器的最后一个hidden
V:就是C,就是编码器的所有输出结果
案例
seq2seq_英译法案例
seq2seq架构
概述
序列到序列
组成
编码器
解码器
中间语义张量C
架构图
需求&数据说明
需求
把英文翻译为法文
数据
一共是2列
第一列:英文
第二列:法文
中间使用\t分开
步骤
数据预处理
模型构建
模型训练
模型预测
1.数据处理
数据读取并按行分割,存成一个列表,每行再按制表符分割,形成句子对
建立词表, 英文词表和法文词表
词表有word2index和index2word 两个字典,还有词表长度
定义数据集
传入句子对列表
重写__init__, __len__, __getitem__方法
数值化:将句子划分成单词,将每个单词转化为词表中的索引
张量化:将数值化的数据,转化成张量
返回张量化后的x,y
转化成数据加载器
2.模型构建
2.1 定义编码器encoder
图解
词嵌入层
GRU层
前向传播
2.2 定义解码器decoder_不带注意力
图解
2.3 定义解码器decoder_带注意力
图解
__init__方法
词嵌入层
dropout层
attn第一个线性层
attn_combine第二个线性层
GRU层
输出线性层
Logsoftmax层
forward方法
参考图解
3. 模型训练
加载数据转化为Dataloader
实例化编码器和解码器模型
创建编码器和解码器的优化器
创建损失函数
轮次
批次
学习率
其他参数
遍历
外层
遍历轮次
内层
遍历批次
构建一个专门用于训练的方法, 输入 数据+模型+优化器+损失函数+ teacher_forcing, 输出 平均损失
让数据先经过编码器
准备解码器输入
Q
特殊token
K
编码器的隐藏层输出
V
利用编码器的输出,构建中间语义张量
teacher_forcing策略
走
把正确值给到编码器的输入
不走
把预测值给到编码器的输入
记录损失
打印日志
记录画图数据
保存画图参数
保存模型
2个模型都要保存
teacher_forcing
概念
是一种模型训练策略,可以让模型快速的收敛
可以矫正模型的预测结果,避免模型的误差进一步扩大
4.模型预测
加载模型
2个模型
加载参数
准备数据
把数据送给模型进行预测
单独构建一个预测计算的方法
注意,如果预测到结束符,可以提前结束,最长预测长度是10
返回解码后的词列表和注意力权重数据
绘制注意力权重分布图
Transformer
Transformer
简介
2017年下半年由Google公司发布了一篇论文:<<Attention Is All You Need>>
2018年
优势
能并行处理,解决长文本中梯度消失或爆炸的现象
能处理长文本序列,不会因为文本过长而出现遗忘之前的内容
架构
输入部分
Word Embedding
Positional Encoding
编码器部分
由多个编码器层组成
1个编码器层由2个子层连接结构组成
第一个子层连接结构由多头自注意力+规范化层+残差连接组成
第二个子层连接结构由前馈全连接层+ 规范化层 + 残差连接组成
解码器部分
由多个解码器层组成
1个解码器层由3个子层连接结构组成
第一个子层连接结构由带掩码的多头自注意力+规范化层+残差连接组成
第二个子层连接结构由一般注意力+规范化层+残差连接组成
第三个子层连接结构由前馈全连接层+ 规范化层 + 残差连接组成
输出部分
线性层+softmax
输入部分
Word Embedding
细节
注意词表大小和每个词的下标索引
实现
只有一个Embedding层
forward函数输出时,要 乘以 sqrt(d_model)
为了使数据符合标准正态分布
Positional Encoding
为什么有位置编码器层
因为Transformer的自注意力中没有位置信息
怎么做的位置编码
通过三角函数
奇数列
sin
偶数列
cos
_2i = torch.arange(0, d_model, 2).float() pe[:, 0::2] = torch.sin(position/(10000 ** (_2i / d_model))) pe[:, 1::2] = torch.cos(position/(10000 ** (_2i / d_model)))
_2i = torch.arange(0, d_model, 2).float() pe[:, 0::2] = torch.sin(position/(10000 ** (_2i / d_model))) pe[:, 1::2] = torch.cos(position/(10000 ** (_2i / d_model)))
为什么选择选择三角函数
三角函数是周期性函数,不会随着样本的增加而出现梯度消失或者爆炸的现象
三角函数值域在[-1, 1]之间,不会出现太大或者太小的波动
具体实现
创建一个位置矩阵
计算位置信息
将位置信息加到x上,再经过dropout层输出
编码器部分
掩码张量
它就是个张量
它的值一般就是0或者1
它作用在另外一个张量上,为了解码时,掩盖数据的未来信息
具体实现
编码器掩码的目的
为了句子等长,我们会填充一些信息,使用掩码把填充信息掩盖掉
解码器掩码的目的
为了掩盖未来信息
自注意力
公式
softmax((Q · K^T) / sqrt(d_k)) · V
问题一
为什么要乘以K的转置
因为不转置无法相乘
问题二
为什么要除以根号下d_k
把数据的方差重新拉回到标准正态分布(0-1)之间
如果不除以根号下d_k
协方差偏移问题
softmax函数如果输入的数据方差太大,则结果就是one_hot编码
掩码张量的应用
掩码矩阵可以掩盖未来信息被使用
实现
根据公式计算,在softmax之前执行掩码操作,对权重执行dropout操作,最后乘上v
这里的dropout是dropout层对象
多头自注意力
多头
对我们数据的最后一个维度做拆分,让每个头只负责注意其中的一部分维度
作用
单个注意力可能提取的不充分,让模型更充分的提取体征,模型效果越好
数据形状变化
代码实现
1.定义一个clones函数,用于克隆多个相同的模型
传入参数:
model
N
返回
nn.ModuleList
2.定义一个MultiHeadAttention类
init
参数
head, d_model, dropout_p
实现
断言判断d_model能否被head整除
定义属性 head, d_k, attn
4个线性层 + 1个dropout层
forward
传入参数
query, key, value, mask
实现
QKV通过拉链函数遍历传给线性层, 出来后的结果,进行多头分割,和维度交换
将QKV 和 mask 和 dropout层 传入attention注意力函数,计算注意力结果和权重
将注意力结果交换维度,再拼接起来
将最终结果送到最后一个线性层,最后返回
最终输出和输入维度一样
实现概述
先对数据复制3份,传入3个线性层,然后变形成多头形状,传入自注意力函数,最后拼接变回原来的形状,再经过最后一个线性层
前馈全连接层
概述
就是两个线性层
作用
更充分提取特征
实现
1.定义FeedForward类
init
参数
d_model, d_ff, dropout_p
实现
2个线性层 + 1个dropout层
forward
参数
x
实现
数据先经过第一个线性层, 再经过relu函数, 再经过dropout层, 最后经过第二个线性层
实现概述
2个线性层,先经过第一个线性层,再经过relu函数, 再经过dropout层, 最后经过第二个线性层
规范化层
概述
对数据进行规范化(标准化)
作用
让数据进入模型前后都属于同分布
公式
(x - mean) / std
实现
定义LayerNorm类
init
参数
features = d_model, eps=1e-6
实现
定义2个参数层nnParameter层, 一个是全1作为k,一个全0作为b
后续模型计算时可以自动更新
forward
参数
x
实现
先计算mean 和 std
进行标准化计算
将标准化结果作为x, 返回kx + b
实现概述
构建一个kx + b的线性关系, x按标准化公式计算
子层连接结构
无论是编码器还是解码器,都是由子层连接结构组成
编码器
2个子层连接结构
多头自注意力+规范化+残差连接
解码器
3个子层连接结构
构建子层连接结构,使用上述的规范化+ (外部传入的多头自注意力 或者 前馈全连接)
残差
x的加法计算
实现
定义SubLayerConnection类
init
参数
size = features=d_model, dropout_p=0.1
实现
使用size参数创建一个规范化层对象
创建一个dropout层
forward
参数
x, sublayer
实现
方法1: x 先经过nrom层,再经过子层, 再经过dropout层,再进行残差连接
方法2: x 先经过子层,再经过norm层, 再经过dropout层,再进行残差连接
实现概述
数据经过子层和规范化层(两者顺序可换)之后,经过dropout层,再和原本数据相加
编码器层
由2个子层组成
实现
定义EncodingLayer类
init
参数
size, attn, ff, dropout_p
实现
定义属性attn, ff, size
使用克隆函数 创建2个 子层连接结构对象(size, dropout_p)
forward
参数
x, mask
实现
将x传入,第一个子层连接结构,同时传入attn层
因为attn传入多个参数,所以需要使用lambda函数
再将上面的结果传入第二个子层连接结构,同时传入ff层
实现概述
克隆两个子层连接结构,将数据和子层对象传进去
编码器
由6个编码器层组成
实现
定义Encoder类
init
参数
layer, N
实现
使用克隆函数,创建N(=6)个编码器层
创建一个norm层
forward
参数
x,mask
实现
遍历6个编码器层,将x,mask传入进行计算
最终结果传入norm层,进行输出
这里主要和norm层顺序有关,如果是前置norm,需要最后再过一层norm,如果是后置norm,则需要再前面先过一层norm, 确保头尾都有norm层
实现概述
克隆6个编码器层,依次经过6个编码器,确保数据头尾都有规范化层
解码器部分
概述
由6个解码器层组成
每个加码器层由3个子层连接结构组成
带掩码的多头自注意力
一般注意力
前馈全连接层
解码器层
实现
定义DecoderLayer类
init方法
传入参数
size
self_attn
src_attn
ff
dropout_p
实现
保存属性
克隆3个子层连接结构
forward
传入参数
实现
将数据依次经过3个子层
一句话概述
传入多头注意力对象和前馈全连接对象, 将输入和编码器输出以及2个掩码,依次通过3个子层
解码器
实现
定义Decoder类
init方法
传入参数
layer
N
实现
克隆6个解码器层
定义一个规范化层
forward方法
传入参数
x解码器输入
m编码器输出
2个掩码
实现
循环通过6个编码器层
一句话概述
克隆6个解码器层,将数据依次通过,最后经过一个规范化层
输出部分
概述
Linear + softmax
实现
定义Generator类
init方法
创建一个线性层
forward
将数据经过线性层,在经过softmax
一句话概述
定义一个线性层,将数据经过线性层,再经过softmax
模型构建
init方法
输入参数
encoder, decoder, source_embed, target_embed, generator
forward方法
输入参数
source
target
source_mask1
编码器中的掩码
source_mask2
解码器中的源数据掩码
target_mask
解码器中的自注意力掩码
一句话概述
实例化编码器对象,解码器对象,源词嵌入对象, 目标词嵌入对象, 输出对象, 将数据和掩码,按规定依次经过各个部件
FastTexT
概述
NLP领域用来做文本分类和词向量训练的工具
功能
文本分类
训练词向量
特点
只能在cpu上运行
引入层次softmax,计算更快
引入n_gram特征,能更好地提取文本特征
安装
pip install fasttext-wheel
win平台
使用
导入
训练模型
fasttext.train_supervised()有监督
预测
model.predict()
评估
model.test()
保存
model.save_model()
加载
fasttext.load_model()
调优
调优思路
数据决定模型的上限
算法和模型只能无限接近上限
数据层面
模型层面
轮次
学习率
n_gram
损失函数
超参数自动调优
多标签多分类
将损失函数换成ova(one vs all)
预测时,指定k参数,可以为-1, 同时设定阈值threshold
训练词向量
fasttext.train_unsupervised()
迁移学习
预训练模型去哪里找
Huggingface
可以迁移词向量模型
也可以迁移别人训练好的模型
预训练模型
词向量迁移
概述
使用在大型语料库上已经进行训练完成的词向量模型
fasttext工具中可以提供的可迁移的词向量
fasttext提供了157种语言的在CommonCrawl和Wikipedia语料上进行训练的可迁移词向量模型, 它们采用CBOW模式进行训练, 词向量维度为300维. 可通过该地址查看具体语言词向量模型: https://fasttext.cc/docs/en/crawl-vectors.html
fasttext提供了294种语言的在Wikipedia语料上进行训练的可迁移词向量模型, 它们采用skipgram模式进行训练, 词向量维度同样是300维. 可通过该地址查看具体语言词向量模型: https://fasttext.cc/docs/en/pretrained-vectors.html
使用方式
第一步: 下载词向量模型压缩的bin.gz文件
第二步: 解压bin.gz文件到bin文件
第三步: 加载bin文件获取词向量
model = fasttext.load_model("cc.zh.300.bin")
model.words[:100]
查看前100个词汇
model.get_word_vector("音乐")
使用模型获得'音乐'这个名词的词向量
第四步: 利用邻近词进行效果检验
预训练模型
概述
提前训练好的模型
用法
开箱即用
pipeline方式
管道方式
AutoModel方式
自动模型
SpecificModel方式
指定模型
微调
分类
带头输出
文本分类(sequenceClassification)
完形填空(MaskdeLM)
阅读理解(QuestionAnswering)
文本概述(Seq2SeqLM)
NER任务(命名实体识别)(TokenClassification)
不带头输出
特征提取(提取数据特征,下游需要接线性层,做多分类)
用于微调
案例
pipeline
定义task, 导入模型即可使用
AutoModel
文本分类
创建分词器对象
创建模型
将文本传入分词器编码
将分词器的输出传给模型
特征提取
基本同上
完形填空
模型返回的结果,需要取mask位置的概率值,算argmax,通过分词器解码成文字
阅读理解
需要遍历问题,将问题和文本传给分词器编码,再传给模型
根据模型的输出得出起始索引和结束索引,然后解码出文字
文本概述
数据传入模型的时候,需要调用模型的generate方法
然后使用分词器的decode方法,解码输出值
tokenizer.decode参数
skip_special_tokens
跳过特殊token
clean_up_tokenization_spaces
清除分词空白
NER命名实体识别任务
数据传入模型后,模型输出的是对每个token的分类概率
将token和概率通过zip打包,并遍历.
概率值取最大的索引下标,使用模型的config文件中的id2label字典找出对应的类别
指定模型方式
除了调用的类名和自动模型不一样,其他完全一样
分词器对象方法
encode
返回一个列表
encode_plus
返回一个字典
都有的参数
max_length
最大长度
padding
是否填充,填充规则
truncation
是否截断
return_tensors
'pt'返回张量
微调
概述
使用预训练模型进行特征提取,下游进行线性层自定义输出
中文分类
任务介绍
对中文句子进行分类,好评和差评
步骤
数据预处理
datasets数据集工具
文本分类中,文本有x和y,Dataloader类有collate_fn参数,可以传入函数,进行批次数据的二次处理
my_dataset = load_dataset()
模型构建
定义下游线性层即可
先让数据经过预训练模型,得到特征,然后把特征数据送到下游,得到结果
模型训练
加载数据
加载模型
损失函数
优化器
冻结预训练模型参数
外层遍历
内层遍历
老样子
模型预测
正常预测即可
完形填空
步骤
数据预处理
自己构建x和y
构建x
过滤掉长度小于32的句子,将句子截取到32长度,将中间位置替换成[MASK]的编码
构建y
将句子的中间位置的token取出,当做y
模型构建
同上
模型训练
同上
模型预测
同上
NSP句子关系
BERT系列模型
BERT模型介绍
简介
是2018年10月由Google AI研究院提出的一种预训练模型
架构
Embedding模块
token Embedding
segment Embedding
position Embedding
双向transformer架构
预微调模块
NSP
MLM
NER任务
内置的预训练任务
任务一:Masked LM
遮蔽型语言建模任务
mask的方式
85%
不掩码,正常
15%
掩码
80% 正常掩码
10% 随机替换
10% 不掩码
任务二:Next Sentence Prediction
句子关系任务
优缺点
优点
能够并行处理
能处理长文本数据
缺点
不适合实时任务
参数量较大,不适合边缘设备
GPT模型介绍
简介
是OpenAI公司提出的一种语言预训练模型
架构
只有transformer的解码器部分,而且去掉了编码器的注意力子层,只有带掩码的自注意力和前馈全连接, 12个解码器层
BERT和GPT的对比
BERT是双向的transformer,GPT是单向transformer
BERT只有编码器,GPT只有解码器
笔记
第一天
第二天
第三天
第四天
第五天
第六天
第七天
第八天
第九天
第十天
第十一天
英文单词
PLM
预训练语言模型