如何在CNN文本分类的训练与评估中匹配分类标签?
问题分析与解决方案
兄弟,你这里踩了一个很典型的坑——用同一个VocabularyProcessor同时处理输入文本X和分类标签y,这完全搞错了两者的核心用途!文本输入和标签的词汇空间是完全独立的,这么做会导致标签被错误映射到文本词汇的索引,彻底打乱分类逻辑,模型根本学不到正确的分类边界。
下面给你梳理正确的处理流程和代码调整方案:
一、标签处理的正确姿势:别用VocabularyProcessor
分类标签是离散的类别标识,和自然语言词汇完全不是一回事,应该用专门的标签编码工具:
方案1:用LabelEncoder+OneHotEncoder(Sklearn)
from sklearn.preprocessing import LabelEncoder, OneHotEncoder import numpy as np # 第一步:把文本标签转成整数索引(比如"cat"→0,"dog"→1,"bird"→2) label_encoder = LabelEncoder() y_int = label_encoder.fit_transform(y_text) # 第二步:把整数索引转成独热编码(适配多分类的输出格式) onehot_encoder = OneHotEncoder(sparse=False) y_onehot = onehot_encoder.fit_transform(y_int.reshape(-1, 1))
方案2:用Keras的to_categorical(更简洁)
如果后续用Keras搭模型,直接用这个工具一步到位:
from sklearn.preprocessing import LabelEncoder from keras.utils import to_categorical # 先转整数索引 y_int = LabelEncoder().fit_transform(y_text) # 再转独热编码,指定分类数量N y_onehot = to_categorical(y_int, num_classes=N)
二、VocabularyProcessor只用来处理输入文本
这个工具的作用是把自然语言句子转换成基于词汇表的数字序列,只应该拟合和转换输入文本x_text:
from tensorflow.contrib.learn.python.learn.preprocessing import VocabularyProcessor # 设定句子的最大长度(统一输入维度) max_sentence_length = 100 # 初始化词汇处理器 vocab_processor = VocabularyProcessor(max_sentence_length) # 仅拟合输入文本的词汇,生成词汇表后转换X X = np.array(list(vocab_processor.fit_transform(x_text)))
三、CNN模型的多分类适配调整
原来的二分类模型输出是sigmoid激活,现在要改成多分类对应的softmax,损失函数也要同步修改:
from keras.models import Sequential from keras.layers import Dense, Conv1D, GlobalMaxPooling1D, Embedding # 搭建多分类CNN模型示例 model = Sequential() # 嵌入层(根据你的词汇表大小调整input_dim) model.add(Embedding(input_dim=len(vocab_processor.vocabulary_), output_dim=128, input_length=max_sentence_length)) # 卷积+池化层 model.add(Conv1D(filters=128, kernel_size=5, activation='relu')) model.add(GlobalMaxPooling1D()) # 多分类输出层:N个类别,用softmax激活 model.add(Dense(N, activation='softmax')) # 编译模型:损失函数用categorical_crossentropy(对应独热编码的y) model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
如果不想转独热编码,也可以用sparse_categorical_crossentropy作为损失函数,直接传入整数索引格式的y_int,省去独热编码步骤。
内容的提问来源于stack exchange,提问作者sparkdoo
相关产品推荐
相关产品推荐

