问题描述:对电影评论进行情感分类,类型一共有两种:正面评价 (pos) 和负面评价 (neg)。
训练数据集:英文电影评论及对应的分类标签,保存在工作路径下。样本举例如下:
使用的算法:sklearn 逻辑回归 (logistic regression)
使用的词向量:Word2Vec 预先下载并保存在工作路径下。
1 import使用的packages
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from nltk import TreebankWordTokenizer
import time
import matplotlib.pyplot as plt
import re
import string
2 读取训练数据并划分训练、验证、测试集
# 读取训练数据集,文档保存在工作路径下,名称为"trainingdata",格式为csv
df = pd.read_csv("trainingdata.csv")
# 打乱行顺序
df = df.sample(frac=1, random_state=123).reset_index(drop=True)
# 划分训练, 验证和测试数据集,比例分别为0.7, 0.1, 0.2
train_frac, val_frac, test_frac = 0.7, 0.1, 0.2
Xr = df["text"].tolist() #评论文本列表
Yr = df["label"].tolist() #标签列表
train_end = int(train_frac*len(Xr)) #取前70%的样本行为训练集
val_end = int((train_frac + val_frac)*len(Xr)) #取中间10%的样本行为验证集
X_train = Xr[0:train_end] #训练集文本列表
Y_train = Yr[0:train_end] #训练集标签列表
X_val = Xr[train_end:val_end] #验证集文本列表
Y_val = Yr[train_end:val_end] #验证集文本列表
X_test = Xr[val_end:] #测试集文本列表
Y_test = Yr[val_end:] #测试集文本列表
# 读取word2vec,文档保存在工作路径下,名称为"wordvector",格式为npz
wordvector = dict(np.load("wordvector.npz"))
w2v = {w:v for w, v in zip(wordvector["words"], wordvector["vectors"])} #将数据保存为dictionary格式
3 定义函数用于生成文档对应的向量
def document_to_vector(doc):
"""Takes a string document and turns it into a vector
by aggregating its word vectors.
Args