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

如何迭代DataFrame的final_tweet列,用预训练模型批量实现情感分析

问题原因

你之前的代码存在两个核心问题:

  1. 直接传入pandas的Series列时,没有设置截断、填充参数,tokenizer无法处理长度不一致的文本序列,会直接报错
  2. 输出结果取output[0][0]仅能获取单条文本的预测分数,不匹配批量输入的输出维度,无法拿到所有样本的结果
方案1:小数据集逐行处理

如果你的数据集规模不大(万条以内),直接用apply逐行调用单条推理逻辑即可,代码改动最小:

import pandas as pd

def get_sentiment(text):
    encoded_input = tokenizer(text, return_tensors='pt', truncation=True, max_length=512)
    output = model(**encoded_input)
    scores = output[0][0].detach().numpy()
    scores = softmax(scores)
    # 获取最高置信度的情感分类和对应分数
    ranking = np.argsort(scores)[::-1]
    top_label = config.id2label[ranking[0]]
    top_score = round(float(scores[ranking[0]]), 4)
    # 若需要返回三类情感的全部分数,可修改return为 [round(float(scores[0]),4), round(float(scores[1]),4), round(float(scores[2]),4)] 对应negative/neutral/positive
    return top_label, top_score

# 给原数据集新增两列存储情感结果
df[['sentiment_label', 'sentiment_score']] = df['final_tweet'].apply(lambda x: pd.Series(get_sentiment(x)))
方案2:大数据集批量高效处理

如果数据量较大,建议分批次输入模型,减少IO开销提升推理速度:

from tqdm import tqdm

text_list = df['final_tweet'].tolist()
batch_size = 16 # 可根据你的显存大小调整批次大小
sentiment_labels = []
sentiment_scores = []

for i in tqdm(range(0, len(text_list), batch_size)):
    batch_text = text_list[i:i+batch_size]
    # 批量编码,统一开启填充和截断
    encoded_input = tokenizer(
        batch_text, 
        return_tensors='pt', 
        padding=True, 
        truncation=True, 
        max_length=512
    )
    output = model(**encoded_input)
    # 按行计算softmax,得到批次内所有样本的情感分数
    batch_scores = softmax(output[0].detach().numpy(), axis=1)
    # 处理批次内每条样本的结果
    for s in batch_scores:
        ranking = np.argsort(s)[::-1]
        sentiment_labels.append(config.id2label[ranking[0]])
        sentiment_scores.append(round(float(s[ranking[0]]), 4))

# 把结果写入原数据集
df['sentiment_label'] = sentiment_labels
df['sentiment_score'] = sentiment_scores

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:27:03