与传统机器学习模型不同,深度学习既提供特征提取功能,也可以完成分类功能。
学习目标
在机器学习的文本处理中,常用One-hot、Bag of Words、N-gram、TF-IDF来进行文本分类,并使用了sklearn进行了实践,但这些方法存在着文本转换后向量维度过高,需要较长时间的训练;没有考虑单词间的关系仅进行单词数量的统计等问题;
而在深度学习中,也可以用FastText、Word2Vec和Bert等进行文本处理,并将文本映射到较低维空间。
本文先介绍FastText在文本处理中的应用。
初识FastText
FastText是一种典型的深度学习词向量的表示方法,它通过Embedding层非常简单的将单词映射到稠密空间,然后将句子中所有的单词在Embedding空间中进行平均,进而完成分类操作,因此,TastText是一个三层的神经网络,包含输入层、隐含层和输出层。
FastText在文本分类任务上,是优于TF—IDF的:
基于FastText的文本分类实战
import pandas as pd
from sklearn.metrics import f1_score
#转换为Fast需要的格式
df3=pd.read_csv('D:/DLdata/train_set.csv/train_set.csv',sep='\t',nrows=15000)
df3['label_ft']='__label__'+df3['label'].astype(str)
df3[['text','label_ft']].iloc[:-5000].to_csv('train_copy.csv',index=None,header=None,sep='\t')
import fasttext
model=fasttext.train_supervised('train_copy.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 df3.iloc[-5000:]['text']]
print(f1_score(df3['label'].values[-5000:].astype(str),val_pred,average='macro'))
#0.8221061745439003
train_supervised方法详细介绍
import fasttext import train_supervised训练一个监督模型, 返回一个模型对象。
以下是train_supervised方法的常用参数。
train_supervised(input, lr=0.1, dim=100,
ws=5, epoch=5, minCount=1,
minCountLabel=0, minn=0,
maxn=0, neg=5, wordNgrams=1,
loss=“softmax”, bucket=2000000,
thread=12, lrUpdateRate=100,
t=1e-4, label=“label”,
verbose=2, pretrainedVectors=""):