Task 4
今天主要的学习内容是FastText,学习目标:
①学习FastText的使用和基础原理
②学习使用验证集进行调参
FastText原理
Fast Text,是一种典型的深度学习词向量的表示方法,它非常简单通过 Embedding层将单词映射到稠密空间,然后将句子中所有的单词在 Embedding空间中进行平均,进而完成分类操作。Fasttext是一个浅层神经网络,由输入层、隐含层和输出层三层构成。
fasttext.supervised的参数
参数名称 | 参数含义 (默认值) |
---|---|
input_file | 训练文件路径 |
output | 输出文件路径 |
label_prefix | 标签前缀 (__ label __) |
lr | 学习率 (0.1) |
lr_update_rate | 学习率更新速率 (100) |
dim | 训练的词向量维度 (100) |
ws | 上下文窗口大小 (5) |
epoch | epochs 数量 (5) |
min_count | 最低出现的词频 (5) |
word_ngrams | n-gram 设置(1) |
loss | 损失函数 {ns,hs,softmax} (softmax) |
minn | 最小字符长度 (0) |
maxn | 最大字符长度 (0 ) |
thread | 线程数量 (12) |
t | 采样阈值 (0.0001) |
FastText代码
import pandas as pd
from sklearn.metrics import f1_score
import fasttext
# 转换为FastText需要的格式
train_df = pd.read_csv('./data/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')
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'))
训练结果
Read 177M words
Number of words: 6858
Number of labels: 14
Progress: 100.0% words/sec/thread: 755684 lr: 0.000000 avg.loss: 0.091124 ETA: 0h 0m 0s
0.9101101222166211
f1_score达到了0.91
十折交叉验证
十折交叉验证的基本思想是这样的:将数据集分为10等份,对于每一份数据集,其中9份用作训练集,单独的那1份用作测试集。
基于验证集结果调整超参数,使得模型性能更优。