运行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
相关产品推荐
相关产品推荐

