【python 走进NLP】机器学习和深度学习情感分类模型

一、基于机器学习的情感分类模型

主要分为 3 个步骤:文本预处理,文本向量化,训练分类器。

1、文本预处理:
语料中有很多的噪声信息, 比如 HTML 标签、英文字母,特殊字符等,需要对原始语料做清洗工作,去噪、分词、去除停用词等,至此文本预处理步骤完成。

2、文本向量化:
文本向量化也称为特征提取或者特征工程。特征提取的方法可以分为两类: 手工设计和训练获得。手工设计的特征通常有:文档频率(DF)、信息增益(IG)、互信息(MI)、卡方统计(CHI)、TF-IDF 等。这些方法依赖于人工的设计,受人为因素的影响,推广能力差,在某一领域表现优秀的特征不一定在其他领域也表现优秀。所以在选择通过语料训练得到的特征。实验中使用谷歌开源的工具包 gensim.word2vec 来提取文本的特征,使得文本向量化。

3、训练分类器:
机器学习中常用的分类器包括 k 近邻算法(KNN),逻辑回归(Logistics)、随机森林 (RF)、支持向量机(SVM)等。在实验中对比各种分类器后,发现 SVM 的表现更好。

二、基于 CNN_word_level 情感分类模型。

深度学习模型在计算机视觉和语音识别两大领域已经取得了显著的结果,在自然语言处理领域,基于深度学习模型的研究工作已经涉及了通过神经语言模型学习词向量的表示和在训练好的词向量上组合特征用于分类任务。卷积神经网络(CNN)利用可以提取局部特征的卷积层,起初设计用来处理计算机视觉问题的 CNN 模型已经逐渐被证明在 NLP 领域同样有效,并且在语义分析,搜索查询检索,句子模型,和其他 NLP 任务上已经取得了相当好的结果。

1、词表构建:

因为训练的是中文语料,需要做分词的预处理,然后根据训练语料的分词结果构建词表。训练时,输入语料查找每个词在词表中的位置,映射为数值输入。比如上图中,“非常”在词表中的索引值是 45,则在输入训练的时候映射为 45。这步可以通过 Tensorflow 中的 VocabularyProcessor() 和 embedding_lookup() 函数实现。

2、Embedding layer:
如上图所示,Embedding layer 由句子中每个词的词向量组成的 N×K 维的矩阵作为输入,其中 K 为词向量的维度,N 表示最长的句子的长度,实验中使用 K=64。因为卷积神经网络需要固定大小的输入,所以对于长度不足 N 的句子,用 0 填充。这个矩阵的类型可以是动态的(static),也可以是静态的 (non_static)。静态的就是词向量是固定不变的,而动态则是在模型训练的过程中,词向量可做优化的权重,通过反向传播算法来调整参数。可以看出动态调整参数把 two stage 的问题转化为了 one stage 问题,不需要单独去做文本向量化的工作,而且词向量直接和分类误差联系在一起,可以提高准确率。

3、卷积层:
在 Embedding 的基础上,通过卷积操作得到特征图(Feature Map)。在实验中使用了 3 种不同大小的卷积核。不同于处理图像时卷积核都是正方形的,比如 3×3,5×5,7×7,使用的卷积核大小分别为 3×K,4×K,5×K, 这是因为每个词的维度是 K, 进行卷积操作时,感受野应该包括整个词的大小,所以卷积核的宽度为 K, 不同高度的卷积核考虑不同词之间的联系,比如高度为 5,则考虑到前后 5 个词之间的关系。使用不同大小的卷积核提取到的特征更丰富。对于每一种大小卷积核都使用 128 个,每一个卷积核通过与输入层卷积得到一个 Feature Map,在 NLP 中也称为文本特征,所以最后卷积层的输出为 300×N×1。

4、池化层:
在卷积层之后使用最大池化层操作(maxpooling),即从一维的特征图中选择一个最大值,最大值代表着最重要的信号。最后将池化后的值拼接为一个一维向量作为下一层的输入。

5、全连接层 +sofmax:
池化层输出的一维向量通过全连接的方式连接一个 sofmax 分类器。本文研究的情感分析主要分为三个类别(正,负,中)。故全连接层有三个神经元。在全连接层中使用 Dropout 防止过拟合,并在全连接层上加 L2 正则化参数。

三、基于 CNN_character_level 情感分类模型

CNN_character_level 的情感分类模型和 word_level 的模型结构是相似的。
都是使用 CNN 的思想来做情感的分类。不过在实施细节上面有一些不同。第一,在建立词表的过程中,chareter_level 模型并不对原始语料做分词处理,而是直接对语料分字处理,根据字符建立字符表,然后根据查找字符表来获得语料的数字化表示。第二,在卷积核的使用上,charater_level 只使用了 5×K 大小的一种卷积核,因为基于字符处理,只有更大的卷积核才能考虑到上下文的关联信息。第三,character_level 在全连接时使用了 2 层全连接层,一般来说网络层数越多提取到的语义信息会更丰富。有关网络模型的详细参数会在实验部分给出,其中 charater_level 取得了最好的成绩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章