情感分析的描述、基于词袋模型和word2vec模型的情感分析实现

以购物评论为例:

#  读入原始数据集
import pandas as pddfpos = pd.read_excel('../data/购物评论.xlsx', sheet_name='正向', header=None)
dfpos['y'] = 1
dfpos

dfneg = pd.read_excel('../data/购物评论.xlsx', sheet_name='负向', header=None)
dfneg['y'] = 0
dfneg

#  将正向和负向数据集进行合并,用y=0和1来区分
df0 = dfpos.append(dfneg, ignore_index=True)
df0

#  分词和预处理
import jiebacut_txt = lambda x: " ".join(jieba.lcut(x))  # 这里不做任何清理工作,以保留情感词
df0['clean_txt'] = df0[0].apply(cut_txt)
df0

from sklearn.feature_extraction.text import CountVectorizercount_vec = CountVectorizer(min_df=5)  # 出现5次以上才纳入
word_mtx = count_vec.fit_transform(df0.clean_txt)
word_mtx
#  按照7:3的比例生成训练集和测试集
from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(word_mtx, df0.y, test_size=0.3)  # 这里可以直接使用稀疏矩阵格式x_train[0]
#  使用SVM进行建模
from sklearn.svm import SVCclf = SVC(kernel='rbf', verbose=True)
clf.fit(x_train, y_train)  # 内存占用可能较高
clf.score(x_train, y_train)

#  对模型效果进行评估
from sklearn.metrics import classification_reportprint(classification_report(y_test, clf.predict(x_test)))
clf.predict(count_vec.transform([df0.clean_txt[0]]))[0]

#  模型预测
import jiebadef m_pred(string, count_vec, model):words = " ".join(jieba.lcut(string))words_vecs = count_vec.transform([words])  # 数据需要转换为可迭代格式result = model.predict(words_vecs)if int(result[0]) == 1:print(string, '正向情感!')else:print(string, '负向情感!')comment = '外观美观,速度也不错'
m_pred(comment, count_vec, clf)
comment = '总的来说,给与好评!'
m_pred(comment, count_vec, clf)

【基于词袋的模型,对于复杂的情感分类还是存在问题的,还需要寻找更有的模型】

以购物评论为例:

#  读入原始数据集
import pandas as pddfpos = pd.read_excel('../data/购物评论.xlsx', sheet_name='正向', header=None)
dfpos['y'] = 1dfneg = pd.read_excel('../data/购物评论.xlsx', sheet_name='负向', header=None)
dfneg['y'] = 0#  将正向和负向数据集进行合并,用y=0和1来区分
df0 = dfpos.append(dfneg, ignore_index=True)
df0

#  分词和预处理, 生成list of list格式
import jiebadf0['cut'] = df0[0].apply(jieba.lcut)
df0

#  按照7:3的比例生成训练集和测试集
from sklearn.model_selection import train_test_splitx_train, x_test, y_train, y_test = train_test_split(df0.cut, df0.y, test_size=0.3)x_train[:2]
#  设置word2vec模型
from gensim.models.word2vec import Word2Vecn_dim = 300  # 指定向量维度,大样本时300-500较好w2v_model = Word2Vec(size=n_dim, min_count=10)
w2v_model.build_vocab(x_train)  # 生成词表
#  在评论训练集上建模(大数据集时可能会花费几分钟)
#  本例消耗内存较少
%time w2v_model.train(x_train, total_examples=w2v_model.corpus_count, epochs=10)

#  情感词向量间的相似度
w2v_model.wv.most_similar('不错')
w2v_model.wv.most_similar('失望')

#  生成整句向量用于情感分值预测
#  对购物评价、微博等短文本而言,一般是将所有词向量的平均值作为分类算法的输入值#  生成整句所对应的所有词条的词向量矩阵
print(len(df0.cut[0]))
pd.DataFrame([w2v_model.wv[w] for w in df0.cut[0] if w in w2v_model.wv])

#  用各个词向量直接平均的方式生成整句对应的向量
def m_avgvec(words, w2v_model):return pd.DataFrame([w2v_model.wv[w] for w in words if w in w2v_model.wv]).agg('mean')
#  生成建模用的矩阵,耗时较长
%time train_vecs = pd.DataFrame([m_avgvec(s, w2v_model) for s in x_train])
train_vecs

#  情感分析模型拟合
from sklearn.svm import SVC
clf2 = SVC(kernel='rbf',verbose=True)
clf2.fit(train_vecs, y_train)  # 占用内存小于1G
clf2.score(train_vecs, y_train)
from sklearn.metrics import classification_report
print(classification_report(y_train, clf2.predict(train_vecs)))  # 此处未用验证集

#  保存训练完毕的模型以便于今后使用
import joblib# joblib.dump(modelname, 'filename.pkl')
# modelname = joblib.load('filename.pkl')
#  模型预测
import jiebadef m_pre(string, model):words = jieba.lcut(string)words_vecs = pd.DataFrame(m_avgvec(words, w2v_model)).Tresult = model.predict(words_vecs)if int(result[0]) == 1:print(string, '情感正向!')else:print(string, '情感负向!')comment = '颜色不错,喜欢这个款式,好评!'
m_pre(comment, clf2)

情感分析的描述、基于词袋模型和word2vec模型的情感分析实现相关推荐

  1. 词袋模型和TF-IDF

    作者|PURVA HUILGOL 编译|VK 来源|Analytics Vidhya 机器理解文本的挑战 "语言是一种极好的交流媒介" 你和我很快就会明白那句话.但机器根本无法处理 ...

  2. 【word2vec】篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模型

    文章目录 CBOW 模型 基本结构 目标函数 梯度计算 Skip-gram 模型 基本结构 梯度计算 优缺点分析 系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 ...

  3. 【word2vec】篇三:基于Negative Sampling 的 CBOW 模型和 Skip-gram 模型

    系列文章: [word2vec]篇一:理解词向量.CBOW与Skip-Gram等知识 [word2vec]篇二:基于Hierarchical Softmax的 CBOW 模型和 Skip-gram 模 ...

  4. 【金融数量分析之:马科维茨均值方差模型和CAPM定价模型的代码实现】

    [金融数量分析之:马科维茨均值方差模型和CAPM定价模型的代码实现] 马科维茨均值方差模型开启了量化投资的大门,其意义固然十分重要 因此个人便手动实现了一个完整的从获取股票数据到选股,到确定投资比列的 ...

  5. matlab 海浪谱,基于海浪谱模型和FFT的海面建模.pdf

    基于海浪谱模型和FFT的海面建模 第28卷 第4期 重 庆 理 工 大 学 学报(自然科学) 2014年4月 Vol.28 No.4 JournalofChongqingUniversityofTec ...

  6. 基于 OData 模型和 JSON 模型的 SAP UI5 表格控件行项目的添加和删除实现

    这是 Jerry 2021 年的第 62 篇文章,也是汪子熙公众号总共第 339 篇原创文章. 龟虽寿曹操神龟虽寿,犹有竟时:腾蛇乘雾,终为土灰.老骥伏枥,志在千里:烈士暮年,壮心不已.盈缩之期,不但 ...

  7. 基于 React hooks + Typescript + Cesium 实现模型剖切分析

    文章目录 效果截图 功能介绍 实现思路 实现步骤 根据数据获取裁剪面 modelMatrix 创建 clippingPlanes 添加鼠标事件 封装 Clipping3D 类 使用 Clipping3 ...

  8. lr模型和dnn模型_建立ML或DNN模型的技巧

    lr模型和dnn模型 机器学习 (Machine Learning) Everyone can fit data into any model machine learning or deep lea ...

  9. Reactor模型和Proactor模型:同步IO与异步IO

    Table of Contents 服务端的线程模型 2种fd 3种事件 Reactor模型-同步I/O 1.单Reactor单线程模型 2.单Reactor多线程模型 3.主从Reactor多线程模 ...

最新文章

  1. 是谁卖了我的信息资料?
  2. 2010-08-22 动漫店 员工卡缓存出现问题。
  3. Java安全管理器――SecurityManager
  4. 顺丰固定翼无人机来了,未来你的快递将一路“飞”到你手中
  5. 资源系统建设初期数据质量管理
  6. HIN2Vec:异质信息网络中的表示学习 | PaperDaily #18
  7. 学习Java就要掌握Java技术学习线路
  8. windows mysql 免安装_windows 免安装mysql
  9. python 爬虫代码_Python 你见过三行代码的爬虫吗
  10. ssm架构 开源项目_如何为您的开源项目选择正确的品牌架构
  11. Int VS Integer
  12. vsphere通用配置_vSphere各版本功能对比及简介
  13. fortran95查询字符串出现次数子程序
  14. python实现微信自动回复
  15. Docker容器dockerfile构建镜像
  16. 使用matlab建立个人简历,图像制作个人简历范文
  17. 有一种爱,我们不能称之为爱情
  18. 永恒之蓝(MS17-010)漏洞复现及msf常用渗透命令
  19. ARTS-第二周(2019.07.08)
  20. 服务器IUSR_机器名账号找不到怎么办?(转自百度问问)

热门文章

  1. 疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利...
  2. 平头哥玄铁处理器Linux新版本,5大亮点速览
  3. 冠军奖3万元!CSDN×易观算法大赛开赛啦
  4. DeepMind提图像生成的递归神经网络DRAW,158行Python代码复现
  5. 百度发布ERNIE 2.0,性能超BERT、XLNet
  6. 用Python分析《工作细胞》的一万多条评论后,非漫迷也要入番了
  7. 用Python解锁“吃鸡”正确姿势
  8. Google、Intel、Uber等巨头如何布局AI?听听他们自己人怎么说
  9. 何恺明团队推出Mask^X R-CNN,将实例分割扩展到3000类
  10. 另一种思考:为什么不选JPA、MyBatis,而选择JDBCTemplate?