酒店评论评分预测模型准确率测试代码无报错不执行问题咨询
酒店评论评分预测模型准确率计算段无响应问题
问题背景
- 开发基于酒店评论预测用户评分的模型过程中,所有前置代码运行正常,但执行最终准确率计算代码段时,程序无任何报错提示,持续挂起无输出,无法定位问题点。
- 数据集包含两类字段:整数类型的评分标签、字符串类型的评论文本,已确认所有文本数据均为
str类型。
已完成的前置工作
- 小样本功能验证:手动初始化
CountVectorizer对训练评论做向量化,初始化LogisticRegression完成训练后,单条样本预测可正常输出实际类别与预测类别结果,基础逻辑跑通。 - 数据集拆分:调用
train_test_split对分词后的tokens与对应评论标签做拆分,设置测试集占比0.2、random_state=2。 - 封装了两个工具函数:
train_model:入参为训练评论数据、训练标签,内部先将分词后的训练文本拼接为完整字符串,初始化CountVectorizer后调用fit_transform生成训练文本稀疏矩阵,初始化LogisticRegression完成训练,返回训练好的model与vectorizer。predict:入参为测试评论数据、训练好的vectorizer、训练好的model,内部先将分词后的测试文本拼接为完整字符串并打印,调用vectorizer.transform生成测试文本稀疏矩阵,调用model.predict得到预测结果返回。
触发异常的代码段
model,train_countvect = train_model(X_train,y_train) #Predict labels for test set y_pred = predict(X_test,train_countvect,model) print("Accuracy:",metrics.accuracy_score(y_test, y_pred))
排查与修复方案
按优先级从高到低排查:
优先检查文本拼接逻辑错误
这是该类无报错挂起问题的最高频诱因:当前函数内的拼接逻辑是把整个数据集的所有分词结果一次性拼接成1个超长字符串,而非逐样本拼接为「单条评论对应一个拼接后字符串」的等长列表。当全量数据量较大时,处理这个超长字符串会直接占满可用内存,触发系统层面的进程阻塞,不会抛出Python层报错,外在表现就是程序无响应。
正确的拼接写法参考:# 错误写法:将全量样本拼成单个字符串 # all_train_str = ' '.join([token for sample in X_train for token in sample]) # 正确写法:逐样本拼接,输出长度和样本数一致的文本列表 train_str_list = [' '.join(sample_tokens) for sample_tokens in X_train] test_str_list = [' '.join(sample_tokens) for sample_tokens in X_test]拼接完成后可以先打印
len(train_str_list),确认返回值和X_train的样本数完全一致。检查逻辑回归模型收敛状态
小样本训练时模型可以快速收敛,但全量数据下如果CountVectorizer生成的特征维度高、数据分布分散,模型默认的max_iter=100迭代次数不足,会导致训练阶段长时间迭代无法收敛,看起来和程序挂起表现一致。可以在初始化逻辑回归模型时显式调高迭代次数,同时开启训练日志观察进度:model = LogisticRegression(max_iter=1000, verbose=1)加行级日志定位阻塞点
如果上述两个问题修复后仍有异常,在代码段每一步前后加打印语句,精准定位阻塞位置:print("[Step 1] 开始训练模型") model, train_countvect = train_model(X_train, y_train) print("[Step 2] 模型训练完成,开始测试集预测") y_pred = predict(X_test, train_countvect, model) print("[Step 3] 预测完成,开始计算准确率") print("Accuracy:", metrics.accuracy_score(y_test, y_pred))
内容的提问来源于stack exchange,提问作者Mariangel Ibarra
相关产品推荐
相关产品推荐

