You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何将微调后的西班牙语RoBERTa模型用于推特情感分析预测?

如何用微调后的西班牙语RoBERTa模型做情感分析预测

嘿,你已经把模型微调得相当出色了——训练准确率一路涨到97%,这结果太赞了!接下来我会一步步教你两种常用的预测方法,帮你给爬取的推特生成情感标签。

第一步:先把模型和Tokenizer一起保存(关键!)

你之前只保存了模型,但Tokenizer是预处理文本必不可少的部分,最好把它和模型存在同一个文件夹里,这样后续加载会非常方便:

from transformers import AutoTokenizer

# 加载训练时用的Tokenizer
tokenizer = AutoTokenizer.from_pretrained("BSC-TeMU/roberta-base-bne")
# 和模型保存在同一个目录下
tokenizer.save_pretrained('Twitter_Roberta_Model')

执行完后,你的Twitter_Roberta_Model文件夹里会有这些文件:config.jsontf_model.h5(模型权重)、tokenizer_config.jsonvocab.json等Tokenizer相关文件,它们都在你当前运行代码的工作目录里(Colab的话默认是/content/Twitter_Roberta_Model)。

方法一:直接用模型进行推理(灵活可控)

这种方法适合需要自定义预处理或后处理逻辑的场景,步骤很清晰:

1. 加载保存的模型和Tokenizer

from transformers import TFAutoModelForSequenceClassification, AutoTokenizer

# 从保存的文件夹加载模型和Tokenizer
loaded_model = TFAutoModelForSequenceClassification.from_pretrained('Twitter_Roberta_Model')
loaded_tokenizer = AutoTokenizer.from_pretrained('Twitter_Roberta_Model')

2. 预处理文本并预测

注意:预处理的参数(paddingtruncationmax_length)必须和你训练时的设置完全一致,否则预测结果会失真。

import tensorflow as tf

# 先定义你的标签映射(要和训练时的类别顺序完全对应!)
# 比如你训练时0=负面,1=中性,2=正面,就这么写
label_mapping = {0: "负面", 1: "中性", 2: "正面"}

# 单条推特预测示例
tweet = "¡Este concierto fue absolutamente espectacular!"

# 预处理文本:转换成模型能接受的张量格式
inputs = loaded_tokenizer(
    tweet,
    return_tensors="tf",  # 返回TensorFlow张量
    padding=True,
    truncation=True,
    max_length=128  # 替换成你训练时用的max_length
)

# 模型输出的是logits(未归一化的分数)
logits = loaded_model(inputs)[0]

# 用softmax把logits转换成概率
probabilities = tf.nn.softmax(logits, axis=1).numpy()[0]

# 找到概率最高的类别ID
predicted_id = tf.argmax(probabilities).numpy()

# 映射到最终标签
predicted_label = label_mapping[predicted_id]

print(f"推特内容: {tweet}")
print(f"预测情感: {predicted_label}")
print(f"各情感概率: {dict(zip(label_mapping.values(), probabilities.round(4)))}")

批量预测多条推特

如果要处理大量爬取的推特,批量处理效率更高:

# 假设这是你爬取的推特列表
tweets = [
    "No me gusta nada este servicio, muy malo.",
    "El nuevo teléfono tiene buenas características pero el precio es alto.",
    "¡Hoy es el mejor día de mi vida!"
]

# 批量预处理文本
batch_inputs = loaded_tokenizer(
    tweets,
    return_tensors="tf",
    padding=True,
    truncation=True,
    max_length=128
)

# 批量预测
batch_logits = loaded_model(batch_inputs)[0]
batch_probabilities = tf.nn.softmax(batch_logits, axis=1).numpy()

# 遍历结果
for idx, tweet in enumerate(tweets):
    predicted_id = tf.argmax(batch_probabilities[idx]).numpy()
    predicted_label = label_mapping[predicted_id]
    print(f"\n推特: {tweet}")
    print(f"预测标签: {predicted_label}")
    print(f"概率分布: {dict(zip(label_mapping.values(), batch_probabilities[idx].round(4)))}")

方法二:用Hugging Face Pipeline(简洁高效)

Pipeline是Hugging Face提供的高层API,能帮你省去很多重复代码,非常适合快速部署:

from transformers import pipeline

# 创建情感分析Pipeline
classifier = pipeline(
    "sentiment-analysis",
    model='Twitter_Roberta_Model',  # 直接用保存的模型文件夹路径
    tokenizer='Twitter_Roberta_Model',
    return_all_scores=True,  # 可选,返回所有类别的概率
    function_to_apply="softmax",  # 把模型输出的logits转换成概率
    labels=["负面", "中性", "正面"]  # 必须和训练时的类别顺序一致!
)

# 单条预测
result = classifier("¡Este concierto fue absolutamente espectacular!")
print(result)

# 批量预测
results = classifier(tweets)
for tweet, res in zip(tweets, results):
    # 找到概率最高的结果
    top_result = max(res, key=lambda x: x['score'])
    print(f"\n推特: {tweet}")
    print(f"预测标签: {top_result['label']},概率: {top_result['score'].round(4)}")

关于你遇到的小疑问

  1. 模型保存位置model.save_pretrained('Twitter_Roberta_Model')会在你当前的工作目录下创建这个文件夹。如果是在Colab里,你可以用!ls命令查看,或者通过左侧文件面板找到它。
  2. 训练时的警告:那些警告是完全正常的——因为你从PyTorch预训练模型转成TensorFlow模型,position_ids这类权重在TensorFlow里不需要,而分类头的权重是新初始化的(这正是微调要做的事),所以不用在意。

内容的提问来源于stack exchange,提问作者LeLuc

火山引擎 最新活动