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

使用Streamlit部署情感分析模型时遭遇ValueError问题求助

使用Streamlit部署情感分析模型时遭遇ValueError问题求助

嘿,我完全懂你这种摸不着头脑的感觉——明明严格照着训练时的流程来做,怎么放到Streamlit里就跑不通了呢?别着急,我帮你揪出代码里的几个关键问题:

问题根源分析

  1. TF-IDF向量器不匹配:你在部署代码里重新初始化了TfidfVectorizer并调用fit_transform(Xtrain),这会生成一个和训练模型时完全不同的词汇表!训练好的模型只认识它训练时用的那个TF-IDF向量器生成的特征,新拟合的向量器特征维度、词汇对应关系都变了,自然会预测失败。
  2. 输入格式错误:Streamlit的st.text_input返回的是单个字符串,直接传给tf.transform()的话,它会把字符串的每个字符当成一个独立样本来处理,这显然不是你想要的,维度完全对不上。

修复后的代码

先确保你在训练模型的时候,把当时用的TF-IDF向量器也保存下来了(训练阶段要加这行):

# 训练阶段执行的保存步骤(你之前可能漏了这个)
joblib.dump(tf, 'tfidf_vectorizer.pkl')

然后修改你的Streamlit部署代码:

import streamlit as st
import numpy as np
import pickle
from sklearn.svm import LinearSVC
from sklearn.feature_extraction.text import TfidfVectorizer
import joblib
import pandas as pd

# 这里只需要加载保存好的模型和TF-IDF向量器,不需要重新加载数据集拟合!
model = joblib.load('model.pkl')
tf = joblib.load('tfidf_vectorizer.pkl')  # 加载训练时用的向量器

st.title('Analisis Sentimen')
txt = st.text_input('masukkan teks yang ingin dianalisis')

# 只有当用户输入文本后才执行预测,避免空输入报错
if txt:
    # 把单个字符串转成列表,符合TF-IDF transform的输入要求
    txt_input = [txt]
    # 用训练好的向量器转换输入文本,不需要转成DataFrame
    txt_vector = tf.transform(txt_input)
    # 直接用向量预测
    pred = model.predict(txt_vector)
    print(pred)
    st.write(pred)

额外说明

  • 为什么不需要重新加载数据集?因为训练时的TF-IDF向量器已经保存了所有需要的词汇信息,部署时不需要再碰训练数据,既节省资源又避免引入不一致性。
  • 加个if txt:判断是为了防止用户还没输入文本就触发预测,导致空输入的错误。

这样修改后,应该就能正常运行啦!

备注:内容来源于stack exchange,提问作者krsnbcd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:15:27