天池NLP新闻文本分类学习赛心得-Task4

天池NLP新闻文本分类学习赛心得-Task4

赛题链接:https://tianchi.aliyun.com/competition/entrance/531810/introduction


对文本类数据分类不仅可以用传统机器学习,也可以用深度学习。通过sklearn实践通过机器学习对文本数据进行分类,或多或少有点点缺陷,而深度学习既能够提供特征提取功能,也可以完成分类功能。

  • Fasttext
    模型犹如名字一样,非常简单通过Embedding层将单词映射到稠密空间,学习到的Embedding空间维度比较低,可以快速训练,将句子中所有的单词在Embedding空间中进行平均,进而完成分类操作。
    Fasttext模型:
    xin41
    使用fasttext训练:
import pandas as pd
import fasttext
from sklearn.metrics import f1_score

# 之前将训练集存为pickle格式,较快的读取
train_df = pd.read_pickle('train_set.pkl')

# 剔除在所有文本中出现频次较多的字符,可能为标点,符号无实际意义
train_df['text_unique'] = train_df['text'].apply(lambda x: ' '.join(list(set(x.split(' ')))))
all_lines = ' '.join(list(train_df['text_unique']))
word_count = Counter(all_lines.split(' '))
word_count = sorted(word_count.items(), key=lambda x: int(x[1]), reverse=True)
word_count = [(k, int(round(v/train_df.shape[0]*100,0))) for k, v in word_count]
word_count10 = [k for k, v in word_count if v >= 85]
word_delete = '|'.join([f'({i})( )?' for i in word_count10])
train_df2['text2'] = train_df2['text'].str.replace(f"{word_delete}",'')

# 另存为一个副本数据框
train_df3 = train_df2[['label','text2']].rename(columns={'text2':'text'})

# 转换为 Fasttext 需要的格式
train_df3['label_ft'] = '__label__' + train_df3['label'].astype(str)
train_df3[['text','label_ft']].iloc[:-5000].to_csv('train_fast.csv', index=None, header=None,sep='\t')

# 训练
model = fasttext.train_supervised('train_fast.csv', lr=1.0, dim=300, wordNgrams=2, verbose=2, minCount=1, epoch=30, loss='hs', bucket=2000000)

# 验证
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得分:
xin42


我不知道是不是电脑太次了,明明是个fasttext,训练起来应该要比TF-IDF快吧,每次训练都耗费了半个小时,结果也比较一般般。或许是我急于求成,应该先小样本训练的有比较好的结果再进行增数据,先这样,等之后再次使用fasttext时再来更新。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值