基于英语语言、采用掩码语言模型(MLM)目标训练的预训练模型。该模型在此论文中被首次提出,并在此仓库中首次发布。此模型区分大小写:它会区分“english”和“English”。
与其他BERT模型不同,此模型采用了一种新技术进行训练:全词掩码(Whole Word Masking)。在这种情况下,一个单词对应的所有token会被同时掩码。整体掩码率保持不变。
训练过程是相同的——每个被掩码的WordPiece token都是独立预测的。
预训练完成后,我们使用自己的一个微调脚本在SQuAD数据集上对此模型进行了微调。有关此微调的更多信息,请参见下文。
使用openmind接口
>>> from openmind import pipeline
>>> pipe = pipeline('question-answering', model=model_path, device=device)
>>> question = "Where do I live?"
>>> context = "My name is Tim and I live in Sweden."
>>> print(pipe(question = question, context = context))
{'score': 0.9705850481987, 'start': 29, 'end': 35, 'answer': 'Sweden'}调用example下的inference.py
cd examples
python inference.pyBERT 是一种基于 Transformer 的模型,它在大量英文语料库上以自监督的方式进行预训练。这意味着它仅使用原始文本进行预训练,无需人工对文本进行任何形式的标注(因此可以利用大量公开可用的数据),并通过自动流程从这些文本中生成输入和标签。更准确地说,它通过两个目标进行预训练:
通过这种方式,模型学习到英语语言的内部表示,这些表示可用于提取对下游任务有用的特征:例如,如果您有一个带标签的句子数据集,就可以使用 BERT 模型生成的特征作为输入来训练标准分类器。
该模型具有以下配置:
BERT 模型在 BookCorpus(一个包含 11,038 本未出版书籍的数据集)和 英文维基百科(不包括列表、表格和标题)上进行预训练。
文本会被转换为小写,并使用 WordPiece 进行分词,词汇表大小为 30,000。然后,模型的输入形式如下:
[CLS] Sentence A [SEP] Sentence B [SEP]以 0.5 的概率,句子 A 和句子 B 对应原始语料库中的两个连续句子,在其他情况下,则是语料库中的另一个随机句子。请注意,此处所指的“句子”是一段连续的文本,通常比单个句子更长。唯一的限制是这两个“句子”组合后的总长度少于 512 个 token。
每个句子的掩码处理细节如下:
[MASK]。该模型在 Pod 配置的 4 个云 TPU(共 16 个 TPU 芯片)上进行训练,训练步数为一百万步,批处理大小为 256。90% 的训练步骤中序列长度限制为 128 个 token,剩余 10% 的步骤中序列长度限制为 512 个 token。使用的优化器为 Adam,学习率为 1e-4,$\beta_{1} = 0.9$,$\beta_{2} = 0.999$,权重衰减为 0.01,学习率预热 10,000 步,之后学习率线性衰减。
预训练完成后,使用我们的一个微调脚本在 SQuAD 数据集上对该模型进行了微调。要复现训练过程,您可以使用以下命令:
python -m torch.distributed.launch --nproc_per_node=8 ./examples/question-answering/run_qa.py \
--model_name_or_path bert-large-cased-whole-word-masking \
--dataset_name squad \
--do_train \
--do_eval \
--learning_rate 3e-5 \
--num_train_epochs 2 \
--max_seq_length 384 \
--doc_stride 128 \
--output_dir ./examples/models/wwm_cased_finetuned_squad/ \
--per_device_eval_batch_size=3 \
--per_device_train_batch_size=3 \