1

我是新来的。我正在尝试在目标域上微调 BERT MLM(bert-base-uncased)。不幸的是,结果并不好。

在微调之前,预训练模型会用符合人类期望的单词填充句子的掩码。
例如,维基百科是一个免费的在线 [MASK],由世界各地的志愿者创建和编辑。
最可能的预测是百科全书(得分:0.650)和资源(得分:0.087)。

经过微调,预测完全错误。通常将停用词预测为结果。
例如,维基百科是一个免费的在线 [MASK],由世界各地的志愿者创建和编辑。
最可能的预测是分数:0.052)和(分数:0.033)。

我尝试了不同的时期(从 1 到 10)和不同的数据集(从几 MB 到几 GB),但我遇到了同样的问题。我究竟做错了什么?我正在使用以下代码,希望您能帮助我。

from transformers import AutoConfig, AutoTokenizer, AutoModelForMaskedLM

tokenizer = AutoTokenizer.from_pretrained('bert-base-uncased')
config = AutoConfig.from_pretrained('bert-base-uncased', output_hidden_states=True)
model = AutoModelForMaskedLM.from_config(config)  # BertForMaskedLM.from_pretrained(path)

from transformers import LineByLineTextDataset

dataset = LineByLineTextDataset(tokenizer=tokenizer,
                                file_path="data/english/corpora.txt", 
                                block_size = 512)

from transformers import DataCollatorForLanguageModeling

data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm=True, mlm_probability=0.15)

from transformers import Trainer, TrainingArguments

training_args = TrainingArguments(output_dir="output/models/english",
                                 overwrite_output_dir=True,
                                 num_train_epochs=5,
                                 per_gpu_train_batch_size=8,
                                 save_steps = 22222222,
                                 save_total_limit=2)

trainer = Trainer(model=model, args=training_args, data_collator=data_collator, train_dataset=dataset)

trainer.train()
trainer.save_model("output/models/english")

from transformers import pipeline

# Initialize MLM pipeline
mlm = pipeline('fill-mask', model="output/models/english", tokenizer="output/models/english")

# Get mask token
mask = mlm.tokenizer.mask_token

# Get result for particular masked phrase
phrase = f'Wikipedia is a free online {mask}, created and edited by volunteers around the world'

result = mlm(phrase)

# Print result
print(result)
4

0 回答 0