深度学习多标签文本分类分词时出现str与int比较的TypeError如何解决
错误原因
TypeError: '>=' not supported between instances of 'str' and 'int'
报错出现在tokenizer.sequences_to_matrix()调用阶段,你搞混了Tokenizer的调用顺序:sequences_to_matrix()的输入必须是已经转为整数索引序列的文本数据,但你现在传入的X_train、X_test还是原始的字符串格式文本,方法内部做数值比较的时候拿字符串和int做对比,直接触发类型错误。
同时你对标签的处理也有问题:多标签分类任务不需要调用keras.utils.to_categorical()做转换,这个方法是给单标签多分类任务做onehot编码用的,多标签场景直接用原始的0/1标签矩阵即可。
修复步骤
- 先调用
fit_on_texts()让Tokenizer学习训练集语料的词汇表 - 再调用
texts_to_sequences()把字符串格式的文本转为整数索引序列 - 最后调用
sequences_to_matrix()生成二进制特征矩阵 - 删除标签的
to_categorical()转换逻辑
修改后的对应代码段
tokenizer = Tokenizer(num_words=50000) # 学习训练集词汇表 tokenizer.fit_on_texts(X_train) # 文本转整数序列 X_train_seq = tokenizer.texts_to_sequences(X_train) X_test_seq = tokenizer.texts_to_sequences(X_test) # 用整数序列生成特征矩阵 X_train = tokenizer.sequences_to_matrix(X_train_seq, mode='binary') X_test = tokenizer.sequences_to_matrix(X_test_seq, mode='binary') # 删掉原有的to_categorical相关代码,多标签任务直接使用原始的label_train、label_test即可
内容的提问来源于stack exchange,提问作者hideonbush
相关产品推荐
相关产品推荐

