构造数据
在fasttext中,标签使用__label__X的形式表示,text label存为csv。
train_df = pd.read_csv(r"train_set.csv",sep='\t')
train_df['label_ft'] = '__label__' + train_df['label'].astype(str)
train_df[['text','label_ft']].iloc[:-5000].to_csv('train.csv', index=None, header=None, sep='\t')
构建模型
使用上一步生成的csv,输入模型中。
这里使用fasttext包调用模型。
import fasttext
model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2,
verbose=2, minCount=1, epoch=25, loss="hs")
model.save_model("model_fasttext.bin") #模型保存
val_pred = [model.predict(x)[0][0].split('__')[-1] for x in train_df.iloc[-5000:]['text']]
print(f1_score(train_df['label'].values[-5000:].astype(str), val_pred, average='macro')) #输出f1值
训练全量数据,使用fasttext模型预测,输出结果为0.914.
#读取模型 预测结果
model = fasttext.load_model("model_fasttext.bin")
train_test = pd.read_csv(r'test_a.csv', sep='\t')
val_test = [model.predict(x)[0][0].split('__')[-1] for x in train_test['text']]