python文本情感分析-Python做文本情感分析之情感极性分析-深度学习文档类资源...

Python做文本情感分析之情感极性分析-深度学习文档类资源

96c4cc 在 2020-02-04 01:53:00 上传 2.99 MB

Python

文本情感分析

文本情感分析(也称为意见挖掘)是指用自然语言处理、文本挖掘以及计算机语言学等方法来识别和提取原素材中的主观信息。

本文使用python来做文本情感分析

Puno做乂本情分析之感校性分析-闫书

LOso

massed

from collections import defaultdict

1.文本切剀

def sent word(senter

Segment a sentence to words

Delete stopwords

segresu1t-「1

segResult. append(w)

fcr word in segResult

在此笔者使用 Jieba进行分词。

122去除停用词

遍历所有语料中的所有词语,删除其中的停用词

e.g.这样)的酒店这样的价格/还算不错

>酒店配/价格/算不错

1.3枃建模型

1.31将词语分类并记录其位置

将句子中各类词分别存储并标注位置。

httP /A lianshu comin/Acfrf16103737nomohile=ves

3/16

Python做义本情戀分竹之情感性分析-间竹

2.情感定位

def classifywords ( wordDict)

(1)情感词

dInes( BasonNLP_ sentiment_scare. txt)

senDict defaultdicto)

for s in senlis

senDict[s split()[0]]= s split(")[1]

#(2)否定词

netList =readLines("notDict. txt")

#(3)程戊副词

degreeList readLines("degreeDict txt")

degreeDict - defaultdicto

fcr d in degreelist

degreeDict[d split(,")[0]l=dsplit(,)[1]

senWord defaultdicto

netword defaultdicto

dcgrccword dcfaultdicto

for word in wordDict keys()

if word in senDict keys( and word not in notList and word not in degreeDict keys(

senWord[wordDict[word]l= senDict[word]

1if word in notlist and word nat in degreeDict keys

elif word in degreeDict keys()

degreeword i wordDict[word]]=degreeDict[word]

return senwo

1.32计算句子得分

在此,简化的情感分数计算逻辑:所有情感词语组的分数之和

定义一个情感词语组:两情感词之间的所有否定词和程度副词与这两情感词中的后一情

感词构成—个情感词组,即 methords+ degreewords+ sentiwords,例如不是很交好,其中不

是为否定词,很为程度副词,交好为情感词,那么议个情感词语组的分数为

fna1 Sentiscore=(-1)1*1,25*9,74712773968

其中1指的是—个否定词,1.25是程度副词的数值,θ.7471273958为交的情感分数

伪代码如下:

finalsentiscore=(-1)A(num of notWords)* degreeNum sentiScore

finalScore sum( finalsentiScorc)

httP /A lianshu comin/Acfrf16103737nomohile=ves

△1A

Python做义本情戀分竹之情感性分析-间竹

情感獒合

def score sent( senNord, nothord degreeNord, segResult)

e = a

存所有情感词的位置的列表

≤PnL

keys)

notloc =-1

遍历句中所有单词 segResu1t,i为单词绝对位置

inge(e, len(segResult)

如果该词为情感词

#1oc为情感词位置列表序号

scnloc 1= 1

妾冻加该情感词分数

score +=w* float(senWordrily

#

if senloc len(senLoc)-1:

判断该情感词与下一情感词之间是否有否定词或程度剖词

为绝对位置

for j in range( senLoclsenloc], senLoclsenlDc +1):

#如果有否定词

if in notloc

如果有程度副词

elif j in degreeloc:

#1定位至下一个情感词

if senor len (senLoc)-1

rcturn score

1.4模型评价

将600多条朋友圈文本的得分排序后做出散点图

Sentiment score

200

300

7p0

Score distribution

其中大多数文本被判为正向文本符合实际情况,旦绝大多数文本的情感得分的绝对值在

10以內,这是因为笔者在计算一个文本的情感得分时,以句号作为一句话结束的志

在一句话内,情感词语组的分数累加,如若一个文本中含有多句话时,则取其所有句子

情感得分的平均值。

然而,这个模型的缺点与局限性也非常明显

httP /A lianshu comin/Acfrf16103737nomohile=ves

5/16

Puno做乂本情分析之感校性分析-闫书

首先,段落的得分是其所有句子得分的平均值,这一方法并不符合实际情况。正如文

章中先后段落有重要性大小之分,一个段落中前后句子也同样有重要性的差异。

其次,有一类文本使用贬义词来表示正向意义,这类情况常出现与宣传文本中,还是

那个例子

有车一族都用了这个宝贝,后果很严重哦[銜笑][偷笑][偷笑],交警工资汁会打5折,没有超速罚款了[吡牙]

「牙][呲牙]2,移联邇公司大輕度裁贝,电话费少了[呲牙][呲牙][呲牙13,中石化中石汕裁员2成,路痴不

再述路,省油[悠闲][終闲][悠闪]5,保险公司裁员2成,保费于1.折2成,全国通用[憨笑][憨笑]憨笑]买不买

你白己看着办吧L调皮]调砹儿调皮]2989元钎轅魔镜带回家,推"还返利L得意」

Score distribution中得分小于-16的几个文本都是与这类情况相似,这也许需要深度

学习的方法才能有效解决这类问题,普通机器学习方法也是很难的

·对于正负向文本的判断,该算法忽略了很多其他的否定词、程度副词和情感词搭配的

情况;用于判断情感強弱也过于简单。

总之,这一模型只能用做 BENCHMARK

2基于机器学习的文本情感极性分析

21还是数据准备

21.1停用词

(同1.14)

21.2正负向语料库

来源于有关中文情感挖掘的酒店评论语料(htp:/ww. datatang. com/data/11936),其中

正向7000条,负向3000条(笔者是不是可以认为这个世界还是充满着满满的筜意

呢…),当然也可以参考情感分析资源(转)

htt:/ wcnblogs. com/ finesite/p/3381803htm)使用其他语料作为训练集。

213验证集

Amazon上对 Phone6s的评论,来源已不可考

22数据预处理

2.21还是要分词

(同12.1)

httP /A lianshu comin/Acfrf16103737nomohile=ves

6/16

Python做义本情戀分竹之情感性分析-间竹

import codecs

from skl

from sklearn, externals import joblib

trom sklearn preprocessing import scale

from skI

from sklearn decomposition import PCA

ort stat

from keras models import Sequential

from keras layers import Dense, Dropout, Activation

from keras optimizers import SGD

from sklearn metrics import fl score

from bayes opt import Bayesianoptimization as Bo

from sklearn metrics import roc curve, auc

import matplotlib. pyplot as plt

def parsesent(sentence)

seg_ list =jieba cut(sentence)

ou tpuL

join(list(seg_list)) use space to join them

return output

222也要去除停用词

(同122)

2.23训练词向量

〔重点来了!)模型的输入需是数据元组,那么就需要将毎条数据的词语组合转

化为一个数值向量

常见的转化算法有但不仅限于如下几种

请原谅不知死活的胖子直接用展示的pp截图作说明,没错,我就是懒,你打我呀

· Bag of Words

httP /A lianshu comin/Acfrf16103737nomohile=ves

711A

Puno做乂本情分析之感校性分析-闫书

Bag of Words(Bow)

One-hot Representation

向量中每个分量表示词典中对应单词在文档中出现的次数

Bob likes to play basketball, Jim likes too

Bob also likes to play football games

构造词典

Dict=1. Bob, 2- like, 3. to, 4. play, 5 basketball, 6: also, 7. football

8: games. 9: Jim, 10: too]

,2.1110.0.0.1,1

vec2=[1,1.1,10,1,1,L0.0

缺陷

词汇鸿沟”现象:稀疏方式存储,其独立性假设不太符合言文字实际

分布情况,忽略了单词间的语法和序,无汯了解单词间的关联程度

解决

采用 SCPCD抽取整个短语

采用高阶(2阶以上)统计语言模型,例如 bigram、 trigram等

Bag of Words

TF-IDF

TF-IDF

如果某个词在一篇文章中出现的频率高,且在其他文章中出现

频率低,则认为该词具有很好的类别区分能力,赋予更高权重

TF (Term Frequency)给定词在该文档中出现的次数

IDF (Inverse Document Frequency):词普這重要性的度量

缺陷

单纯以词频作为羊词重要性的度量,对于位置没有敏感性

解决

人为添加权重

例如:第一段和最后一段蹴予更高权重;每段第一句赋予更高权重

TE-IDE

·Word2vec

httP /A lianshu comin/Acfrf16103737nomohile=ves

9:1A

Python做义本情戀分竹之情感性分析-间竹

Word2Vec

词向量空间上的相似度可以用来表示文本语义上的相似度,常被

用于词语聚羹、找同义词、词性分析等

ny-l

CGOW 5kip-Gram

COntinuous Bag of-Words Model) with

cBoW:根椐上下文词颈位醫t词

Sskip-Gran:用于预测位首的单词的上下文单词

P(ww),其中t-c≤i≤P+c且i≠t

特点

可讲行向量的加法组合运算 Additive Compos)

伤如:e(kng)-ve(man)+vec( woman")=vec!quer)

训练高效

Word2Vec

在此笔者选用Word2vec将语料转化成向量,具体步骤可参考笔者的文章问答机器人的

Python分类器(http://wwwjianshu.com/p/bacb99b6671b)

httP /A lianshu comin/Acfrf16103737nomohile=ves

16

Python做义本情戀分竹之情感性分析-间竹

def getwordvecs wordList):

word. replace( ,")

try

vecsappend(madel[ word

return np array(vecs, dtype -"tloat")

def buildvecs(filename)

with open(filename, "rb") as txtfile

tfile

for lines in txtfile

lines lines split(

for line in lines:

line jicba cut(linc)

resultList getwordVecs(line)

for each sentence, the mean vector of all its vectors is used to represent

esultArray sum(np array (resultList))len(resultList)

d(resultArray)

return pcsInput

load word 2vec format( corpus, model. bin", binary True)

# textfile-[u"标准问太差房问还不如3的而且设施非常陈旧,建议酒店把老的标准间从改善,,u"这个丙

posInput buildvecs( pos, txt")

egInput buildvecs( pos. txt")

y- np, concatenate((np, ones(len(posInput)), np zeros(len(negInput))))

for neg in negInput

x appe

224标准化

虽然笔者觉得在这一问题中,标准化对模型的准确率影响不大,当然也可以尝试其他的

标准化的方法

t standardization

X

225降维

根据PCA结果,发现前100维能够 cover95%以上的 variance

10

httP /A lianshu comin/Acfrf16103737nomohile=ves

10/1A

务必Chrome下载

下载所需:1 积分

下载次数:1

我要下载

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值