首页 > 解决方案 > 结合文本和结构化数据时,Keras 函数式 API 的结果很差

问题描述

我有一组与每条记录相关的结构化特征(仅获得约 0.70 的准确度)和一个文本字段(仅获得约 0.85 的准确度)。我开发了一个分类模型,它使用 Keras 功能 API 接受结构化和文本数据,但混合模型的性能远低于仅基于文本数据的模型:

input_st = Input(shape=(447))
dense_layer_1 = Dense(50, activation='relu')(input_st)
dense_layer_2 = Dense(50, activation='relu')(dense_layer_1)
dense_layer_3 = Dense(50, activation='relu')(dense_layer_2)
dense20_st = Dense(20, activation='relu')(dense_layer_3)
    
    
max_len = max([len(s.split()) for s in X_nt_train])   
tokenizer = Tokenizer()  
tokenizer.fit_on_texts(X_nt_train)   
vocab_size =len(tokenizer.word_index) + 1   
X_train_encoded = tokenizer.texts_to_sequences(X_nt_train)   
X_test_encoded = tokenizer.texts_to_sequences(X_test_nt_skewed)   
X_train_padded = pad_sequences(X_train_encoded, maxlen=max_len,padding='post')   
X_test_padded = pad_sequences(X_test_encoded, maxlen=max_len, padding='post')
    
inputs_note = Input(shape=(max_len,))   
embedding1 = Embedding(vocab_size, 100)(inputs1)   
conv1 = Conv1D(filters=64,kernel_size=1, activation='relu')(embedding1)   
drop1 = Dropout(0.5)(conv1)   
pool1 =layers.GlobalMaxPool1D()(drop1)

merged = concatenate([dense20_st,pool1 ])  dense_1 = Dense(10,activation='relu')(merged)  
output = Dense(1, activation='sigmoid')(dense_1)

model = Model(inputs=[input_st, inputs_note], outputs=output)  
model.compile(loss='binary_crossentropy', optimizer='adam',metrics=['acc'])

我尝试了几种方法将结构化子模型的结果与文本子模型的结果结合起来(结合输出向量、结合输出概率、结合扁平输出、不同的激活函数……),但没有一个得到结果甚至与仅基于文本模型的模型一样好。任何想法?

标签: kerastextclassificationmixedfunctional-api

解决方案


推荐阅读