Standford2011电影评论数据集ACLIMDB应用于情感分类

摘要:

合集:AI案例-NLP-传媒
数据集:斯坦福大学2011电影评论数据集/ACLIMDB(Large Movie Review Dataset)
数据集价值:支持电影评论的情感分类

一、问题描述

ACLIMDB(Large Movie Review Dataset)是一个用于情感分析的大型电影评论数据集,由斯坦福大学人工智能实验室于2011年推出。ACLIMDB为情感分析提供了丰富的数据资源,特别是用于情感二元分类,即将电影评论分类为正面或负面评价。作为情感分析任务的基准数据集,ACLIMDB帮助研究人员和开发者训练和评估文本分类模型,提升自然语言处理技术在电影评论分析等领域的应用效果。该数据集在学术界广泛使用,促进了情感分析和相关领域的研究进步。

二、数据集内容

核心数据集包含50,000条评论,平均分为25k训练集和25k测试集。标签的整体分布是平衡的(25k正和25k负)。我们还包括了额外的50,000个未标记文档,用于无监督学习。

在整个集合中,任何给定电影的评论都不允许超过30条,因为同一部电影的评论往往具有相关的评分。此外,训练集和测试集包含的电影是不相交的,因此通过记忆电影独特的术语及其与观察到的标签之间的关联是无法获得显著性能的。在有标签的训练/测试集中,负面评论的评分<=4分(满分10分),正面评论的评分>=7分(满分10分)。因此,评分更中立的评论不包括在训练/测试集中。在无监督集中,包括任何评分的评论,并且有相同数量的评论>5分和<=5分。

文件目录结构

有两个顶级目录[train/, test/]分别对应训练集和测试集。每个目录都包含[pos/, neg/]目录,用于具有二元标签正和负的评论。在这些目录中,评论以文本文件的形式存储,命名遵循[[id]_[rating].txt]的约定,其中[id]是唯一标识符,[rating]是该评论在1-10刻度上的星级评分。例如,文件[test/pos/200_8.txt]是一个具有唯一标识符200和星级评分8/10的正面标记测试集示例的文本,来自IMDb。[train/unsup/]目录的所有评分都为0,因为这部分数据集省略了评分。

我们还包括了每个评论的IMDb URL,存储在一个单独的[urls_[pos, neg, unsup].txt]文件中。具有唯一标识符200的评论将在此文件的第200行有其URL。由于IMDb不断变化,我们无法直接链接到评论,只能链接到电影的评论页面。

除了评论文本文件外,我们还包括了我们实验中使用的已经分词的词袋(BoW)特征。这些存储在训练/测试目录中的.feat文件中。每个.feat文件都是LIBSVM格式,这是一种用于标记数据的ascii稀疏向量格式。这些文件中的特征索引从0开始,与特征索引对应的文本令牌可以在[imdb.vocab]中找到。因此,.feat文件中的一行0:7意味着[imdb.vocab]中的第一个单词(the)在该评论中出现了7次。

LIBSVM页面有关.feat文件格式的详细信息: http://www.csie.ntu.edu.tw/~cjlin/libsvm/

我们还包括了[imdbEr.txt],其中包含了[Potts, 2011]计算的[imdb.vocab]中每个令牌的预期评分。预期评分是了解数据集中单词平均极性的好方法。

引用要求

当您使用该数据集发表论文时,引用如下信息。

@InProceedings{maas-EtAl:2011:ACL-HLT2011,
  author    = {Maas, Andrew L.  and  Daly, Raymond E.  and  Pham, Peter T.  and  Huang, Dan  and  Ng, Andrew Y.  and  Potts, Christopher},
  title     = {Learning Word Vectors for Sentiment Analysis},
  booktitle = {Proceedings of the 49th Annual Meeting of the Association for Computational Linguistics: Human Language Technologies},
  month     = {June},
  year      = {2011},
  address   = {Portland, Oregon, USA},
  publisher = {Association for Computational Linguistics},
  pages     = {142--150},
  url       = {http://www.aclweb.org/anthology/P11-1015}
}

三、源码

数据集中有两个文件夹,test和train。我们点进train中,会发现正样本和负样本已经分好类了: neg和pos分别是负样本和正样本,unsup是未标注的样本,可用后续需要采用。

数据集中,共有5w条文本,test集和train集各半,每个集合中,pos和neg也是各半。

执行以下代码就可以得到下面三个文件,方便以后做训练 imdb_test.npz imdb_train.npz imdb_val.npz

数据读取源码

import os as os
import numpy as np
from sklearn.model_selection import train_test_split

datapath = r'./aclImdb'
save_dir = r'./data'

def get_data(datapath):
    pos_files = os.listdir(datapath + '/pos')
    neg_files = os.listdir(datapath + '/neg')
    print(len(pos_files))
    print(len(neg_files))

    pos_all = []
    neg_all = []
    for pf, nf in zip(pos_files, neg_files):
        with open(datapath + '/pos' + '/' + pf, encoding='utf-8') as f:
            s = f.read()
            pos_all.append(s)
        with open(datapath + '/neg' + '/' + nf, encoding='utf-8') as f:
            s = f.read()
            neg_all.append(s)

    X_orig= np.array(pos_all + neg_all)
    Y_orig = np.array([1 for _ in range(len(pos_all))] + [0 for _ in range(len(neg_all))])
    print("X_orig:", X_orig.shape)
    print("Y_orig:", Y_orig.shape)

    return X_orig, Y_orig

def generate_train_data():
    X_orig, Y_orig = get_data(datapath+r'/train')
    X_test, Y__test = get_data(datapath+r'/test')
    X = np.concatenate([X_orig, X_test])
    Y = np.concatenate([Y_orig, Y__test])
    np.random.seed = 1
    random_indexs = np.random.permutation(len(X))
    X = X[random_indexs]
    Y = Y[random_indexs]
    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size=0.2)
    X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.1)
    print("X_train:", X_train.shape)
    print("y_train:", y_train.shape)
    print("X_test:", X_test.shape)
    print("y_test:", y_test.shape)
    print("x_val:", X_val.shape)
    print("y_val:", y_val.shape)
    np.savez(save_dir + '/imdb_train', x=X_train, y=y_train)
    np.savez(save_dir + '/imdb_test', x=X_test, y=y_test)
    np.savez(save_dir + '/imdb_val', x=X_val, y=y_val)

if __name__ == '__main__':
    generate_train_data()

四、获取案例套件

需要登录后才允许下载文件包。登录

发表评论