Datawhale 之NLP学习-打卡(四)
Task4 基于深度学习的文本分类1
1.学习目标
- 学习FastText的使用和基础原理
- 学会使用验证集进行调参
2.文本表示方法Part2
-
现有文本表示方法的缺陷
One-hot、Bag of Words、N-gram、TF-IDF几种文本表示方法存在的问题:转换得到的向量维度很高,需要较长的训练实践;没有考虑单词与单词之间的关系,只是进行了统计。 -
FastText
-
一个三层的神经网络,输入层、隐含层和输出层
-
安装
pip install fasttext
此种方法容易报错,建议去https://www.lfd.uci.edu/~gohlke/pythonlibs/#fasttext 下载第三库安装
-
3.基于FastText的文本分类
-
代码
import pandas as pd from sklearn.metrics import f1_score train_df = pd.read_csv("./{}/train_set.csv".format(file_dir),sep='\t',nrows=15000) train_df['label_ft'] = '__label__' +train_df['label'].astype(str) train_df[['text','label_ft']].iloc[:-5000].to_csv('train_test1.csv', index=None, header=None, sep='\t') import fasttext model = fasttext.train_supervised('train_test1.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'))
-
结果
4.如何使用验证集调参
-
参数
train_supervised参数 解释 input 训练文件路径 lr 学习率 默认为0.1 dim 词向量维度 默认为100 ws(windows size) 窗口大小 默认为5 minCount 最小词数 默认为1 minCountLabel 最小标签数 默认为1 minn 0 maxn 0 neg 负例采样个数 默认为5 wordNgrams 最大的词n-gram长度 默认为1 loss 损失函数【ns、hs、softmax、ova】 默认为softmax bucket 桶数 默认为2000000 thread cpu线程数 默认为12 lrUpdateRate 学习率更新 默认为100 t 负采样阈值 默认为0.0001 label 标签前缀 默认为‘label’ verbose 控制打印输出 2显示每个epoch 1显示最后一个epoch pretrainedVectors 用于监督学习的预训练词向量(.vec文件)给出路径 默认为‘’ -
验证方式
10折交叉验证,每折9/10的数据进行训练,剩余1/10作为验证集检验模型效果