基于机器学习的情感分析是啥意思

author author     2023-03-23     470

关键词:

以下以语义特征为例:


机器学习基于语义特征的情感分析


基于语义特征的情感分析先人已有研究,可以通过情感词典匹配来做,但是应用机器学习在这方面会使精确度更高些。 
以本人参与的一个项目为主,总结下相关技术点。 
背景是:分析用户评论感情色彩是积极还是消极,即是褒还是贬。

具体步骤为: 
1.有监督的人工给文本标注类标签。如有5000条评论数据,我们给其中的1000条标为积极的,再选1000条标为消极的,积极和消极就是所谓的类标签。 
2.选择特征。从积极的评论数据中按词来选择积极的所有特征。同理,从消极的评论数据中按词来选择消极的所有特征。如“这款游戏非常好玩”->”这款”->“游戏”->”非常”->”好玩”,分为四个特征词,也可以采用双词搭配,“这个游戏”和“非常好玩”作为特征。 
3.特征降维,减少特征的数量。如上“这个游戏非常好玩”中的“这个游戏”没有必要作为特征,因为“好玩”或“非常好玩”已经决定了评论是积极的。 
4.将语料文本变成使用特征表示。 
5.统计所有特征出现的次数,并按倒序排序。 
6.从以上结果中选出排序最靠前的一些特征作为最终的评判特征。 
7.使用训练数据根据特征训练分类算法,得到分类器。 
8.用测试数据检测分类器的准确度。 
我们将数据分为两部分:开发集、测试集。用开发集的数据训练分类算法得到分类器;再用分类器对测试集里的数据进行分类,给出分类预测得到的标签;对比分类标签和人工标注得到的标签的差异,计算出准确度。

参考技术A 知识
情感分析两种方法:
基于词典的方法:先对句子进行分词,然后统计个个词汇的个数,最后在情感字典中查找这些单词对应的情感值,然后可以计算出总体的情感。
机器学习的方法:输入大量句子以及这些句子的情感标签,就可以训练一个句子情感分类器,预测新的句子的情感。
机器学习方法的优点:机器学习对情感分析会更为精准,深度神经网络可以很好的分辨出一些反讽语气的句子,这些句子的情感不是通过简单的表面词汇分析可以理解的。
前馈过程接受固定大小的输入,比如二进制数;递归网络可以接受序列数据,比如文本。
使用AWS(亚马逊云服务)让你的代码在云端上更快更方便的运行。
实例
这里的实例用到的库是tflearn,tflearn是一个深度学习库,他基于TensorFlow,并且提供了更高级的API,可以很好的帮助初学者入门深度学习。
from __future__ import division, print_function, absolute_import

import tflearn
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb # Internet Movie Database
数据导入
pkl:字节流形式数据,更容易转换为其他python对象
取10000单词,10%的的数据作为验证集
train, test, _ = imdb.load_data(path='imdb.pkl',
n_words=10000,
valid_portion=0.1)
将数据划分为评论集和标签集
trainX, trainY = train
testX, testY = test
数据处理
不能直接将文本数据中的字符串输入神经网络,必须先进行向量化,
神经网络作为一种算法,本质上还是对矩阵进行运算,
因此,将它们转换为数值或向量表示是必要的。
pad_sequences的作用是把输入转换为矩阵的形式,并且对矩阵进行扩充。
矩阵的扩充是为了保持输入维数的一致性。
下面的参数标明了输入的数列会扩充到100的长度,扩充的部分数值为0。
trainX = pad_sequences(trainX, maxlen=100, value=0.)
testX = pad_sequences(testX, maxlen=100, value=0.)
把评论集转位二进制向量(表示评价是积极或消极)
trainY = to_categorical(trainY, nb_classes=2)
testY = to_categorical(testY, nb_classes=2)
构造网络
定义输入层,输入数据长度为100
定义嵌入层,第一个参数是这一层接受的向量,即上一层输出的向量,共导入10000个单词,输出维度定义为128
定义LSTM(Long short term memory)层,使我们的网络能够记住序列一开始的数据,将把dropout设置为0.08,这是一种防止过拟合的技术。
定义全连接网络层,激活函数使用softmax。
对于输入做回归操作,定义优化方法,与学习率,还有损失值计算方法
net = tflearn.input_data([None, 100])
net = tflearn.embedding(net, input_dim=10000, output_dim=128)
net = tflearn.lstm(net, 128, dropout=0.8)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net, optimizer='adam', learning_rate=0.001,
loss='categorical_crossentropy')
训练网络
初始化神经网络
训练神经网络,输入训练集与验证集,show_metric=True可以输出训练日志
model = tflearn.DNN(net, tensorboard_verbose=0)
model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,
batch_size=32)
因为注册AWS还要国外的信用卡,没有弄成,在自己笔记本上运行了40分钟,才训练好,迭代了7040次,准确度最后达到0.9475,损失值从一开始的0.5左右到了0.15。以后还是得想办法找一个免费的云服务器,跑一些小程序。
Challenge
The challenge for this video is to train a model on this dataset of video game reviews from IGN.com. Then, given some new video game title it should be able to classify it. You can use pandas to parse this dataset. Right now each review has a label that's either Amazing, Great, Good, Mediocre, painful, or awful. These are the emotions. Using the existing labels is extra credit. The baseline is that you can just convert the labels so that there are only 2 emotions (positive or negative). Ideally you can use an RNN via TFLearn like the one in this example, but I'll accept other types of ML models as well.
You'll learn how to parse data, select appropriate features, and use a neural net on an IRL pr
import tflearn
from tflearn.data_utils import to_categorical, pad_sequences, VocabularyProcessor
import pandas as pd
import numpy as np

# 数据导入
# 用pd做数据导入,这里训练集测试集随机的抽取会更好
dataframe = pd.read_csv('ign.csv').iloc[:, 1:3]

train = dataframe.iloc[:int(dataframe.shape[0]*0.9), :]
test = dataframe.iloc[int(dataframe.shape[0]*0.9):dataframe.shape[0], :]

trainX = train.title
trainY = train .score_phrase
testX = test.title
testY = test.score_phrase

# 数据处理
# 和实例不同的是这里的数据是纯文本的,处理前要转换成数据序列,用到了tflearn中的VocabularyProcessor相关方法;样本集分为11类
vocab_proc = VocabularyProcessor(15)
trainX = np.array(list(vocab_proc.fit_transform(trainX)))
testX = np.array(list(vocab_proc.fit_transform(testX)))

vocab_proc2 = VocabularyProcessor(1)
trainY = np.array(list(vocab_proc2.fit_transform(trainY))) - 1
trainY = to_categorical(trainY, nb_classes=11)
vocab_proc3 = VocabularyProcessor(1)
testY = np.array(list(vocab_proc3.fit_transform(testY))) - 1
testY = to_categorical(testY, nb_classes=11)

# 构建网络
# 现在并不清楚要按什么标准构建不同的网络,直接用的实例
net = tflearn.input_data([None, 15])
net = tflearn.embedding(net, input_dim=10000, output_dim=128)
net = tflearn.lstm(net, 128, dropout=0.8)
net = tflearn.fully_connected(net, 2, activation='softmax')
net = tflearn.regression(net, optimizer='adam', learning_rate=0.001,
loss='categorical_crossentropy')

# 训练网络
model = tflearn.DNN(net, tensorboard_verbose=0)
model.fit(trainX, trainY, validation_set=(testX, testY), show_metric=True,
batch_size=32)
Jovian's Winning Code:
Jovian的冠军代码写的很全面了,每一步的解释也很详细。这里同样把这个当做了一个分类问题,比较了三种不同的分类方式的区别,训练完成最后的深度学习网络可以达到0.5左右的正确率,输入一个游戏的名称,可以预测出这个游戏的评价等级。
依赖库
import pandas as pd
import tflearn
from tflearn.data_utils import to_categorical, pad_sequences
from tflearn.datasets import imdb
from sklearn.feature_extraction.text import CountVectorizer
from sklearn import preprocessing
数据导入
导入游戏评价数据库ign.csv
original_ign = pd.read_csv('ign.csv')
查看数据库的形状
print('original_ign.shape:', original_ign.shape)
output:
original_ign.shape: (18625, 11)
共有18625个游戏的数据,每个游戏有11项信息。其中只有游戏的评价信息(score_phrase)是我们需要关注的。下面统计游戏的各种评价。
original_ign.score_phrase.value_counts()
output
Great 4773
Good 4741
Okay 2945
Mediocre 1959
Amazing 1804
Bad 1269
Awful 664
Painful 340
Unbearable 72
Masterpiece 55
Disaster 3
Name: score_phrase, dtype: int64
可以看出评价为Great和Good的最多,而Disaster的评价只有3个。
数据处理
预处理
检查属否有null元素(缺失项)
original_ign.isnull().sum()
output:
Unnamed: 0 0
score_phrase 0
title 0
url 0
platform 0
score 0
genre 36
editors_choice 0
release_year 0
release_month 0
release_day 0
dtype: int64
将缺失值填充为空字符串(这个例子其实无需做这两步,但要养成检查缺失值的好习惯):
original_ign.fillna(value='', inplace=True)
数据划分
划分样本集和标签集:
X = ign.text
y = ign.score_phrase
分类训练集和测试集:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
样本集处理
将样本集的字符串转变为数字序列。创建vocab,把X转化为X_word_ids。
vect = CountVectorizer(ngram_range=(1,1), token_pattern=r'\b\w1,\b')

vect.fit(X_train)
vocab = vect.vocabulary_

def convert_X_to_X_word_ids(X):
return X.apply( lambda x: [vocab[w] for w in [w.lower().strip() for w in x.split()] if w in vocab] )

X_train_word_ids = convert_X_to_X_word_ids(X_train)
X_test_word_ids = convert_X_to_X_word_ids(X_test)
序列扩充

X_test_padded_seqs = pad_sequences(X_test_word_ids , maxlen=20, value=0)
标签集处理
unique_y_labels = list(y_train.value_counts().index)
le = preprocessing.LabelEncoder()
le.fit(unique_y_labels)

y_train = to_categorical(y_train.map(lambda x: le.transform([x])[0]), nb_classes=len(unique_y_labels))
y_test = to_categorical(y_test.map(lambda x: le.transform([x])[0]), nb_classes=len(unique_y_labels))
构造网络
构造网络和实例一样
n_epoch = 100
size_of_each_vector = X_train_padded_seqs.shape[1]
vocab_size = len(vocab)
no_of_unique_y_labels = len(unique_y_labels)
net = tflearn.input_data([None, size_of_each_vector]) # The first element is the "batch size" which we set to "None"
net = tflearn.embedding(net, input_dim=vocab_size, output_dim=128) # input_dim: vocabulary size
net = tflearn.lstm(net, 128, dropout=0.6) # Set the dropout to 0.6
net = tflearn.fully_connected(net, no_of_unique_y_labels, activation='softmax') # relu or softmax
net = tflearn.regression(net,
optimizer='adam', # adam or ada or adagrad # sgd
learning_rate=1e-4,
loss='categorical_crossentropy')
训练网络
初始化
model = tflearn.DNN(net, tensorboard_verbose=0)
训练
model.fit(X_train_padded_seqs, y_train,
validation_set=(X_test_padded_seqs, y_test),
n_epoch=n_epoch,
show_metric=True,
batch_size=100)
原文:https://blog.csdn.net/qq_31707969/article/details/79361606
版权声明:本文为博主原创文章,转载请附上博文链接!

python基于机器学习的微博情感分析与研究(代码片段)

源码下载地址中文微博情感分类语料库"情感分析"是我本科的毕业设计,也是我入门并爱上NLP的项目hhh,当时网上相关语料库的质量都太低了,索性就自己写了个爬虫,一边标注一边爬,现在就把它发出来供大家交流。因为是自己... 查看详情

文本情感分析-机器学习实验三(代码片段)

情感分析-机器学习实验三实验目的:通过实验,掌握文本分析的整体流程,了解文本分类、情感分析、自动摘要等内容通过给定的文本内容,完成分词、文本向量化、文本分类、情感分析等相关实验实验可从文本... 查看详情

使用机器学习的情感分析分类器

】使用机器学习的情感分析分类器【英文标题】:SentimentAnalysisclassifierusingMachineLearning【发布时间】:2016-04-3020:08:14【问题描述】:我们如何为情绪分析制作一个有效的分类器,因为为此我们需要在庞大的数据集上训练我们的分... 查看详情

文本情感分析:基于词袋模型(vsmlsan-gram)的文本表示(代码片段)

现在自然语言处理用深度学习做的比较多,我还没试过用传统的监督学习方法做分类器,比如SVM、Xgboost、随机森林,来训练模型。因此,用Kaggle上经典的电影评论情感分析题,来学习如何用传统机器学习方法解决分类问题。通... 查看详情

基于机器学习和tfidf的情感分类算法,详解自然语言处理(代码片段)

摘要:这篇文章将详细讲解自然语言处理过程,基于机器学习和TFIDF的情感分类算法,并进行了各种分类算法(SVM、RF、LR、Boosting)对比本文分享自华为云社区《[Python人工智能]二十三.基于机器学习和TFIDF的情... 查看详情

基于双向lstm的影评情感分析算法设计学习记录

...长,必须采用智能处理方式。目前的情感分析主要是基于机器学习的方法,基于CNN(ConvolutionalNeuralNetwork,卷积神经网络)、RNN(RecurrentNeuralNetwork,循环神经网络)等神经网络的处理比传统的方法... 查看详情

基于双向lstm的影评情感分析算法设计学习记录

...长,必须采用智能处理方式。目前的情感分析主要是基于机器学习的方法,基于CNN(ConvolutionalNeuralNetwork,卷积神经网络)、RNN(RecurrentNeuralNetwork,循环神经网络)等神经网络的处理比传统的方法... 查看详情

机器学习基础

...器学习课程,近期准备整理当时的学习笔记。本篇总结是基于该专项课程中第一篇的内容分类算法:  1.分类算法实际用途:情感分析等,比如分析餐馆的评论,根据某个人的评论内容推测他对餐馆的评分;又如根据网页... 查看详情

情感分析-r与spark机器学习库测试分类比较

1    环境R3.0以上版本安装机器学习软件包:说明:此两个包是R机器学习包。RTextTools包含文本处理,e1071包含分类器。>install.packages("RTextTools")>install.packages("e1071") 2    实验步骤研究对象:http:... 查看详情

#夏日挑战赛#ffh从零开始的鸿蒙机器学习之旅-nlp情感分析(代码片段)

[本文正在参加星光计划3.0-夏日挑战赛]1.2导入StandfordCoreNLP库1.2.1我们可以在官网下载工具包StandfordCoreNLP1.2.2解压,并引入lib中右键文件夹,点击addaslibrary2.情感分析2.1新建JAVA类,NLP_EMOTIONpackagecom.example.nlpdemo.utils;importedu.stanford.nlp... 查看详情

基于双向lstm的影评情感分析算法设计学习记录

引言需求分析,技术可行性(目前的研究进度),主流怎么做?我要如何做?随着互联网技术的飞速发展及联网的便捷,越来越多的人在网上表达自己的意见。其中,电影评论受到广泛关注。很多... 查看详情

强化学习是啥意思

...forcementlearning),又称再励学习、评价学习,是一种重要的机器学习方法,在智能控制机器人及分析预测等领域有许多应用。但在传统的机器学习分类中没有提到过强化学习,而在连接主义学习中,把学习算法分为三种类型,即非... 查看详情

clf 在机器学习中是啥意思?

】clf在机器学习中是啥意思?【英文标题】:Whatdoesclfmeaninmachinelearning?clf在机器学习中是什么意思?【发布时间】:2016-04-0501:08:15【问题描述】:在进行拟合时,我总是会遇到类似的代码clf=svm.SVC(kernel=\'linear\',C=1).fit(X_train,y_train... 查看详情

一种基于脑电图情感识别的新型深度学习模型

...的头皮上收集的脑电活动的记录。过去十多年来,大多数基于脑电图的情绪分类方法都采用了传统的机器学习方法,例如支持向量机(SVM)模型,因为这些方法需要的训练样本较少。事实上之所以使用需要训练样本量少的方法是因... 查看详情

python机器学习是啥

...因为现在大众说的人工智能指的是自动化,在计算机领域机器学习就是通过数据来学模型,自动做预测的机器学习是数据分析更上一层楼的任务,如果你能学号数据分析,那应该也能学得来机器学习Python有很完善的机器学习工具... 查看详情

python的机器学习是啥?

Python中的机器学习是人工智能的学习吗?会了数据分析,还需要学这个吗?机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为... 查看详情

了解机器学习

根据业务需求:机器学习:利用计算机从历史的数据中找出规律,对未来的不确定场景做决策。全部数据,多,全面精确 目标:人数据分析:人和他的知识水平对历史的数据的分析。采样数据 少 随机 误差 目... 查看详情

python机器学习方向的第三方库是啥

...NLP和其他机器学习算法更容易组合在一起,还引用Google的基于递归神经网络的文本表示法word2vec。五、OrangeOrange是一种带有图形用户界面的库,在分类、聚集和特征选择方法方面,相当齐全,还有交叉验证的方法。六、PyMVPAPyMVPA... 查看详情