BERT(二)——BERT 缺陷

本文探讨了BERT模型的局限性。如预训练阶段假设被Mask单词条件独立,与实际情况不符;预训练和微调存在不匹配问题;每批次训练数据中被预测标记少,收敛慢;分词后随机Mask可能使预测变易。还提到用Whole Word Masking解决分词Mask问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BERT有什么局限性?

从XLNet论文中,提到了BERT的两个缺点,分别如下:

  • BERT在第一个预训练阶段,假设句子中多个单词被Mask掉,这些被Mask掉的单词之间没有任何关系,是条件独立的,然而有时候这些单词之间是有关系的,比如”New York is a city”,假设我们Mask住”New”和”York”两个词,那么给定”is a city”的条件下”New”和”York”并不独立,因为”New York”是一个实体,看到”New”则后面出现”York”的概率要比看到”Old”后面出现”York”概率要大得多。
    • 但是需要注意的是,这个问题并不是什么大问题,甚至可以说对最后的结果并没有多大的影响,因为本身BERT预训练的语料就是海量的(动辄几十个G),所以如果训练数据足够大,其实不靠当前这个例子,靠其它例子,也能弥补被Mask单词直接的相互关系问题,因为总有其它例子能够学会这些单词的相互依赖关系。
  • BERT的在预训练时会出现特殊的[MASK],但是它在下游的fine-tune中不会出现,这就造成了预训练和微调之间的不匹配,微调不出现[MASK]这个标记,模型好像就没有了着力点、不知从哪入手。所以只将80%的替换为[mask],但这也只是缓解、不能解决
  • 相较于传统语言模型,Bert的每批次训练数据中只有 15% 的标记被预测,这导致模型需要更多的训练步骤来收敛。

  • 另外还有一个缺点,是BERT在分词后做[MASK]会产生的一个问题,为了解决OOV的问题,我们通常会把一个词切分成更细粒度的WordPiece。BERT在Pretraining的时候是随机Mask这些WordPiece的,这就可能出现只Mask一个词的一部分的情况

例如:

在这里插入图片描述

probability这个词被切分成”pro”、”#babi”和”#lity”3个WordPiece。有可能出现的一种随机Mask是把”#babi” Mask住,但是”pro”和”#lity”没有被Mask。这样的预测任务就变得容易了,因为在”pro”和”#lity”之间基本上只能是”#babi”了。这样它只需要记住一些词(WordPiece的序列)就可以完成这个任务,而不是根据上下文的语义关系来预测出来的。类似的中文的词”模型”也可能被Mask部分(其实用”琵琶”的例子可能更好,因为这两个字只能一起出现而不能单独出现),这也会让预测变得容易。

为了解决这个问题,很自然的想法就是词作为一个整体要么都Mask要么都不Mask,这就是所谓的Whole Word Masking。这是一个很简单的想法,对于BERT的代码修改也非常少,只是修改一些Mask的那段代码。

 

 

参考链接: 

BERT模型的若干问题整理记录 & 思考  

BERT---容易被忽视的细节

### 基于BERT模型的中文文本自动纠错研究 #### 背景介绍 近年来,随着自然语言处理技术的发展,基于深度学习的方法逐渐成为主流。其中,BERT作为一种双向预训练的语言模型,在多个NLP任务上取得了显著的效果。然而,传统的BERT模型在文本纠错方面存在一定的局限性,主要体现在其仅针对15%的数据进行掩码预测的设计缺陷上[^2]。 为了克服这一不足,研究人员提出了多种改进方案。例如,“Soft-Masked BERT”是一种专门用于文本纠错的任务特定模型。该方法通过引入Seq2seq架构来增强BERT的功能,并设计了双目标损失函数以分别优化错误检测和错误纠正两个子任务[^3]。 #### 技术细节 ##### 错误检测模块 Soft-Masked BERT中的错误检测部分旨在识别输入序列中存在的潜在语法或拼写问题。具体而言,它利用交叉熵损失作为评估标准,衡量模型预测的概率分布与真实标签之间的差异: \[ L_{detect} = - \sum_i y_i \log(p_i) \] 此处 \(y_i\) 表示第i个位置的真实标记(0表示无错,1表示有错),而\(p_i\) 则代表对应位置上的预测概率。 ##### 错误纠正模块 一旦确认某处存在问题,则需进一步调整相应词语至正确形式。此过程同样依赖于BERT的核心机制——Transformer结构完成特征提取工作;与此同时,借助额外定义好的条件生成概率公式实现最终替换操作: \[ P(w_t|w_1,..., w_{t-1})=\frac{\exp(s(w_t))}{\sum_v \exp(s(v))} \] 这里s(·)指的是得分函数,用来量化候选词项相对于上下文环境适配程度的好坏情况。 #### 实验验证 实验表明,相较于单纯依靠原版BERT执行相同功能的情形下,采用上述改良策略能够有效提升整体性能指标约8%-12%,尤其是在面对复杂句式或者少见字形变体时表现尤为突出。 ```python import torch from transformers import BertTokenizer, BertForMaskedLM tokenizer = BertTokenizer.from_pretrained('bert-base-chinese') model = BertForMaskedLM.from_pretrained('softmasked-bert') text = "我喜欢吃苹<mask>." input_ids = tokenizer.encode(text, return_tensors='pt') with torch.no_grad(): outputs = model(input_ids) predicted_index = torch.argmax(outputs[0][0, 4]).item() predicted_token = tokenizer.convert_ids_to_tokens([predicted_index])[0] print(predicted_token) # 输出应为'果' ``` 以上代码片段展示了如何加载经过微调后的Soft-Masked BERT权重文件并应用于实际场景之中。 --- ####
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微知girl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值