Task4 基于深度学习的文本分类1
学习目标
学习FastText的使用和基础原理
学会使用验证集进行调参
文本表示方法 Part2
现有文本表示方法的缺陷
在上一章节,我们介绍几种文本表示方法:
One-hot
Bag of Words
N-gram
TF-IDF
也通过sklean进行了相应的实践,相信你也有了初步的认知。但上述方法都或多或少存在一定的问题:转换得到的向量维度很高,需要较长的训练实践;没有考虑单词与单词之间的关系,只是进行了统计。
与这些表示方法不同,深度学习也可以用于文本表示,还可以将其映射到一个低纬空间。其中比较典型的例子有:FastText、Word2Vec和Bert。在本章我们将介绍FastText,将在后面的内容介绍Word2Vec和Bert。
FastText
FastText是一种典型的深度学习词向量的表示方法,它非常简单通过Embedding层将单词映射到稠密空间,然后将句子中所有的单词在Embedding空间中进行平均,进而完成分类操作。
基于FastText的文本分类
pip安装
pip install fasttext
其他安装方法:
对应的链接是:https://www.lfd.uci.edu/~gohlke/pythonlibs/#fasttext
里面有Python的各种第三方安装包。
因为当前python是32位,所以选择了 fasttext-0.9.2-cp38-cp38-win32.whl
cmd进入当whl文件所在的文件夹下,然后
pip install fasttext-0.9.2-cp38-cp38-win32.whl
分类模型
import pandas as pd
from sklearn.metrics import f1_score
train_df = pd.read_csv(’…/input/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’)
import fasttext
model = fasttext.train_supervised(‘train.csv’, lr=1.0, wordNgrams=2,
verbose=2, minCount=1, epoch=25, loss=“hs”)
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’))
如何使用验证集调参
在使用TF-IDF和FastText中,有一些模型的参数需要选择,这些参数会在一定程度上影响模型的精度,那么如何选择这些参数呢?
通过阅读文档,要弄清楚这些参数的大致含义,那些参数会增加模型的复杂度
通过在验证集上进行验证模型精度,找到模型在是否过拟合还是欠拟合