我是新来的。我正在尝试在目标域上微调 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)