This repository was archived by the owner on May 21, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpretrain_bert.py
More file actions
95 lines (76 loc) 路 2.43 KB
/
Copy pathpretrain_bert.py
File metadata and controls
95 lines (76 loc) 路 2.43 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from transformers import (
BertConfig,
BertForMaskedLM,
BertTokenizerFast,
DataCollatorForLanguageModeling,
Trainer,
TrainingArguments,
)
from datasets import load_dataset
tokenizer = BertTokenizerFast(vocab_file="opcode_vocab.txt")
def tokenize_function(examples):
if tokenizer.pad_token is None:
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
return tokenizer(examples["text"], padding="max_length", truncation=True, max_length=512)
print("Tokenizer loaded.")
print("Tokenizer vocab size:", tokenizer.vocab_size)
dataset = load_dataset(
'text',
data_files={'train': 'opcodes_300/*.opcodes.txt'}
)
split_dataset = dataset["train"].train_test_split(test_size=0.1, seed=42)
tokenized_dataset = split_dataset.map(
tokenize_function,
batched=True,
remove_columns=["text"],
num_proc=24
)
print("Dataset tokenized.")
config = BertConfig(
vocab_size=tokenizer.vocab_size,
max_position_embeddings=512,
num_attention_heads=12,
num_hidden_layers=6,
type_vocab_size=1,
)
print("Model config vocab size:", config.vocab_size)
model = BertForMaskedLM(config=config)
# Check if the pad token was added in any process and resize if needed.
# It's better to be explicit here before creating the model.
if tokenizer.pad_token is None:
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
model.resize_token_embeddings(len(tokenizer))
print(f"Model initialized with {model.num_parameters():,} parameters.")
data_collator = DataCollatorForLanguageModeling(
tokenizer=tokenizer,
mlm=True,
mlm_probability=0.15 # Standard 15% masking probability
)
training_args = TrainingArguments(
output_dir="./opcode_bert",
overwrite_output_dir=True,
num_train_epochs=5,
per_device_train_batch_size=16,
save_steps=2000,
save_total_limit=3,
logging_dir='./logs',
logging_strategy="steps",
logging_steps=500,
eval_strategy="steps",
eval_steps=500,
load_best_model_at_end=True,
metric_for_best_model="eval_loss",
)
trainer = Trainer(
model=model,
args=training_args,
data_collator=data_collator,
train_dataset=tokenized_dataset["train"],
eval_dataset=tokenized_dataset["test"],
)
print("Starting training...")
trainer.train()
# Save the final model
trainer.save_model("./opcode_bert_final")
tokenizer.save_pretrained("./opcode_bert_final")
print("Training complete and final model saved.")