HuggingFace镜像/bert-large-cased-whole-word-masking-finetuned-squad
模型介绍文件和版本分析
下载使用量0

BERT large model (cased) whole word masking finetuned on SQuAD

基于英语语言、采用掩码语言模型(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.py

模型说明

BERT 是一种基于 Transformer 的模型,它在大量英文语料库上以自监督的方式进行预训练。这意味着它仅使用原始文本进行预训练,无需人工对文本进行任何形式的标注(因此可以利用大量公开可用的数据),并通过自动流程从这些文本中生成输入和标签。更准确地说,它通过两个目标进行预训练:

  • 掩码语言模型(MLM):对于一个句子,模型随机掩码输入中 15% 的词,然后将整个掩码后的句子输入模型,模型需要预测被掩码的词。这与传统的循环神经网络(RNNs)通常逐个处理词的方式不同,也与像 GPT 这样的自回归模型(会在内部掩码未来的 token)不同。这种方式使模型能够学习句子的双向表示。
  • 下一句预测(NSP):在预训练过程中,模型将两个掩码后的句子拼接作为输入。有时这两个句子在原始文本中是相邻的,有时则不是。然后模型需要预测这两个句子是否是前后连贯的。

通过这种方式,模型学习到英语语言的内部表示,这些表示可用于提取对下游任务有用的特征:例如,如果您有一个带标签的句子数据集,就可以使用 BERT 模型生成的特征作为输入来训练标准分类器。

该模型具有以下配置:

  • 24 层
  • 1024 隐藏维度
  • 16 个注意力头
  • 3.36 亿参数

BERT 模型在 BookCorpus(一个包含 11,038 本未出版书籍的数据集)和 英文维基百科(不包括列表、表格和标题)上进行预训练。

训练过程

预处理

文本会被转换为小写,并使用 WordPiece 进行分词,词汇表大小为 30,000。然后,模型的输入形式如下:

[CLS] Sentence A [SEP] Sentence B [SEP]

以 0.5 的概率,句子 A 和句子 B 对应原始语料库中的两个连续句子,在其他情况下,则是语料库中的另一个随机句子。请注意,此处所指的“句子”是一段连续的文本,通常比单个句子更长。唯一的限制是这两个“句子”组合后的总长度少于 512 个 token。

每个句子的掩码处理细节如下:

  • 15% 的 token 被掩码。
  • 在 80% 的情况下,被掩码的 token 替换为 [MASK]。
  • 在 10% 的情况下,被掩码的 token 替换为一个随机的(不同的)token。
  • 在剩余 10% 的情况下,被掩码的 token 保持不变。

预训练

该模型在 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   \