百度点石情感极性分析--代码案例

情感极性分析

目前,为了增强我们学生的动手能力,老师组织我们参加了一场百度点石的练习赛,这是一场有着NLP背景的多分类问题, 搜集一些资料后,笔者拼来拼去,终于初步完成,目前f1得分为0.9066(未做优化),现在特来分享一下,由于笔者还是初学者,有些解释不好的地方请多多包涵。
训练集测试集下载链接:https://pan.baidu.com/s/1u2YLIW4XYPQjw2qcG63WUg
密码:1mgf

接下来上代码

先导入我们需要用到的库,如果安装库过程有问题可以参考关于jupyter安装第三方库的问题(Linux)

from gensim.models.word2vec import Word2Vec
from sklearn.model_selection import train_test_split
import pandas as pd
import numpy as np
import jieba
from sklearn.externals import joblib
from sklearn.svm import SVC

接着读取我们的文件

columns = ['id', 'type', 'comment', 'lable']
df = pd.read_csv('data_train.csv',sep='\t', names=columns, encoding='utf-8')
df_test = pd.read_csv('data_test.csv',sep='\t', names=columns, encoding='utf-8')

接着我们开始对评论进行分词(注意:df[‘comment’].astype(str)后面的astype(str)不知道为啥不能省略,不然会报错)

cw = lambda x:list(jieba.cut(x))           
df["comment_split"] = df['comment'].astype(str).apply(cw) 
df_test["comment_split"] = df['comment'].astype(str).apply(cw)
ac_x = df_test["comment_split"].values    

划分训练集测试集

train_x, test_x, train_y, test_y = train_test_split(df['comment_split'].values, df['lable'].values, test_size=0.2)

定义构造词向量函数

def build_sentence_vector(text, size,imdb_w2v):
    vec = np.zeros(size).reshape((1, size))
    count = 0.
    for word in text:
        try:
            vec += imdb_w2v[word].reshape((1, size))
            count += 1.
        except KeyError:
            continue
    if count != 0:
        vec /= count
    return vec

开始构造词向量

n_dim = 300
imdb_w2v = Word2Vec(size=n_dim, min_count=10)
imdb_w2v.build_vocab(train_x)
imdb_w2v.train(sentences=train_x,total_examples=imdb_w2v.corpus_count, epochs=20)
train_vecs = np.concatenate([build_sentence_vector(z, n_dim,imdb_w2v) for z in train_x])
imdb_w2v.train(sentences=test_x,total_examples=imdb_w2v.corpus_count, epochs=20)
test_vecs = np.concatenate([build_sentence_vector(z, n_dim,imdb_w2v) for z in test_x])

开始用svm训练

clf=SVC(kernel='rbf',verbose=True)
clf.fit(train_vecs,train_y)

看一下这个模型的评分咋样

clf.score(test_vecs,test_y)

如果满意的话,接下来就可以对我们的data_test进行预测了

imdb_w2v.train(sentences=ac_x,total_examples=imdb_w2v.corpus_count, epochs=20)
ac_vecs = np.concatenate([build_sentence_vector(z, n_dim,imdb_w2v) for z in ac_x])
ac_y = clf.predict(ac_vecs)
df_ac = pd.DataFrame(np.hstack((df_test['id'].values.reshape(-1,1), ac_y.reshape(-1,1))), columns=['id', 'label'])
df_ac.to_csv("ac0.1.csv")

这样就大功告成。

猜你喜欢

转载自blog.csdn.net/what_wrong/article/details/86488975
今日推荐