Keras NLP分类模型predict函数问题:输入单句返回多预测数组
Keras NLP分类模型返回单token分类而非句子分类的解决方法
核心问题:输入维度不符合模型要求
你输入的np.array([1,2])是一维数组,Keras会把每个token当成独立的单token样本处理,因此输出对应每个样本(每个token)的分类结果。而句子分类模型要求输入为二维数组,形状是(样本数量, 序列长度)——第一个维度代表待预测的句子数量,第二个维度代表单句的token长度。
输入格式修正方案
给输入增加一个维度,明确表示这是1个包含2个token的句子样本:
toPredict = np.array([[1,2]]) # 形状变为(1, 2),对应1个样本、序列长度2 prediction = self.model.predict(toPredict) print(prediction)
修正后输出会是(1, 4)形状的数组,对应整个句子的单一分类结果。
额外验证:模型结构是否正确
如果输入修正后仍未得到预期结果,需确认模型最后一层做了句子级特征聚合:
- 不能直接在返回序列的循环层(比如
LSTM(..., return_sequences=True))后接分类Dense层,否则会输出每个token的分类结果。 - 必须添加全局池化层(如
GlobalAveragePooling1D或GlobalMaxPooling1D),把序列特征聚合为句子级特征,再连接分类层。示例结构:
from keras.models import Sequential from keras.layers import Embedding, LSTM, GlobalAveragePooling1D, Dense model = Sequential() model.add(Embedding(input_dim=你的词汇表大小, output_dim=128, input_length=你的最大序列长度)) model.add(LSTM(64, return_sequences=True)) model.add(GlobalAveragePooling1D()) # 聚合整个序列的特征 model.add(Dense(4, activation='softmax')) # 输出句子的4分类结果
内容的提问来源于stack exchange,提问作者Dan Roberts
相关产品推荐
相关产品推荐

