2019论文:BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding用于语言理解的深度双向变换器的预训练
论文地址:https://arxiv.org/abs/1810.04805
1. BERT概述
BERT,全称 "Bidirectional Encoder Representations from Transformers",是由 Google AI Language 于 2018 年开发的深度学习模型。它在 NLP(自然语言处理)领域表现出色,成功解决了超过 11 项语言任务,包括 情感分析 和 命名实体识别(NER) 等问题。
过去,计算机虽然能读取文本,但无法像人类一样理解上下文。为此,NLP 诞生了,旨在让机器能够 读取、分析、解释和提取语言中的含义。传统方法通常为每个任务训练独立模型,而 BERT 改变了这一现状。
BERT 是 深度双向、无监督的语言模型,通过大规模纯文本语料库进行预训练,能理解文本上下文中的深层含义。
2. BERT 能做什么?
BERT 是多功能的 NLP 工具,广泛应用于以下任务:
情感分析:判断电影评论是积极还是消极。
问题回答:帮助聊天机器人给出精准回答。
文本预测:在 Gmail 等应用中预测下一句文本。
文本生成:根据几句提示生成文章。
长文总结:如快速总结法律合同。
多义词解析:根据上下文区分“bank”(银行/河岸)等词的不同含义。
它还应用于 语音助手(如 Alexa 和 Siri)、聊天机器人、Google 搜索、语音导航 等多个领域。
3. BERT 的原理
BERT 基于 Transformer 架构。Transformer 是一种通过 自注意力机制 学习文本中单词之间关系的模型。它包括两个模块:编码器(处理输入文本)和 解码器(生成预测)。而 BERT 只需要编码器部分,因为它的目标是生成语言模型。
BERT 的核心思想是 将词汇转换为向量,使机器学习模型能在数字空间中处理语言。这些转换后的向量可以与其他类型的数据一起,用于进一步预测和分析。
训练策略
为了训练 BERT,采用了两种关键策略:
Masked Language Model (MLM)
Next Sentence Prediction (NSP)
4. Masked Language Model (MLM)
在输入 BERT 之前,随机替换每个句子中 15% 的单词为 [MASK] 标记。模型根据上下文预测被掩盖单词的原始值。
预测步骤:
在编码器的输出上添加分类层。
将输出向量与词嵌入矩阵相乘,转化为词汇表维度。
用 softmax 计算词汇表中每个单词的概率。
BERT 的损失函数只考虑掩盖词的预测,这种设计提高了模型的 上下文感知能力。尽管训练收敛速度较慢,但模型的最终表现显著优于定向语言模型。
注意:实际实现中,并非所有 15% 的词都被替换为 [MASK]。
5. Next Sentence Prediction (NSP)
在训练 BERT 时,模型会接收成对句子作为输入,并预测第二个句子是否为第一个句子的自然续句。
训练过程:
50% 的句子对是连续的,另 50% 是随机组合的。
在输入时,使用
[CLS]
作为句首标记,[SEP]
作为句尾标记。添加 句子嵌入 和 位置嵌入,以帮助模型区分句子。
预测步骤:
通过 Transformer 编码整个输入序列。
用分类层将
[CLS]
标记的输出转化为 2x1 形状的向量。用 softmax 计算续句的概率。
BERT 同时训练 MLM 和 NSP,通过最小化两者的组合损失来优化模型性能。
6. BERT 的输入表示
BERT 的输入表示由以下三种嵌入的总和组成:
Token 嵌入:使用词片嵌入,将常见词作为单个单元,稀有词拆解为更小的子词。
段嵌入:通过掩码分割句子,区分不同段落。
位置嵌入:编码每个词在句子中的位置,使模型能处理序列信息。
这些嵌入加在一起,作为 BERT 的输入向量。
7. BERT 的模型架构
BERT 提供两种架构:BERT-Base 和 BERT-Large,根据网络层数和隐藏层维度有所不同:
模型 | Transformer 层数 (L) | 隐藏层维度 (H) | 自注意力头数 (A) |
---|---|---|---|
BERT-Base | 12 | 768 | 12 |
BERT-Large | 24 | 1024 | 16 |
BERT 有大小写敏感(case-sensitive)和非敏感(uncased)两种版本,可根据应用需求选择使用。
8. 如何使用 BERT?
环境安装
在 Win10 + PyCharm + PyTorch 环境中,安装 Transformer 库:
pip install transformers
示例代码
以下是一个简单的 BERT 应用示例,使用 BERT 模型预测掩盖单词:
from transformers import pipeline
# 初始化 BERT 填空任务模型
unmasker = pipeline('fill-mask', model='bert-base-uncased')
# 测试 BERT 的预测能力
result = unmasker("Artificial Intelligence [MASK] take over the world.")
print(result)
9. 总结
BERT 是 Transformer 架构的代表作,为 NLP 领域带来了革命性进展。通过 MLM 和 NSP 策略,BERT 实现了对语言上下文的深度理解,并成为 情感分析、文本生成、问答系统 等任务的强大工具。
想要了解更多内容,可在小程序搜索🔍AI Pulse,获取更多最新内容。