2 BERT模型特点¶
学习目标¶
- 理解BERT模型的优点和原因
- 理解BERT模型的缺点和原因
- 理解在MLM任务中采用80%, 10%, 10%策略的原因
- 掌握利用BERT处理长文本的任务如何构造训练样本
2.1 BERT模型优缺点¶
- 优点:
- 双向上下文编码: 这是BERT最显著的优势。 它能够同时考虑单词的前后文信息,从而更好地理解单词的含义和句子结构。 这与之前的许多语言模型不同,它们通常只能单向地处理文本。 这种双向性极大地提高了模型的表达能力和准确性。
- 预训练和微调: BERT的预训练和微调范式非常高效。 预训练阶段学习通用的语言表示,微调阶段则针对特定下游任务进行适配。 这种方式只需要少量的数据和计算资源即可实现很好的效果,大大降低了开发新模型的成本和时间。
- 强大的性能: 在许多NLP任务中,BERT都取得了state-of-the-art的结果,包括文本分类、问答、命名实体识别、自然语言推理等。 这证明了BERT模型的强大性和通用性。
- 可扩展性: BERT的架构可以方便地扩展到更大的模型规模,从而进一步提高性能。 例如,BERT-large版本就比BERT-base版本拥有更多的参数和更高的性能。
- 开放源码: BERT的代码和预训练模型都是公开的,这方便了研究者和开发者使用和改进BERT模型。
- 缺点:
- 计算资源消耗大: BERT模型的参数量非常大,训练和推理都需要大量的计算资源 (GPU和内存),这限制了其在资源有限的环境下的应用,也不利于上线的实时处理。预训练尤其需要巨大的计算能力和时间。
- 内存占用高: BERT模型的庞大参数量导致其内存占用非常高,这对于一些内存受限的设备来说是一个挑战。
- 可解释性差: BERT模型是一个黑盒模型,其内部机制难以理解。这使得我们难以分析模型的决策过程,也限制了模型的可信度和可解释性。
- 训练数据依赖: BERT模型的性能严重依赖于预训练数据的质量和规模。如果预训练数据存在偏差或噪声,则会影响模型的性能。此外,特定领域的应用可能需要大量的特定领域数据进行微调。
- 对长文本处理能力有限: 原始的BERT模型对长文本的处理能力有限,因为其自注意力机制的计算复杂度是序列长度的平方。虽然已经有许多改进的模型 (例如 Longformer, Reformer) 解决了这个问题,但仍然是一个需要关注的方面。
- Next Sentence Prediction (NSP) 任务的有效性: 后续研究表明NSP任务的有效性存疑,甚至可能对某些任务产生负面影响。许多改进的BERT版本已经移除了NSP任务。
- BERT目前给出的中文模型中, 是以字为基本token单位的, 很多需要词向量的应用无法直接使用. 同时该模型无法识别很多生僻词, 只能以UNK代替。
- BERT中第一个预训练任务MLM中, [MASK]标记只在训练阶段出现, 而在预测阶段不会出现, 这就造成了一定的信息偏差, 因此训练时不能过多的使用[MASK], 否则会影响模型的表现。
2.2 BERT的MLM任务¶
BERT的MLM任务中为什么采用了80%, 10%, 10%的策略?
- 首先, 如果所有参与训练的token被100%的[MASK], 那么在fine-tunning的时候所有单词都是已知的, 不存在[MASK], 那么模型就只能根据其他token的信息和语序结构来预测当前词, 而无法利用到这个词本身的信息, 因为它们从未出现在训练过程中, 等于模型从未接触到它们的信息, 等于整个语义空间损失了部分信息。采用80%的概率下应用[MASK], 既可以让模型去学着预测这些单词, 又以20%的概率保留了语义信息展示给模型。
- 保留下来的信息如果全部使用原始token, 那么模型在预训练的时候可能会偷懒, 直接照抄当前token信息. 采用10%概率下random token来随机替换当前token, 会让模型不能去死记硬背当前的token, 而去尽力学习单词周边的语义表达和远距离的信息依赖, 尝试建模完整的语言信息。
- 最后再以10%的概率保留原始的token, 意义就是保留语言本来的面貌, 让信息不至于完全被遮掩, 使得模型可以”看清”真实的语言面貌。
2.3 BERT处理长文本的方法¶
首选要明确一点, BERT预训练模型所接收的最大sequence长度是512。
那么对于长文本(文本长度超过512的句子), 就需要特殊的方式来构造训练样本,核心就是如何进行截断。
- head-only方式: 这是只保留长文本头部信息的截断方式, 具体为保存前510个token (要留两个位置给[CLS]和[SEP])。
- tail-only方式: 这是只保留长文本尾部信息的截断方式, 具体为保存最后510个token (要留两个位置给[CLS]和[SEP])。
- head+only方式: 选择前128个token和最后382个token (文本总长度在800以内), 或者前256个token和最后254个token (文本总长度大于800)。
2.4 小结¶
- 学习了BERT模型的3个优点:
- 在11个NLP任务上取得SOAT成绩
- 利用了Transformer的并行化能力以及长语句捕捉语义依赖和结构依赖
- BERT实现了双向Transformer并为后续的微调任务留出足够的空间
- 学习了BERT模型的4个缺点:
- BERT模型太大, 太慢
- BERT模型中的中文模型是以字为基本token单位的, 无法利用词向量, 无法识别生僻词
- BERT模型中的MLM任务, [MASK]标记在训练阶段出现, 预测阶段不出现, 这种偏差会对模型有一定影响
- BERT模型的MLM任务, 每个batch只有15%的token参与了训练, 造成大量文本数据的”无用”, 收敛速度慢, 需要的算力和算时都大大提高
- 学习了长文本处理如果要利用BERT的话, 需要进行截断处理.
- 第一种方式就是只保留前面510个token
- 第二种方式就是只保留后面510个token
- 第三种方式就是前后分别保留一部分token, 总数是510
- BERT中MLM任务中的[MASK]是以一种显示的方式告诉模型”这个词我不告诉你, 你自己从上下文里猜”, 非常类似于同学们在做完形填空. 如果[MASK]以外的部分全部都用原始token, 模型会学习到”如果当前词是[MASK], 就根据其他词的信息推断这个词; 如果当前词是一个正常的单词, 就直接照抄”. 这样一来, 到了fine-tunning阶段, 所有单词都是正常单词了, 模型就会照抄所有单词, 不再提取单词之间的依赖关系了。
- BERT中MLM任务以10%的概率填入random token, 就是让模型时刻处于”紧张情绪”中, 让模型搞不清楚当前看到的token是真实的单词还是被随机替换掉的单词, 这样模型在任意的token位置就只能把当前token的信息和上下文信息结合起来做综合的判断和建模. 这样一来, 到了fine-tunning阶段, 模型也会同时提取这两方面的信息, 因为模型”心理很紧张”, 它不知道当前看到的这个token, 所谓的”正常单词”到底有没有”提前被动过手脚”。