You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于BERT训练句子评分模型?

基于BERT的句子评分模型入门实操指南

核心任务定位

你这个任务是典型的文本回归任务(输出连续的评分,而非分类标签),用预训练BERT来微调完全可行,不用从零搭建模型,能大幅降低实操难度。

入门分步实操

1. 环境搭建

先搞定基础工具:

  • 安装Python 3.8~3.10版本(兼容性最好,避免新老版本的库冲突)
  • 执行命令安装核心依赖:
    pip install torch transformers datasets scikit-learn
    
    其中torch是深度学习框架,transformers用来调用BERT等预训练模型,datasets处理标注数据,scikit-learn做数据划分和指标评估。

2. 数据预处理

把你的标注数据整理成CSV格式,只需要两列:sentence(待评分句子)和score(金标准分数)。
用datasets加载数据后,用BERT自带的分词器做格式转换(转换成模型能识别的输入格式),示例代码:

from datasets import load_dataset
from transformers import BertTokenizer

# 加载本地CSV数据
raw_dataset = load_dataset('csv', data_files='你的数据文件路径.csv')
# 加载BERT基础分词器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 定义预处理函数
def preprocess_data(examples):
    return tokenizer(
        examples['sentence'],
        truncation=True,  # 超过最大长度截断
        padding='max_length',  # 不足最大长度补全
        max_length=128  # 根据你的句子长度调整,一般128足够
    )

# 批量处理数据
tokenized_dataset = raw_dataset.map(preprocess_data, batched=True)
# 划分训练集和验证集(8:2比例)
tokenized_dataset = tokenized_dataset['train'].train_test_split(test_size=0.2)

注意:确保score列是数值类型(整数/浮点数),不要是字符串,否则训练会报错。

3. 模型搭建

直接用HuggingFace封装好的BERT模型,把分类头改成回归头(设置num_labels=1),损失函数用均方误差(MSE)即可:

from transformers import BertForSequenceClassification

# 加载预训练BERT,指定回归任务
model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=1)

4. 配置训练与启动

用TrainingArguments设置训练参数,再用Trainer启动训练,示例:

from transformers import TrainingArguments, Trainer
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error

# 自定义评估指标(回归任务用MAE、MSE)
def compute_metrics(eval_pred):
    predictions, labels = eval_pred
    predictions = predictions.flatten()  # 把预测值展平成一维数组
    mae = mean_absolute_error(labels, predictions)
    mse = mean_squared_error(labels, predictions)
    return {'mae': mae, 'mse': mse}

# 配置训练参数
training_args = TrainingArguments(
    output_dir='./results',  # 模型保存路径
    per_device_train_batch_size=8,  # 单设备训练批量,显存小就设成4
    per_device_eval_batch_size=8,
    num_train_epochs=3,  # 训练轮数,3~5足够,太多容易过拟合
    learning_rate=2e-5,  # BERT微调的标准学习率
    logging_dir='./logs',  # 日志保存路径
    logging_steps=10,
    evaluation_strategy='epoch',  # 每轮训练后用验证集评估
    save_strategy='epoch',  # 每轮训练后保存模型
)

# 封装Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset['train'],
    eval_dataset=tokenized_dataset['test'],
    compute_metrics=compute_metrics,
)

# 启动训练
trainer.train()

5. 模型验证与预测

训练结束后,用验证集评估模型效果,如果MAE/MSE太高,可调整学习率、批量大小或训练轮数;效果满意后,就可以加载模型做新句子的评分预测:

# 加载训练好的模型
model = BertForSequenceClassification.from_pretrained('./results/checkpoint-xxx')  # 替换成你的 checkpoint 路径

# 预测单句
def predict_score(sentence):
    inputs = tokenizer(sentence, return_tensors='pt', truncation=True, padding='max_length', max_length=128)
    outputs = model(**inputs)
    return outputs.logits.item()  # 取出预测的分数

# 测试
print(predict_score("测试句子"))

入门教程推荐

  • HuggingFace官方文本回归任务示例:跟着官方提供的完整代码流程走,把示例里的数据集换成你自己的,重点理解每一步的作用,不用纠结底层原理,先跑通整个流程。
  • 国内视频平台的BERT微调实战(回归任务):找那种一步一步敲代码的视频,跟着操作,遇到报错能直观看到调试方法,比纯文字教程更容易上手。
  • 《HuggingFace Transformers自然语言处理实战》书籍:里面有详细的代码解释和任务拆解,适合有理论基础但实操薄弱的人,能帮你理清每个环节的逻辑。

实操避坑提醒

  • 先从bert-base-uncased这个最小的基础BERT模型开始,跑通流程比追求大模型效果更重要,等熟悉后再尝试bert-large-uncased这类大模型。
  • 如果显存不足,把per_device_train_batch_size调小,或者设置gradient_accumulation_steps=2(累积梯度,相当于变相增大批量),也可以加device_map='auto'让模型自动分配到CPU和GPU。
  • 训练时如果出现过拟合(验证集指标越来越差),可以提前停止训练(在TrainingArguments里设置early_stopping_patience=2),或者增加数据量。

内容的提问来源于stack exchange,提问作者Lukas W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 04:45:32