IMDB Sentiment Classification from scratch
Author: Beyond
Time: 2019.04.26
情感分析是上手NLP的最简单的任务之一,它就是一个简单的文本分类问题,判断一段文本的情感极性。最简单的就是二分类,判断是积极的还是消极的;更难一点的就是三分类,除了积极消极还有无情感倾向的;更加复杂的就比如情感打分,例如电影打1~5分,这就是五分类。但本质上都一样,无非类别太多更难以学习罢了。
IMDB是一个专业的电影评论网站,类似国内的豆瓣,IMDB的电影评论数据是大家经常使用来练手的情感分析数据集,也是各种比赛,如Kaggle,和各种学者做研究常用的数据集。
今天尝试用这个数据做一个情感二分类,作为一个NLP的练手。具体涉及到:
【想要了解更多NLP,可以去这个小众优质社区看看:建议收藏网址,一个自带阅读器的文献搜索库,并且还能动态讨论,发现的时候就很惊喜】学术范学术范是一个在线学术交流社区,收录论文、作者、研究机构等信息,是一个与小木虫、知乎类似的学术讨论论坛,也是一个与中国知网、万方数据库、readpaper类似的免费文献资源PDF阅读网站,帮助您轻松了解学科前沿,参与专业且活跃的学术讨论。https://www.xueshufan.com/
- 文本预处理;
- 预训练词向量的加载;
- 采用RNNs训练模型
数据集地址:Sentiment Analysis (stanford.edu)
且采用Keras作为框架在进行模型搭建。
1.数据集
①关于数据集
其实,keras自带了IMDB的已经进行很好的预处理的数据集,可以一行代码下载,不需要进行任何的处理就可以训练,而且效果比较好。但是,这样就太没意思了。在真实场景中,我们拿到的都是脏脏的数据,我们必须自己学会读取、清洗、筛选、分成训练集测试集。而且,从我自己的实践经验来看,数据预处理的本事才是真本事,模型都好搭,现在的各种框架已经让搭建模型越来越容易,但是数据预处理只能自己动手。所有往往实际任务中,数据预处理花费的时间、精力是最多的,而且直接影响后面的效果。
另外,我们要知道,对文本进行分析,首先要将文本数值化。因为计算机不认字的,只认数字。所以最后处理好的文本应该是数值化的形式。而keras自带的数据集全都数值化了,而它并不提供对应的查询字典让我们知道每个数字对应什么文字,这让我们只能训练模型,看效果,无法拓展到其他语料上,也无法深入分析。综上,我上面推荐的数据集,是原始数据集,都是真实文本,当然,为了方便处理,也已经被斯坦福的大佬分好类了。但是怎么数值化,需要我们自己动手。
下载后解压,会看到有两个文件夹,test
和train,
我们点进train
中,会发现正样本和负样本已经分好类了,其中neg
和pos
分别是负样本和正样本,unsup
是未标注的样本,可用后续需要采用。其他的都自己去看看吧。打开pos
文件,都是一个个文本。
注意到,这些文本一般都不短...
数据集中,共有5w条文本,test集和train集各半,每个集合中,pos和neg也是各半。
当然,他们划分的train和test,你不一定真的要这样用。例如本文中,我为了方便,就吧train集合当做我所有的数据,在这2.5w条数据中再按照7:3划分train set和test set.
②导入数据集的代码
import os
datapath = r'datasets\aclImdb_v1\train'
pos_files = os.listdir(datapath+'/pos')
neg_files = os.listdir(datapath+'/neg')
print(len(pos_files))
print(len(neg_files))