由于语料缺乏,前期若使用到情感分析,建议暂时使用SnowNLP(此模块主要使用淘宝评论语料)做情感挖掘,但不仅仅为单纯调用,需要优化,下面是一些实践思考:
可在此基础上优化,比如文本需要特别处理,除了平常的去停用词外,还可以需要对输入的文本结合词性等进行处理。
下面是一些常识:
一)无情感的词语(如去停用词,去掉语气词,无词性标签的词语)
二)对于文本过长,则可以考虑提取关键词或抽取文本摘要后再提取关键词
对于后者实践结果差异明显:
以"发布了头条文章: 《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显 "为例子, 显然该文本为“积极****”文本。
1)s = SnowNLP("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")
得分为0.5,明显不符合
2)s = SnowNLP(“ ”.join(jieba.analyse.textrank("发布了头条文章:《5分钟11亿!京东双11场景化产品消费增长明显》 5分钟11亿!京东双11场景化产品消费增长明显")))
而对于文本特别长的,则可以先抽取摘要,再对摘要提取关键词。
这主要由于此SnowNLP主要用贝叶斯机器学习方法进行训练文本,机器学习在语料覆盖上不够,特征上工程处理不当会减分,也没考虑语义等。
为何要考虑语义层面:
以“ 苏宁易购,是谁给你们下架OV的勇气****” 中的“ 下架”其实才是中心词(为表达愤怒的文本),但“ 勇气 ”为下架的宾语(其为积极的文本),此句应该结果小于0.5,但实际为0.88,去掉“苏宁易购”则为0.6>
情感分析(Sentiment analysis,SA),又称倾向性分析、意见抽取(Opinion extraction)、意见挖掘(Opinion mining)、情感挖掘(Sentiment mining)、主观分析(Subjectivity analysis)
情感分析是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程
情感分析的目的是为了找出说话者/作者在某些话题上或者针对一个文本两极观点的态度。这个态度或许是他或她的个人判断或是评估,也许是他当时的情感状态(就是说,作者在做出这个言论时的情绪状态),或是作者有意向的情感交流(就是作者想要读者所体验的情绪)
文本情感分析的应用非常广泛,如网络舆情风险分析,信息预测等。如通过Twitter用户情感预测股票走势,电影票房、选举结果等,均是将公众情绪与社会事件对比,发现一致性,并用于预测
首先安装SnowNLP中文情感分析库:
SnowNLP(Simplified Chinese Text Processing),是一个python语言编写的类库,可以方便的处理中文文本内容,其开发受到了TextBlob的启发
In [1]:
数据载入
In [2]:
Out[2]:
数据预处理
In [3]:
In [4]:
Out[4]:
In [7]:
Out[7]:
将所有数据打分
In [9]:
Out[9]:
将分数合并会原表格
In [11]:
Out[11]:
计算指标
In [12]:
Out[12]:
In [13]:
Out[13]:
In [14]:
Out[14]:
基础结论:中位数比平均值高很多,说明有少量异常低的评分拉低了均值
In [16]:
Out[16]:
看分数分布情况,直方图最合适
In [17]:
Out[17]:
少量数据,柱状图也可以
In [18]:
Out[18]:
In [19]:
Out[19]:
In [20]:
以分数排序,查看打分准确率
In [22]:
Out[22]:
好评
In [23]:
Out[23]:
In [24]:
Out[24]:
差评
In [25]:
Out[25]:
In [26]:
Out[26]:
In [27]:
Out[27]:
In [28]:
Out[28]:
In [29]:
Out[29]:
In [30]:
Out[30]:
结论
准确率比瞎猜高,但达不到人工打分准确率
SnowNLP库的训练基准数据是基于电商销售产品训练的,对饭店留言数据的打分准确率一般
做情感分析最好用户自行实现(网站增加打分功能,用户自行打分)