python实现情感分析(Word2Vec)

** 前几天跟着老师做了几个项目,老师写的时候劈里啪啦一顿敲,写了个啥咱也布吉岛,线下自己就瞎琢磨,终于实现了一个最简单的项目。输入文本,然后分析情感,判断出是好感还是反感。看最终结果:↓↓↓↓↓↓

1

2

大概就是这样,接下来实现一下。

实现步骤

加载数据,预处理

数据就是正反两类,保存在neg.xls和pos.xls文件中,

数据内容类似购物网站的评论,分别有一万多个好评和一万多个差评,通过对它们的处理,变成我们用来训练模型的特征和标记。

首先导入几个python常见的库,train_test_split用来对特征向量的划分,numpy和pands是处理数据常见的库,jieba库用来分词,joblib用来保存训练好的模型,sklearn.svm是机器学习训练模型常用的库,我觉得核心的就是Word2Vec这个库了,作用就是将自然语言中的字词转为计算机可以理解的稠密向量。

from sklearn.model_selection import train_test_split

import numpy as np

import pandas as pd

import jieba as jb

from sklearn.externals import joblib

from sklearn.svm import SVC

from gensim.models.word2vec import Word2Vec

加载数据,将数据分词,将正反样本拼接,然后创建全是0和全是1的向量拼接起来作为标签,

neg =pd.read_excel("data/neg.xls",header=None,index=None)

pos =pd.read_excel("data/pos.xls",header=None,index=None)

# 这是两类数据都是x值

pos['words'] = pos[0].apply(lambda x:list(jb.cut(x)))

neg['words'] = neg[0].apply(lambda x:list(jb.cut(x)))

#需要y值 0 代表neg 1代表是pos

y = np.concatenate((np.ones(len(pos)),np.zeros(len(neg))))

X = np.concatenate((pos['words'],neg['words']))

切分训练集和测试集

利用train_test_split函数切分训练集和测试集,test_size表示切分的比例,百分之二十用来测试,这里的random_state是随机种子数,为了保证程序每次运行都分割一样的训练集和测试集。否则,同样的算法模型在不同的训练集和测试集上的效果不一样。训练集和测试集的标签无非就是0和1,直接保存,接下来单独处理特征向量。

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=3)

#保存数据

np.save("data/y_train.npy",y_train)

np.save("data/y_test.npy",y_test)

词向量计算

网上搜到的专业解释是这样说的:使用一层神经网络将one-hot(独热编码)形式的词向量映射到分布式形式的词向量。使用了Hierarchical softmax, negative sampling等技巧进行训练速度上的优化。作用:我们日常生活中使用的自然语言不能够直接被计算机所理解,当我们需要对这些自然语言进行处理时,就需要使用特定的手段对其进行分析或预处理。使用one-hot编码形式对文字进行处理可以得到词向量,但是,由于对文字进行唯一编号进行分析的方式存在数据稀疏的问题,Word2Vec能够解决这一问题,实现word embedding

专业解释的话我还是一脸懵,后来看了一个栗子,大概是这样:

word2vec也叫word embeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量(Dense Vector)。在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder。

在语料库中,杭州、上海、宁波、北京各对应一个向量,向量中只有一个值为1,其余都为0。但是使用One-Hot Encoder有以下问题。一方面,城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的关联关系。其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成维度灾难。

使用Vector Representations可以有效解决这个问题。Word2Vec可以将One-Hot Encoder转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。

如果将embed后的城市向量通过PCA降维后可视化展示出来,那就是这个样子。

计算词向量

#初始化模型和词表

wv = Word2Vec(size=300,min_count=10)

wv.build_vocab(x_train)

# 训练并建模

wv.train(x_train,total_examples=1, epochs=1)

#获取train_vecs

train_vecs = np.concatenate([ build_vector(z,300,wv) for z in x_train])

#保存处理后的词向量

np.save('data/train_vecs.npy',train_vecs)

#保存模型

wv.save("data/model3.pkl")

wv.train(x_test,total_examples=1, epochs=1)

test_vecs = np.concatenate([build_vector(z,300,wv) for z in x_test])

np.save('data/test_vecs.npy',test_vecs)

•对句子中的所有词向量取均值,来生成一个句子的vec

def build_vector(text,size,wv):

#创建一个指定大小的数据空间

vec = np.zeros(size).reshape((1,size))

#count是统计有多少词向量

count = 0

#循环所有的词向量进行求和

for w in text:

try:

vec += wv[w].reshape((1,size))

count +=1

except:

continue

#循环完成后求均值

if count!=0:

vec/=count

return vec

训练SVM模型

训练就用SVM,sklearn库已经封装了具体的算法,只需要调用就行了,原理也挺麻烦,老师讲课的时候我基本都在睡觉,这儿就不装哔了。(想装装不出来。。

python word2vector_python使用Word2Vec进行情感分析解析相关推荐

  1. 【人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩】 https://b23.tv/QU56eTl

    [人工智能毕设之基于Python+flask+bilstm的评论情感分析系统-哔哩哔哩] https://b23.tv/QU56eTl https://b23.tv/QU56eTl

  2. Python实现A股股市情感分析,含数据集可直接运行

    Python实现A股股市情感分析,含数据集可直接运行 Stock Market Sentiment Analysis: 股市情感分析 完整代码下载地址:Python实现A股股市情感分析 情绪与股市 情 ...

  3. LSTM+word2vec电影情感分析

    LSTM+word2vec电影情感分析 import numpy as np import matplotlib.pyplot as plt import pandas as pd from skle ...

  4. Python自然语言处理相,新词发现,主题模型,隐马尔模型词性标注,Word2Vec,情感分析...

    向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程   公众号:datayx 代码环境:python --version 3.5.2 tensorflow keras 代码 ...

  5. Python使用阿里API进行情感分析

    目录 1.作者介绍 2.原理介绍 2.1自然语言处理情感分析介绍 2.2 API介绍 3.实现过程 4.实验代码及结果 4.1实验代码 4.2实验结果 1.作者介绍 魏永健,男,西安工程大学电子信息学 ...

  6. 基于Python的对网络评论情感分析:主题与情感词抽取

    资源下载地址:https://download.csdn.net/download/sheziqiong/85661888 问题描述 针对评论网站上的用户评论进行细粒度的情感分析,区别于传统的粗粒度的 ...

  7. Word2Vec实现情感分析(bug修正)

    python实现情感分析(Word2Vec) ** 前几天跟着老师做了几个项目,老师写的时候劈里啪啦一顿敲,写了个啥咱也布吉岛,线下自己就瞎琢磨,终于实现了一个最简单的项目.输入文本,然后分析情感,判 ...

  8. python 去重_上来就情感分析?我还是先用python去去重吧!

    大家好 下面我给大家讲讲:为什么用python情感分析之前应该先去重! 1.原理说明 1)为什么要进行数据的句内去重? 在做情感分析的时候,有时候需要对文本进行分词,做词频统计.上图是某个店铺的留言数 ...

  9. python英文文本情感分析_舆情信息浩如烟海?看看如何用Python进行英文文本的情感分析...

    市场每天都在生成海量的舆情信息,这些信息可以帮助我们识别市场情绪的转变.如果只是人工地去跟踪大量的舆论和研报显然缺乏效率.我们可以试试让机器来完成这个工作. 数据科学在数值领域中很常见,但这个不断壮大 ...

最新文章

  1. 我是如何把VC6一直用到2016年的
  2. 深度学习(二十七)可视化理解卷积神经网络(反池化 pooling unpooling)
  3. python列表生成器语法_python列表生产式和生成器
  4. 查看tomcat管理信息
  5. Linux时间与NTP
  6. linux安装lua相关编译报错
  7. 微软悬赏25万美元捉拿Conficker蠕虫作者
  8. JDK 1.5 HashMap 源代码读解
  9. “泰迪杯”挑战赛 - 基于协同过滤的推荐算法研究与 GUI 设计
  10. Jtag接口定义及含义
  11. 脑电时频分析II:时频分析
  12. java导出dbf文件_Java 导出dbf文件
  13. bat一键清理系统垃圾/系统日志
  14. 阿里云服务器安全组放行宝塔端口8888|888|80|443|20|21教程
  15. Python计算最大回撤、回撤天数
  16. Fabric.js 橡皮擦的用法(包含恢复功能)
  17. could not locate named parameter [***]; nested exception is org.hibernate.QueryParameterException: c
  18. 单片机外围电路设计之三:电感
  19. 基于环信webim视频语音通话
  20. 关于SSD寿命问题的探讨

热门文章

  1. js数字处理:保留几位小数,最大值,最小值
  2. 感染性疾病及其免疫检测
  3. 如何使用Flex Form
  4. Flex 学习之二十 Form的使用
  5. Android 添加背景音乐代码实现,以及创建音频文件夹
  6. 史上最详细最全的Linux上安装Oracle的教程-centos7-humf
  7. Ubuntu18.04更换系统内核版本
  8. 安卓9.0官方系统升级包_努比亚Z17安卓9.0体验版更新发布
  9. 施路平教授:面向人工通用智能的类脑计算
  10. ctfshow 文件包含Web78-79