前面聊过 BERT,但都是直接用预训练模型。这篇讲怎么用自己的数据微调。
最常见的任务:评论分类(好评/差评/中性)。
最小可行流程:
- 1
text,label "这个手机真不错",1 "垃圾",0 |
- 2
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(
texts, labels, test_size=0.2
)
|
- 3
from transformers import BertTokenizer, BertForSequenceClassification, Trainer, TrainingArguments
tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
model = BertForSequenceClassification.from_pretrained(
'bert-base-chinese', num_labels=3
)
def tokenize(batch):
return tokenizer(batch['text'], padding=True, truncation=True, max_length=128)
train_dataset = Dataset.from_dict({'text': X_train, 'label': y_train}).map(tokenize, batched=True)
test_dataset = Dataset.from_dict({'text': X_test, 'label': y_test}).map(tokenize, batched=True)
training_args = TrainingArguments(output_dir='./results', num_train_epochs=3, per_device_train_batch_size=16)
trainer = Trainer(model=model, args=training_args, train_dataset=train_dataset, eval_dataset=test_dataset)
trainer.train()
|
硬件要求:有 GPU 推荐,没有也能跑(慢 10 倍)。
数据量经验值:< 1000 条效果一般,> 5000 条开始起飞,> 10000 条基本能压过商业 API。
本文由 BBZ · 小朵科技工作室 出品。