在 BertForMaskedLM 中,masked_lm_labels 参数如何工作?

Posted

技术标签:

【中文标题】在 BertForMaskedLM 中,masked_lm_labels 参数如何工作?【英文标题】:How does masked_lm_labels argument work in BertForMaskedLM? 【发布时间】:2020-08-11 17:02:05 【问题描述】:
from transformers import BertTokenizer, BertForMaskedLM
import torch

tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')
model = BertForMaskedLM.from_pretrained('bert-base-uncased')

input_ids = torch.tensor(tokenizer.encode("Hello, my dog is cute", add_special_tokens=True)).unsqueeze(0) # Batch size 1
outputs = model(input_ids, masked_lm_labels=input_ids)

loss, prediction_scores = outputs[:2] 

此代码来自拥抱脸转换器页面。 https://huggingface.co/transformers/model_doc/bert.html#bertformaskedlm

我无法理解 model 中的 masked_lm_labels=input_ids 参数。 它是如何工作的?是不是表示通过input_ids时会自动屏蔽部分文字?

【问题讨论】:

【参考方案1】:

第一个参数是掩码输入,masked_lm_labels 参数是所需的输出。

input_ids 应该被屏蔽。通常,如何进行掩蔽取决于您。在最初的 BERT 中,他们选择了 15% 的代币以及以下的任何一种

使用[MASK] 令牌;或 使用随机令牌;或 保持原始令牌不变。

这会修改输入,因此您需要告诉模型原始的非屏蔽输入是什么,即masked_lm_labels 参数。另请注意,您不想仅计算实际选择用于掩码的标记的损失。其余标记应替换为索引-100

更多详情,see the documentation。

【讨论】:

以上是关于在 BertForMaskedLM 中,masked_lm_labels 参数如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

奇妙的 CSS MASK

MASK-RCNN是什么?MASK(掩膜)又是什么?

OpenCV中mask的设置方法?

《NLP 中的Mask全解》

《NLP 中的Mask全解》

OpenCV探索之路(十三):详解掩膜mask