小白一只刚接触NLP,百度2018年的新手入门赛用户
评论情感赛题介绍
本次赛题为“用户评论数据情感极性判别”:网络上用户对商家的评论数据,往往带有情感极性,如正面、负面、中立。用户评论的情感极性,一定程度上体现商家提供的产品
和服务的质量,是商家自我监督的预警灯。例如,餐馆出现大量的负面评论,则表明食品可能出现难吃甚至卫生问题,此时商家需引起重视并进行整改。但是评论情感极性判别的
人工成本很高,用机器取代人工判别则可降低成本。
因而,我们采集了多行业的用户对商家的评论数据,期望开发者通过建立模型分析出评论的的正向、中立、负向情感极性。
首先我们要明白,计算机是不能从文本字符串中发现规律的。只有将字符串编码为计算机可以理解的数字,计算机才有可能发现文本中的规律。
对于我这个新手来说,主要是不知道如何将文本转化为计算机所能识别的数值向量,后来学习sklearn后发现
在sklearn中有CountVectorizer和TfidfVectorizer方法
CountVectorizer和TfidfVectorizer是文本特征提取的两种方法。两者的主要区别在于,CountVectorizer仅仅通过计算词语词频,没有考虑该词语是否有代表性。而TfidfVectorizer可以更加精准的表征一个词语对某个话题的代表性。
我采用了TfV, CountVectorizer和TfidfVectorizer用法相同就不一一列举import comments_return import pandas as pd import numpy as np from sklearn import cross_validation, metrics from sklearn.svm import SVC from sklearn.feature_extraction.text import CountVectorizer,TfidfVectorizer from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier data,dataset_Y=comments_return.test_data() p1,p2,p3,p4=comments_return.test_tetsdata() # print(data) # print(dataset_Y) X_train, X_test, y_train, y_test = train_test_split(data, dataset_Y, test_size=0.5, random_state=21) feature_extraction=TfidfVectorizer() X_train=feature_extraction.fit_transform(X_train) svc=KNeighborsClassifier() print("fitint....") svc.fit(X_train,y_train) X_test1=feature_extraction.transform(p1) print("pre1..") pre1=svc.predict(X_test1) X_test2=feature_extraction.transform(p2) print("pre2..") pre2=svc.predict(X_test2) X_test3=feature_extraction.transform(p3) print("pre3..") pre3=svc.predict(X_test3) X_test4=feature_extraction.transform(p4) pre4=svc.predict(X_test4) # print(X_train.shape) # print(X_test1.shape) # print(X_test2.shape) # print(X_test3.shape) # print(X_test4.shape) print("pre:") print(pre1) print(pre2) print(pre3) print(pre4) # acc = metrics.accuracy_score(y_test, pre) # print(acc) count=1 with open("baidu_sub3.csv","w") as f: for i in range(len(pre1)): f.write(str(count)+","+str(int(pre1[i]))+"\n") count=count+1 for i in range(len(pre2)): f.write(str(count) + "," + str(int(pre2[i])) + "\n") count = count + 1 for i in range(len(pre3)): f.write(str(count) + "," + str(int(pre3[i])) + "\n") count = count + 1 for i in range(len(pre4)): f.write(str(count) + "," + str(int(pre4[i])) + "\n") count = count + 1 print("pre over..")