使用Spacy词向量实现预测的正确方式及相关技术疑问
假新闻标题分类:两个问题的解决方案
1. 如何对新句子进行预测
现有代码仅完成了训练与测试集评估,要对新句子做预测,需要复刻训练时的文本向量生成→特征缩放→模型预测完整流程,具体步骤如下:
- 用训练阶段加载的spaCy模型处理新句子,生成对应向量
- 用训练集拟合好的
MinMaxScaler对向量做缩放(必须复用训练时的scaler,不能重新拟合) - 用训练好的分类器完成预测,最后将数值标签转回原分类(Fake/Real)
直接在现有代码末尾添加以下预测逻辑即可:
import numpy as np def predict_fake_real(new_text): # 生成新句子的向量 doc = nlp(new_text) text_vector = doc.vector # 转换为2D数组(scaler要求输入为二维格式) vector_2d = text_vector.reshape(1, -1) # 用训练好的scaler做特征缩放 scaled_vector = scaler.transform(vector_2d) # 预测数值标签并转回原分类 pred_label_no = clf.predict(scaled_vector)[0] return "Real" if pred_label_no == 1 else "Fake" # 测试示例 test_sentence1 = "White House Announces New Climate Change Initiative" test_sentence2 = "Alien Invasion Confirmed by Secret Government Documents" print(predict_fake_real(test_sentence1)) print(predict_fake_real(test_sentence2))
注意:nlp、scaler、clf三个对象必须是训练完成后的状态,不能重新初始化。如果需要离线复用模型,可使用joblib将scaler和分类器保存到本地文件。
2. doc.vector和doc.vector.values的区别
核心结论:spaCy的Doc对象的vector属性本身就是numpy.ndarray类型的数值数组,不存在.values这个属性——.values是pandas Series/DataFrame专属的属性,用于提取底层的numpy数组集合,和spaCy的向量生成逻辑无关。
你没发现差异的原因是:代码里正确使用了doc.vector生成向量,而没有尝试错误的doc.vector.values(如果写后者会直接触发AttributeError)。教程中的说法大概率是笔误,混淆了pandas的操作逻辑(比如提取Series中所有向量时会用到df.Text_vector.values)和spaCy的向量调用方式。
简单总结:
doc.vector:正确用法,直接获取spaCy生成的句子向量(numpy数组)doc.vector.values:错误用法,numpy数组无此属性,会引发报错
内容的提问来源于stack exchange,提问作者Mira
相关产品推荐
相关产品推荐

