NLP之新闻文本分类——Task4

Task4——基于深度学习的文本分类fasttext

1.文本表示方法

现有文本表示方法的缺陷:
在上一章节,我们介绍几种文本表示方法:
One-hot、Bag of Words、N-gram、TF-IDF
但上述方法都或多或少存在一定的问题:转换得到的向量维度很高,需要较长的训练实践;没有考虑单词与单词之间的关系,只是进行了统计。

与这些表示方法不同,深度学习也可以用于文本表示,还可以将其映射到一个低纬空间。其中比较典型的例子有:FastText、Word2Vec和Bert。

这一次主要使用fasttext来进行文本分类,有几篇介绍fasttext及其他深度学习文本表示模型的文章,讲的比较不错:
fasttext原理及实践
fasttext源码分析

2.使用fasttext进行分类&参数讲解

import pandas as pd
from sklearn.metrics import f1_score
import fasttext

# 将数据转化为FastText需要的格式
train_df = pd.read_csv('train_set.csv', sep='\t', nrows=15000)
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')

# supervised参数解析
model = fasttext.train_supervised('train.csv', lr=1.0, wordNgrams=2,
                                  verbose=2, minCount=1, epoch=25, loss="hs")
# lr:学习率
# wordNgrams:n-gram设置
# minCount:最低出现的词频
# loss:损失函数(ns, hs, softmax)

# 利用模型进行预测计算
val_pred = [model.predict(x)[0][0].split('__')[-1] for x in train_df.iloc[-5000:]['text']]
# 计算指标f1_score值
print(f1_score(train_df['label'].values[-5000:].astype(str), val_pred, average='macro'))

训练结果展示:
在这里插入图片描述
这里有更为详细的fasttext中各个方法参数的解释,对于调用来说应当是足够的:
fasttext参数说明

3.实例训练
这里推荐一个找到的比较适合练习的小栗子~~
Python3 使用fastText进行文本分类 新闻分类

猜你喜欢

转载自blog.csdn.net/DZZ18803835618/article/details/107597911