bert 运行 run_pretraining.py 时出错(从训练循环记录的错误:indices[] 不在 ... 中)

mwngjboj  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(61)

你遇到的问题是因为词汇表大小超出了范围。在这个例子中,164930 超出了 119547。要解决这个问题,你需要调整词汇表大小。你可以在 run_pretraining.py 文件中找到 tokenizer_builder 函数,然后修改 vocab_file 参数来设置新的词汇表大小。

例如,如果你想将词汇表大小设置为 200000,你可以这样修改:

def tokenizer_builder(bert_config):
    ...
    # 其他代码保持不变
    ...
    return tokenizer

# 在创建 tokenizer 时设置新的词汇表大小

tokenizer = tokenizer_builder(bert_config)
with open("new_vocab.txt", "w") as f:
    f.write("".join([tokenizer.vocab_file.vocab_fs.decode(i) for i in tokenizer.vocab_file.vocab]))
tokenizer.vocab_file.vocab = [tokenizer.vocab_file.vocab[i] for i in range(200000)]

然后,在运行 run_pretraining.py 时,使用新的词汇表文件:

!python run_pretraining.py 
  --bert_config_file "../bert-multi-cased/bert_config.json" 
  --input_file "../bert-model-custom/pretrain.tfrecord" 
  --output_dir "../bert-model-custom" 
  --init_checkpoint "../bert-multi-cased/bert_model.ckpt" 
  --do_train True 
  --train_batch_size 2 
  --tokenizer_path "new_vocab.txt"

这样,你的模型应该可以正常运行了。

2ic8powd

2ic8powd1#

哦,上面的pretrain.tfrecord是通过运行create_pretraining_data.py创建的。我还在使用TF版本1.14.1。

相关问题