BERT 算法和优化
2024-12-11 17:32:03 0 举报
AI智能生成
BERT(Bidirectional Encoder Representations from Transformers)是一种先进的自然语言处理模型,采用Transformer架构,能够理解和生成文本。BERT 在训练过程中使用双向编码器,使模型能够同时考虑文本的上下文信息,从而提高理解能力。此外,BERT 还引入了Masked Language Modeling和Next Sentence Prediction两个预训练任务,进一步提升模型的泛化能力。
作者其他创作
大纲/内容
BERT 算法基础
BERT 算法背景
自然语言处理的发展
传统NLP方法的局限性
词向量的意义单一
字句的上下文对句子的影响需要考虑
深度学习在NLP中的应用
BERT 算法原理
Transformer模型介绍
自注意力机制
多头注意力机制
位置编码
BERT 任务
掩码语言模型(Masked Language Model, MLM):
下一句预测(Next Sentence Prediction, NSP):
BERT 算法特点
双向编码能力
与ELMo等单向模型的对比
将输入的序列(如一句话或段落)进行上下文理解,为每个输入 token 生成一个上下文相关的向量表示。
强大的泛化能力
在多种NLP任务中的表现
可解释性探索
注意力权重可视化
BERT 算法核心
1. Tokenization的设计核心
2. BERT Tokenizer的工作原理
3. BERT 双向编码
4. BERT 输入表示
(embeddings): BertEmbeddings(
(word_embeddings): Embedding(105879, 768, padding_idx=0) # 词嵌入
(position_embeddings): Embedding(512, 768) # 位置嵌入
(token_type_embeddings): Embedding(2, 768) # 句子类型嵌入
(LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True) # 层归一化
(dropout): Dropout(p=0.1, inplace=False) # Dropout层
)
(word_embeddings): Embedding(105879, 768, padding_idx=0) # 词嵌入
(position_embeddings): Embedding(512, 768) # 位置嵌入
(token_type_embeddings): Embedding(2, 768) # 句子类型嵌入
(LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True) # 层归一化
(dropout): Dropout(p=0.1, inplace=False) # Dropout层
)
Word Embeddings:
将输入序列中的每个token映射为一个向量表示,嵌入维度为768。
词表大小:105879,表示模型支持的词汇数量。
padding_idx=0:将索引为0的token(padding token)对应的向量固定为0。
Position Embeddings:
为解决Transformer没有自然顺序的问题,BERT添加了位置编码,支持最大序列长度512。
Token Type Embeddings:
用于区分两个句子(如在下一句预测任务中),Embedding(2, 768)表示两种类型:句子A和句子B。
LayerNorm和Dropout:
对嵌入向量进行层归一化和Dropout,增加训练的稳定性和模型的泛化能力。
将输入序列中的每个token映射为一个向量表示,嵌入维度为768。
词表大小:105879,表示模型支持的词汇数量。
padding_idx=0:将索引为0的token(padding token)对应的向量固定为0。
Position Embeddings:
为解决Transformer没有自然顺序的问题,BERT添加了位置编码,支持最大序列长度512。
Token Type Embeddings:
用于区分两个句子(如在下一句预测任务中),Embedding(2, 768)表示两种类型:句子A和句子B。
LayerNorm和Dropout:
对嵌入向量进行层归一化和Dropout,增加训练的稳定性和模型的泛化能力。
5. Encode层
(encoder): BertEncoder(
(layer): ModuleList(
(0-11): 12 x BertLayer( # 共12层BertLayer
(attention): BertAttention(
(self): BertSelfAttention(
(query): Linear(in_features=768, out_features=768, bias=True)
(key): Linear(in_features=768, out_features=768, bias=True)
(value): Linear(in_features=768, out_features=768, bias=True)
(dropout): Dropout(p=0.1, inplace=False)
)
(output): BertSelfOutput(
(dense): Linear(in_features=768, out_features=768, bias=True)
(LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
(dropout): Dropout(p=0.1, inplace=False)
)
)
(intermediate): BertIntermediate(
(dense): Linear(in_features=768, out_features=3072, bias=True)
(intermediate_act_fn): GELUActivation()
)
(output): BertOutput(
(dense): Linear(in_features=3072, out_features=768, bias=True)
(LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
(dropout): Dropout(p=0.1, inplace=False)
)
)
)
)
(layer): ModuleList(
(0-11): 12 x BertLayer( # 共12层BertLayer
(attention): BertAttention(
(self): BertSelfAttention(
(query): Linear(in_features=768, out_features=768, bias=True)
(key): Linear(in_features=768, out_features=768, bias=True)
(value): Linear(in_features=768, out_features=768, bias=True)
(dropout): Dropout(p=0.1, inplace=False)
)
(output): BertSelfOutput(
(dense): Linear(in_features=768, out_features=768, bias=True)
(LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
(dropout): Dropout(p=0.1, inplace=False)
)
)
(intermediate): BertIntermediate(
(dense): Linear(in_features=768, out_features=3072, bias=True)
(intermediate_act_fn): GELUActivation()
)
(output): BertOutput(
(dense): Linear(in_features=3072, out_features=768, bias=True)
(LayerNorm): LayerNorm((768,), eps=1e-12, elementwise_affine=True)
(dropout): Dropout(p=0.1, inplace=False)
)
)
)
)
Encoder层:多层Transformer编码器
BERT的Encoder由12个BertLayer堆叠而成,每个BertLayer包含三个核心部分:
Self-Attention层:捕获序列中token之间的关系。
Intermediate层:前馈全连接层(Feed-Forward Network)。
Output层:对结果进行层归一化和残差连接。
BERT的Encoder由12个BertLayer堆叠而成,每个BertLayer包含三个核心部分:
Self-Attention层:捕获序列中token之间的关系。
Intermediate层:前馈全连接层(Feed-Forward Network)。
Output层:对结果进行层归一化和残差连接。
6. Pooler层
(pooler): BertPooler(
(dense): Linear(in_features=768, out_features=768, bias=True)
(activation): Tanh()
)
(dense): Linear(in_features=768, out_features=768, bias=True)
(activation): Tanh()
)
Pooler层:句子表示层
[CLS] token的输出向量经过一个全连接层和Tanh激活函数,得到整个句子的表示(pooled_output)。
[CLS] token的输出向量经过一个全连接层和Tanh激活函数,得到整个句子的表示(pooled_output)。
BERT 算法优化与改进
模型压缩与加速
剪枝与量化
模型剪枝策略
量化方法选择
蒸馏与迁移学习
知识蒸馏
迁移学习在BERT中的应用
多语言BERT
mBERT介绍
多语言数据训练
跨语言迁移能力
XLM与XLM-R
XLM模型架构
XLM-R的改进与优势
完全掩码BERT
完全掩码BERT概念
全词掩码与部分掩码的区别
全词掩码的优势
部分掩码的局限性
实现完全掩码BERT的步骤
数据预处理
文本清洗
去除停用词
去除标点符号
分词与标记化
基于空格的分词
基于子词单元的分词
全词掩码实现
基于词典的全词掩码
基于统计的全词掩码
模型训练与优化
损失函数设计
交叉熵损失
Focal Loss
优化器选择
Adam优化器
SGD优化器
学习率调整策略
固定学习率
学习率衰减
BERT与其他模型融合
BERT+CNN/RNN
在文本分类中的应用
在序列标注中的应用
BERT+Transformer变体
在生成式任务中的应用
在图像-文本联合任务中的应用
评估与调优
模型评估指标
准确率
宏平均准确率
微平均准确率
F1分数
宏平均F1分数
微平均F1分数
模型调优方法
超参数调优
网格搜索
随机搜索
模型集成
Bagging
Boosting
错误分析与纠正
常见错误类型
语义错误
语法错误
纠正策略
基于规则的纠正
基于模型的纠正
BERT 算法应用
文本分类
情感分析
电影评论情感分类
社交媒体情绪监测
新闻分类
体育新闻分类
科技新闻分类
命名实体识别
人名识别
中文人名识别
英文人名识别
地名识别
中国地名识别
国际地名识别
问答系统不擅长
可基于BERT的问答匹配Match
问题-答案对匹配
多轮对话问答
可以做知识图谱Rela
基于BERT的实体链接
基于BERT的关系推理
原生BERT模型能做什么?
迁移学习优势:
分类任务:如情感分析、垃圾邮件检测。
序列标注任务:如命名实体识别(NER)、分词。
BERT有多种变体,可以适配不同的语言和领域:
多语言BERT(mBERT):支持多种语言(如英文、中文、法文等)。
金融领域:如 FinBERT,针对金融数据进行预训练。
医学领域:如 ClinicalBERT,适配医学文本。
中文BERT:如 RoBERTa-wwm-ext,专门优化了中文分词和语料训练。
多语言BERT(mBERT):支持多种语言(如英文、中文、法文等)。
金融领域:如 FinBERT,针对金融数据进行预训练。
医学领域:如 ClinicalBERT,适配医学文本。
中文BERT:如 RoBERTa-wwm-ext,专门优化了中文分词和语料训练。
原生BERT和BART,GPT的区别?
T5(Text-to-Text Transfer Transformer)
架构特点:
统一的Text-to-Text架构:T5将所有任务表示为文本输入到文本输出,使得任务建模简单清晰。
Encoder-Decoder结构:编码器擅长理解文本上下文,解码器擅长生成自然语言。
适用场景:
精确问题生成:T5适合生成结构化、涵盖主要信息的问题。
开放领域问答生成:经过微调,T5可以准确识别段落中的关键信息并生成问题。
架构特点:
统一的Text-to-Text架构:T5将所有任务表示为文本输入到文本输出,使得任务建模简单清晰。
Encoder-Decoder结构:编码器擅长理解文本上下文,解码器擅长生成自然语言。
适用场景:
精确问题生成:T5适合生成结构化、涵盖主要信息的问题。
开放领域问答生成:经过微调,T5可以准确识别段落中的关键信息并生成问题。
BART(Bidirectional and Auto-Regressive Transformers)
架构特点:
双向编码器和自回归解码器结合:编码器类似BERT,捕获上下文信息;解码器类似GPT,擅长生成连贯的文本。
通过噪声添加(如文本删除或遮蔽)进行预训练,使其对复杂输入具有鲁棒性。
适用场景:
上下文丰富的生成任务:比如生成更具背景理解的问题。
摘要式问题生成:能够在复杂文本中提取关键信息并生成问题。适合需要处理较长文本的任务。
架构特点:
双向编码器和自回归解码器结合:编码器类似BERT,捕获上下文信息;解码器类似GPT,擅长生成连贯的文本。
通过噪声添加(如文本删除或遮蔽)进行预训练,使其对复杂输入具有鲁棒性。
适用场景:
上下文丰富的生成任务:比如生成更具背景理解的问题。
摘要式问题生成:能够在复杂文本中提取关键信息并生成问题。适合需要处理较长文本的任务。
GPT(Generative Pretrained Transformer)
架构特点:
单向自回归模型:基于Transformer解码器架构,擅长生成流畅的自然语言。
GPT-3及以上版本对海量预训练数据的捕获,使其生成能力极为强大。
适用场景:
多样性生成:GPT在开放性问题生成上表现出色,可以生成多个风格迥异的问题。
自由文本问题生成:对于没有明确模板或约束的问题生成任务,GPT尤其擅长。提供更具创意和多样性的问题。
架构特点:
单向自回归模型:基于Transformer解码器架构,擅长生成流畅的自然语言。
GPT-3及以上版本对海量预训练数据的捕获,使其生成能力极为强大。
适用场景:
多样性生成:GPT在开放性问题生成上表现出色,可以生成多个风格迥异的问题。
自由文本问题生成:对于没有明确模板或约束的问题生成任务,GPT尤其擅长。提供更具创意和多样性的问题。
如何使用BERT模型微调找出实体,关键词?
基于BERT字级别微调进行实体识别(NER)
整体思路:
直接在 BERT 的基础上微调,用于中文NER任务。
将BERT的输入设计为 字级别,然后通过标注好的NER数据进行训练。
输出层增加一个 分类头,用于预测每个字的标签(如BIO标签)。
整体思路:
直接在 BERT 的基础上微调,用于中文NER任务。
将BERT的输入设计为 字级别,然后通过标注好的NER数据进行训练。
输出层增加一个 分类头,用于预测每个字的标签(如BIO标签)。
0 条评论
下一页