微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

结合文本和结构化数据时,Keras 函数式 API 效果不佳

如何解决结合文本和结构化数据时,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,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'])

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。