欢迎来到 - 华山论剑 !    
当前位置: 首页 > 心情日记 > 心情文字 >

深度学习在情感分析中的应用

时间:2019-06-01 22:27 点击:
自然语言情感分析简介 情感分析无处不在,它是一种基于自然语言处理的分类技术。其主要解决的问题是给定一段话,判断这段话是正面的还是负面的。例如在亚马逊网站或者推特网站中,人们会发表评论,谈论某个商品、事件或人物。商家可以利用情感分析工具知道

自然语言情感分析简介

情感分析无处不在,它是一种基于自然语言处理的分类技术。其主要解决的问题是给定一段话,判断这段话是正面的还是负面的。例如在亚马逊网站或者推特网站中,人们会发表评论,谈论某个商品、事件或人物。商家可以利用情感分析工具知道用户对自己的产品的使用体验和评价。当需要大规模的情感分析时,肉眼的处理能力就变得十分有限了。

情感分析的本质就是根据已知的文字和情感符号,推测文字是正面的还是负面的。处理好了情感分析,可以大大提升人们对于事物的理解效率,也可以利用情感分析的结论为其他人或事物服务,比如不少基金公司利用人们对于某家公司、某个行业、某件事情的看法态度来预测未来股票的涨跌。

进行情感分析有如下难点:

第一,文字非结构化,有长有短,很难适合经典的机器学习分类模型。

第二,特征不容易提取。文字可能是谈论这个主题的,也可能是谈论人物、商品或事件的。人工提取特征耗费的精力太大,效果也不好。

第三,词与词之间有联系,把这部分信息纳入模型中也不容易。

本章探讨深度学习在情感分析中的应用深度学习适合做文字处理和语义理解,是因为深度学习结构灵活,其底层利用词嵌入技术可以避免文字长短不均带来的处理困难。使用深度学习抽象特征,可以避免大量人工提取特征的工作。深度学习可以模拟词与词之间的联系,有局部特征抽象化和记忆功能。正是这几个优势,使得深度学习在情感分析,乃至文本分析理解中发挥着举足轻重的作用。

顺便说一句,推特已经公开了他们的情感分API()。读者可以把其整合到自己的应用程序中,也可以试着开发一套自己的API。下面通过一个电影评论的例子详细讲解深度学习在情感分析中的关键技术。

首先下载~amaas/data/sentiment/中的数据。

输入下文安装必要的软件包:

pip install numpy scipy

pip install scikit-learn

pip install pillow

pip install h5py

下面处理数据。Keras 自带了imdb 的数据和调取数据的函数,直接调用load.data()就可以了。

import kerasimport numpy as npfrom keras.datasets import imdb

(X_train, y_train), (X_test, y_test) = imdb.load_data()

先看一看数据长什么样子的。输入命令:

X_train[0]

我们可以看到结果:

深度学习在情感分析中的应用

原来,Keras 自带的load_data 函数帮我们从亚马逊S3 中下载了数据,并且给每个词标注了一个索引(index),创建了字典。每段文字的每个词对应了一个数字。

print(y[:10])

得到array([1, 0, 0, 1, 0, 0, 1, 0, 1, 0]),可见y 就是标注,1 表示正面,0 表示负面。

print(X_train.shape)print(y_train.shape)

我们得到的两个张量的维度都为(25000,)。

接下来可以看一看平均每个评论有多少个字:

avg_len = list(map(len, X_train))print(np.mean(avg_len))

可以看到平均字长为238.714。

为了直观显示,这里画一个分布图(见图7.1):

import matplotlib.pyplot as plt

plt.hist(avg_len, bins = range(min(avg_len), max(avg_len) + 50, 50))

plt.show()

注意,如果遇到其他类型的数据,或者自己有数据,那么就得自己写一套处理数据的脚本。大致步骤如下。

深度学习在情感分析中的应用

图7.1 词频分布直方图

第一,文字分词。英语分词可以按照空格分词,中文分词可以参考jieba。

第二,建立字典,给每个词标号。

第三,把段落按字典翻译成数字,变成一个array。

接下来就开始建模了。

文字情感分析建模

词嵌入技术

为了克服文字长短不均和将词与词之间的联系纳入模型中的困难,人们使用了一种技术——词嵌入。简单说来,就是给每个词赋一个向量,向量代表空间里的点,含义接近的词,其向量也接近,这样对于词的操作就可以转化为对于向量的操作了,在深度学习中,这被叫作张量(tensor)。

用张量表示词的好处在于:

第一,可以克服文字长短不均的问题,因为如果每个词已经有对应的词向量,那么对于长度为N 的文本,只要选取对应的N 个词所代表的向量并按文本中词的先后顺序排在一起,就是输入张量了,其中每个词向量的维度都是一样的。

第二,词本身无法形成特征,但是张量就是抽象的量化,它是通过多层神经网络的层层抽象计算出来的。

第三,文本是由词组成的,文本的特征可以由词的张量组合。文本的张量蕴含了多个词之间的组合含义,这可以被认为是文本的特征工程,进而为机器学习文本分类提供基础。

词的嵌入最经典的作品是Word2Vec,可以参见:https://code.google.com/archive/p/word2vec/。通过对具有数十亿词的新闻文章进行训练,Google 提供了一组词向量的结果,可以从获取。其主要思想依然是把词表示成向量的形式,而不是One Hot 编码。图7.2展示了这个模型里面词与词的关系。

深度学习在情感分析中的应用

图7.2 词向量示意图(图片来源:https://deeplearning4j.org/word2vec)

多层全连接神经网络训练情感分析

数据统计中,请稍等!
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------