基于Word2Vec词嵌入和双向长短时记忆网络的文本分类实现

2020-02-02 06:46王玲
电子技术与软件工程 2020年15期
关键词:词频语料梯度

王玲

(广东邮电职业技术学院 广东省广州市 510630)

文本分类是指对文本集按照一定的分类体系或标准进行自动分类标记。主要应用于信息检索、垃圾文本过滤、舆情检测、情感分析等领域,一直是自然语言处理领域的研究热点。它依据已经被分类标注的文本训练集合,得到文本特征和文本类别之间的关系模型,然后利用这种通过学习得到的模型对新的文本进行类别判断。现阶段文本分类从基于知识的方法转变为基于统计和机器学习的方法。

当前文本分类主要面对的是两方面问题:

(1)文本表示问题,即怎样高质量的实现词语的向量表达;

(2)文本分类的训练模型问题。

本文对常用的模型进行对比的基础上,选择了基于Word2Vec的词嵌入模型的实现,以及基于双向长短期记忆网络(BiLSTM)的文本分类神经网络模型。

1 词嵌入(word embedding)模型选择

文本语料是符号集合,计算机是无法处理符号集合的,词嵌入就是将符号集合中的词(或者更高粒度的句子等)映射为向量。这是NLP 工作中必要的部分。文本的语义表示能力决定着文本表示能力的强弱。

1.1 文本表示技术的主要种类

(1)离散表示,有One-hot 表达、Bag of Words 词袋表达、Tf-Idf 权值向量表达等等,他们各有缺陷,比如One-hot 表达忽略了词频信息,面临着高维困境,并且忽略了词语上下文关联;Tfidf 表达用词频来衡量文章中的一个词的重要性不够全面,而且无法体现词在上下文的重要性。总体上,离散表示方法,存在无法衡量词向量之间的关系、词向量维度膨胀、数据稀疏等缺陷。

(2)神经网络表示,目前最常用的词嵌入模型之一Word2Vec,是谷歌2013年提出的。Word2Vec 词向量是深度学习在自然语言处理领域的应用,它有两种网络结构,分别是连续词袋模型CBOW(Continues Bag of Words)和跳字模型Skip-gram。

CBOW 模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这个特定词的词向量。Skip-Gram 模型和CBOW 的思路相反,即输入是特定的一个词的词向量,而输出的是特定词对应的上下文词向量。

1.2 Word2Vec实现

可以通过gensim、tensorflow、spark 等实现Word2Vec。这里以gensim 为例实现Word2Vec 词嵌入训练。

# 词向量训练

#text 是经过文本预处理的语料(对于中文要首先经过分词,去除停用词、低频词)

#wlen 是词向量上下文的距离设定值

#size 是词向量的维度设定值

w2v_model=Word2Vec(sentences=text,window=win_len,size=wlen,min_count=1)

# 存储所有词语

vocab_list=[word for word,_ in w2v_model.wv.vocab.items()]

# 生成一个全零数组用于后续存储词向量,长度加1,用于表示新词

data=np.zeros([len(vocab_list)+1,w2v_model.vector_size])

for i in range(len(vocab_list)):

data[i+1]=w2v_model.wv[vocab_list[i]]# 存储某个词的词向量

# 将数组转为DataFrame,这里设置一个全零行,用于匹配不存在的新词

data_frame=pd.DataFrame(data,index=['0']+ vocab_list)

# 保存词向量

data_frame.to_csv('embedding_matrix.csv',index=None)

创建Word2Vec 模型时,主要的参数有:

sentences:要训练的语料列表;

window:词向量上下文的距离,默认为5;

size:词向量的维度,默认值是100;

min_count:计算词向量的词语的最小词频,默认是5。如果所有词语都需要参与训练,就设置为1;

sg:如果是0,则是CBOW 模型,是1 则是Skip-Gram 模型,默认是0;

iter:随机梯度下降法中迭代的最大次数,默认是5。语料量大的情况下,可以增大这个值。

可以在计算量和训练效果之间,权衡参数的设置值。

2 文本分类模型训练

2.1 文本分类模型选择

CNN 可以提取句子特征,但缺乏学习顺序相关性的能力。近年来,对时间序列敏感的问题,RNN 比较适合。

循环神经网络(Recurrent Neural Network,RNN)是一种对序列型数据进行建模的深度神经网络模型。比如某个单词的含义会因为上下文的内容不同而不同,RNN 就适合解决这类问题。

但是,在RNN 中,常用的激活函数(sigmoid 函数、tanh 函数),在求梯度的过程中,随着时间序列的不断深入,会导致梯度越来越小直到接近于 0,这就会引起梯度消失现象。梯度消失就意味着那一层的参数再也不更新了,则模型的训练毫无意义。Relu 函数一定程度上可以解决梯度消失的问题,但是容易引起梯度爆炸的问题。

为了避免RNN 模型的缺陷,一种由长短期记忆单元LSTM 组成的RNN(longshort-term memory,LSTM)的循环神经网络架构得到广泛的应用。LSTM 增加了对过去状态的过滤,从而可以选择哪些状态对当前更有影响,而不是简单的选择最近的状态。

LSTM 只能够捕获前向的上下文信息,随着深度学习的发展,可以分别捕获前向和后向的上、下文信息的双向长短期记忆网络(bidirectional long short-tem memory,BiLSTM)出现了,BiLSTM 能得到更好的文本表示。近几年LSTM 和BiLSTM 在文本分类领域取得很多的进展。

2.2 文本分类模型训练

这里基于tensorflow 搭建文本分类的RNN 神经网络模型:

2.3 模型优化

首先,没有进行词嵌入预训练,在Embedding 层,没有设置weights 参数,那么词嵌入权值矩阵则是随机初值。而当用语料中的词语进行单独的预训练之后,将预训练得到的词向量用于此词嵌入层,经过实际对比,采用预训练之后,模型精度显著提升。

模型可以通过调整以下主要参数,进行性能和精度的调整:将词向量预训练的window 增大,可以将更长范围的上下文词语考虑进来,但是并不是越大越好,要根据实际情况进行调整,并且会增加计算量;网络设置,全连接层的个数,每个层的神经元个数。在训练时候,训练集和验证集的占比,增加训练集的占比,使得训练更加充分;将词向量矩阵设为在模型训练过程中是可调试的形式(通过trainable 设置)等。通过调整epochs 和batch_size 参数,控制模型训练过程中的计算负荷。

3 总结

文本分类是自然语言处理领域的研究热点。当前重点侧重在两个方面,一是词向量模型的研究,二是文本分类深度神经网络分类模型的研究。本文采用基于Word2Vec 的词嵌入模型和BiLSTM 双向长短期记忆模型,实现对文本的分类模型训练,以及模型优化,对比其他主要模型,当前选择模型的准确率是相对较高的。

猜你喜欢
词频语料梯度
基于词频分析法的社区公园归属感营建要素研究
一个改进的WYL型三项共轭梯度法
一种自适应Dai-Liao共轭梯度法
一类扭积形式的梯度近Ricci孤立子
基于语料调查的“连……都(也)……”出现的语义背景分析
华语电影作为真实语料在翻译教学中的应用
词频,一部隐秘的历史
云存储中支持词频和用户喜好的密文模糊检索
《苗防备览》中的湘西语料
国内外语用学实证研究比较:语料类型与收集方法