中移集成首屆OneCity編程大賽Baseline分享

機緣巧合在DC競賽上看到了這個比賽,這個編程比賽正是數(shù)據(jù)類算法比賽,主要是自然語言處理相關的文本多分類任務,老肥我從來沒有學習過這NLP領域相關的知識,正好借這個比賽學習充電,在此分享一個簡單的baseline方案,比賽地址文末閱讀原文即可直達。

賽事介紹
比賽數(shù)據(jù)
Baseline方案
train_df = pd.read_csv('answer_train.csv')
lb = LabelEncoder()
train_df['label'] = lb.fit_transform(train_df['label'])
test_df = pd.read_csv('submit_example_test1.csv')
test_df.drop('label', axis=1, inplace=True)
df = pd.concat([train_df, test_df], axis=0)
df['file'] = df['filename'].apply(lambda x: x.split('.')[0][6:].replace('_', ''))
接著用jieba分詞,并將每個詞進行編號處理,得到vocab詞典。
cw = lambda x: list(jieba.cut(x))
df['words'] = df['file'].apply(cw)
tokenizer=Tokenizer()
tokenizer.fit_on_texts(df['words'])
vocab=tokenizer.word_index
把句子轉換成詞索引序列,并對部分序列進行補長,構造一個簡單的多層卷積神經網絡,使用embedding層將每個詞編碼轉換成詞向量,采取常規(guī)的交叉熵損失、adam優(yōu)化器進行五折交叉驗證,取五折的平均值作為最后測試集的預測概率以保證模型的穩(wěn)定性。
oof = np.zeros(len(X_train))
predictions = np.zeros((len(X_test), 20))
KF = StratifiedKFold(n_splits=5, shuffle=True, random_state=2020)
for fold_, (trn_idx, val_idx) in enumerate(KF.split(X_train.values, y_train.values)):
print("fold n°{}".format(fold_))
print('trn_idx:',trn_idx)
print('val_idx:',val_idx)
X_tr = X_train.iloc[trn_idx]
X_val = X_train.iloc[val_idx]
X_train_word_ids = tokenizer.texts_to_sequences(X_tr)
X_valid_word_ids = tokenizer.texts_to_sequences(X_val)
X_test_word_ids = tokenizer.texts_to_sequences(X_test)
X_train_padded_seqs=pad_sequences(X_train_word_ids,maxlen=30)
X_valid_padded_seqs=pad_sequences(X_valid_word_ids,maxlen=30)
X_test_padded_seqs=pad_sequences(X_test_word_ids, maxlen=30)
y_tr = y_train.iloc[trn_idx]
y_tr = keras.utils.to_categorical(y_tr, num_classes=20)
y_val = y_train.iloc[val_idx]
y_val = keras.utils.to_categorical(y_val, num_classes=20)
model = NN()
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy'])
model.fit(X_train_padded_seqs, y_tr, epochs=50, batch_size=1024, validation_data=(X_valid_padded_seqs, y_val), callbacks=[ES])
oof[val_idx] = model.predict_classes(X_valid_padded_seqs)
temp = model.predict_proba(X_test_padded_seqs)
predictions[:] += temp
最終該baseline方案可以獲得超過0.96的線上分數(shù)。顯然,改進的方案有很多,我們可以采用出色的文本分類模型來改進準確率,也可以通過使用表格文件的文本內容來增強模型的學習能力與泛化能力以提升準確率。
完整的代碼我已經上傳,在后臺回復「baseline」即可。
——END——
掃碼二維碼
獲取更多精彩
老肥碼碼碼
評論
圖片
表情


