< 0.5:is_next = Trueelse:# 先随机选取一段,再从这段中随机选取一个句子next_sentence = random.choice(random.choice(paragraphs))is_next = Falsereturn sentence, next_sentence, is_nextdef _get_nsp_data_from_paragraph(paragraph, paragraphs, vocab, max_len):"""生成用于下一句预测的训练样本"""nsp_data_from_paragraph = []for i in range(len(paragraph) - 1):tokens_a, tokens_b, is_next = _get_next_sentence(paragraph[i], paragraph[i + 1], paragraphs)# 考虑1个'
3.生成遮蔽语言模型任务的数据
输入:是表示BERT输入序列的词元的列表,ions是不包括特殊词元的BERT输入序列的词元索引的列表(特殊词元在遮蔽语言模型任务中不被预测),指预测的数量(选择15%要预测的随机词元) 。
函数返回替换后的输入词元、发生预测的词元索引和这些预测的标签(被替换掉的真实词元的索引和词元) 。
def _replace_mlm_tokens(tokens, candidate_pred_positions, num_mlm_preds, vocab):# 为遮蔽语言模型的输入创建新的词元副本,其中输入可能包含替换的“
文章插图
def _get_mlm_data_from_tokens(tokens, vocab):candidate_pred_positions = []# tokens是一个字符串列表for i, token in enumerate(tokens):# 在遮蔽语言模型任务中不会预测特殊词元if token in ['', '']:continuecandidate_pred_positions.append(i)# 遮蔽语言模型任务中预测15%的随机词元num_mlm_preds = max(1, round(len(tokens) * 0.15))mlm_input_tokens, pred_positions_and_labels = _replace_mlm_tokens(tokens, candidate_pred_positions, num_mlm_preds, vocab)pred_positions_and_labels = sorted(pred_positions_and_labels, key=lambda x: x[0])pred_positions = [v[0] for v in pred_positions_and_labels]mlm_pred_labels = [v[1] for v in pred_positions_and_labels]# 返回输入词元的索引、发生预测的词元索引以及这些预测的标签索引return vocab[mlm_input_tokens], pred_positions, vocab[mlm_pred_labels]
4.将文本转换为预训练数据集
定义辅助函数将特殊的“”词元附加到输入,参数包含来自两个预训练任务的辅助函数和okens的输出 。
def _pad_bert_inputs(examples, max_len, vocab):max_num_mlm_preds = round(max_len * 0.15)all_token_ids, all_segments, valid_lens = [], [], []all_pred_positions, all_mlm_weights, all_mlm_labels = [], [], []nsp_labels = []for (token_ids, pred_positions, mlm_pred_label_ids, segments, is_next) in examples:all_token_ids.append(torch.tensor(token_ids + [vocab['']] * (max_len - len(token_ids)), dtype=torch.long))all_segments.append(torch.tensor(segments + [0] * (max_len - len(segments)), dtype=torch.long))valid_lens.append(torch.tensor(len(token_ids), dtype=torch.float32))all_pred_positions.append(torch.tensor(pred_positions + [0] * (max_num_mlm_preds - len(pred_positions)), dtype=torch.long))# 填充词元的预测将通过乘以0权重在损失中过滤掉all_mlm_weights.append(torch.tensor([1.0] * len(mlm_pred_label_ids) + [0.0] * (max_num_mlm_preds - len(pred_positions)),dtype=torch.float32))all_mlm_labels.append(torch.tensor(mlm_pred_label_ids + [0] * (max_num_mlm_preds - len(mlm_pred_label_ids)), dtype=torch.long))nsp_labels.append(torch.tensor(is_next, dtype=torch.long))return (all_token_ids, all_segments, valid_lens, all_pred_positions,all_mlm_weights, all_mlm_labels, nsp_labels)
- 一、主流的固态硬盘
- 企业如何解决多头领导问题,为什么企业多头领导、均不负责
- 企业微信是干什么用的,微信的二维码是干什么用的
- 汉景帝的一夜风流换来了汉朝的二百年天下
- 中国男篮十大帅哥 中国之最帅哥
- 2023中国十大最受欢迎炸鸡汉堡品牌:塔斯汀第三、华莱士第四 中国之最受
- 追风赏月、静心养神、休闲避暑,来天然氧吧大吸一口清新空气~ 威远吉尼斯记录
- NBA新赛季奢侈税排行:勇士1.8亿财大气粗,篮网仅第二,湖人第六 ba奢侈税历史之最
- 中国历史名人勤学、励志、育人、诚信、齐家、治国等100个小故事 历史之最作文素材初中
- 中华第一大姓,从黄帝时期到明清,58位王姓历史名人 历史王姓名人之最