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

运行Hugging Face情感分析模型时Jupyter内核崩溃的原因与解决方法

问题原因与解决方案

核心原因

  • 重复加载模型引发内存溢出:你的predict_sentiment函数里,每处理一条文本就重新加载一次分词器、模型配置和预训练模型。每次加载都会占用新的内存空间,20条样本时内存消耗还在阈值内,但200条循环下来,大量冗余的模型实例会把内存撑爆,直接导致Jupyter内核崩溃。

解决方法

1. 提前初始化模型资源(最关键)

把模型、分词器、配置的加载逻辑移到函数外面,只初始化一次,循环处理时复用这些资源,彻底避免重复加载的内存浪费。

2. 可选:批量处理优化效率

如果后续数据量更大,建议将文本批量传入模型处理,减少模型调用次数,进一步降低内存占用并提升速度。

修改后的代码

import warnings
from transformers import AutoModelForSequenceClassification, AutoTokenizer, AutoConfig
import numpy as np
import pandas as pd
from scipy.special import softmax
from transformers import logging
logging.set_verbosity_error()

# 提前加载模型、分词器、配置,只执行一次
MODEL = "cardiffnlp/twitter-roberta-base-sentiment-latest"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
config = AutoConfig.from_pretrained(MODEL)
model = AutoModelForSequenceClassification.from_pretrained(MODEL)

# Example DataFrame
df = pd.DataFrame({'text': ['This movie is great!', 'I watched insidious', 'Happy this movie!', 'I feel bored.', 'The weather is nice.', np.nan]})

def predict_sentiment(text):
    if pd.isna(text):
        return 'N/A' 
    encoded_input = tokenizer(text, return_tensors='pt')
    output = model(**encoded_input)
    scores = output.logits[0].detach().numpy()
    scores = softmax(scores)
    ranking = np.argsort(scores)
    ranking = ranking[::-1]
    highest_sentiment = config.id2label[ranking[0]]
    return highest_sentiment

predicted_sentiments = []
for index, row in df.iterrows():
    text = row['text']
    sentiment = predict_sentiment(text)
    predicted_sentiments.append(sentiment)

df['Hugging Face'] = predicted_sentiments
df

额外优化(针对更大数据集)

如果处理数千条以上的样本,建议用批量处理代替逐条循环,示例如下:

# 过滤空值文本
valid_texts = df['text'].dropna().tolist()
# 批量编码文本
encoded_input = tokenizer(valid_texts, padding=True, truncation=True, return_tensors='pt')
# 批量预测
output = model(**encoded_input)
scores = output.logits.detach().numpy()
scores = softmax(scores, axis=1)
# 获取每条文本的最高情感标签
rankings = np.argsort(scores, axis=1)[:, ::-1]
predicted_sentiments = [config.id2label[r[0]] for r in rankings]
# 将结果回填到原DataFrame
df['Hugging Face'] = np.where(df['text'].isna(), 'N/A', predicted_sentiments)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:20:28