前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇卷积神经网络优势范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
手写体数字识别在邮政、金融等领域应用广泛。对于数字识别,人们往往要求识别器有很高的识别可靠性,数字识别的错误所带来的影响比文字识别等其他识别所带来的影响更大,特别是有关金融方面的数字识别错误所带来的后果是无法想象的,识别错一个数字,这其中的差距可能是几的差距,也可能是几十、几百的差距,这些都还是小问题;但更有可能这一个数字代表的差距是几万、几千万甚至几亿乃至更多,那么这个错误造成的损失就无法估量了。因此,O计出有着高可靠性与高识别率的数字识别系统已经成为了字符识别领域一个非常重要的环节。
1 网络模型和数据库及学习算法的选择
1.1 关于Mnist数据库的介绍
首先,Mnist是NIST数据库的一个优化子集。它是一个有着60000个训练样本集与10000个测试样本集的手写体数字数据库。此数字库一共有4个文件。
此数字库的所有样本集都有图像文件以及标签文件。标签文件的作用是用来储存样本集中的每个样本的数值标签,而每一个样本的图像数据信息则是由图像文件存储着。此数据库的图像数据均保存在二进制文件之中,且每个样本图像的大小均为28*28。
1.2 数字识别的模型选择
手写体数字虽然只有0~9十个数字,但由于写法因人而异,不同地域同样一个数字有多种不同的写法,每个人都有自己的书写习惯。且一些纸质差异、笔画粗细、光线问题、位置、尺度大小等等多种因素都能对输入产生影响。考虑到这些因素,为让网络有良好的识别能力,我们这里采用在图像识别领域有着优秀表现的卷积神经网络作为此数字识别系统的训练模型。
1.3 学习算法的选择
一个优秀的网络模型必须具备良好的学习算法,每个学习网络都有着相对来说较为合适自己的学习算法,而并不是说越高端的算法就越好。在此文中,我选择的学习算法是较为成熟的BP算法。此算法在文字前面有些许介绍,此处不再多做说明。
2 基于卷积神经网络的数字识别系统的设计
2.1 输入层以及输出层设定
根据样本的特征与此网络的网络结构,可以大概判断出输入层与输出层该如何设置。隐含层的个数可以是一个,也可以是多个,这与要分类的问题有关。
前文提及到在mnist数据库中,所有的图像都是28*28大小的,且以整个图片的像素形式存储在数据文件之中。每张图像大小为28*28,故一个图片像素点个数为784个。这里,卷积神经网络的输入即为这784个像素点。
因为数字识别需要识别的是0~9这十个数字,即需要识别十种字符类别,所以将这个神经网络输出层的神经元节点数设置为10。
2.2 网络的中间层设置
卷积神经网络的中间层有两个部分,即卷积层(特征提取层)与下采样层(特征映射层),由第二章中图2-1所示,C1、C3为卷积层,S2、S4为降采样层。
1)激活函数选择
激活函数选择sigmoid函数。同样,在第二章有所提及。Sigmoid函数是严格递增函数,能较好的平衡线性与非线性之间的行为,比较贴近生物神经元的工作。相比于其他函数,sigmoid函数还存在着许多优势,比如光滑性、鲁棒性以及它的导数可以用它自身来表示。
sigmoid函数为:
(1)
其中,x为神经元净输入。
激活函数导数为:
(2)
2)卷积层设计
图像经过卷积核对特征图进行卷积,之后再经过sigmoid函数处理在卷积层得到特征映射图。特征映射图相比于原图像,其特征更为明显突出。
卷积运算其实就是一个加权求和的过程。离散卷积是本文所选取的方法,规定卷积核在水平和竖直两个方向每次都是移动一个像素,即卷积的步长为1。
3)下采样层的设计
根据图像局部相关性这一原理,为了降低网络的学习维度、减少需要处理的数据量且保留图像的有用信息,可以对卷积后的图像进行下采样。这里,我们采取的是取卷积层4个像素点平均值为下采样层的一个像素点的方法。这样可以降低网络规模。
2.3 网络总体结构CNN-0
根据LeNet-5结构,再结合上文中的对输入层、输出层、中间层的设计,完成了如图3-1所示的基本网络结构:
相比于LeNet-5,CNN-0做了一些修改,并非完全按照LeNet-5网络结构模型。Sigmoid函数是本网络中的激活函数,选择这个函数的好处在于可以让所有层得到的输出都在区间[-1,1]之内。网络训练的学习率固定值为1或者是衰减的学习速率。经过卷积后的一维向量与输出层没有沿用LeNet-5的径向基函数网络,而是采取全连接方式,省去了F6层。
3.3 卷积神经网络训练过程
在模式识别中,学习网络有无指导学习网络与有指导学习网络两个类别。无指导学习网络一般是用来进行聚类分析,本文采取的是有指导学习网络。
卷积神经网络其实就是从输入到输出的一种映射,它可以学量的映射关系,只需要用现有的模式对网络进行训练,网络就能具备映射能力。而不需要输入与输出之间的精确的关系。
训练算法与传统的BP算法相差无几(BP算法在第二章有做概述),主要可分为四个步骤,而这四个步骤可以归为向前传播阶段与向后传播阶段:相前传播:
1)随机的从样本集中获取一个样本(A, ),然后将A输入至网络中;
2)根据公式(3)计算出实际输出:
(3)
向后传播:
1)计算和理想输出之间的差;
2)根据极小化误差方法调整权值矩阵。
结语
在手写数字识别这一块,相对来说比较有难度的应该就是脱机自由手写字符识别了,不过本文所研究的并不是这一系统,本设计是一个基于卷积神经网络的手写数字识别系统,因卷积神经网络的局部感受野和降采样以及权值共享、隐性特征提取等优点,它在图像识别领域得到了非常广泛的应用。此程序是在Caffe这个框架上进行运行的,操作系统为Linux系统ubuntu14.04版本。Caffe是一个开源的深度学习框架,也可以说是一个编程框架或者模板框架,它提供一套编程机制。因此,本文所需要实际的卷积神经网络就可以根据这个框架来进行构建。
参考文献:
[1]张伟,王克俭,秦臻.基于神经网络的数字识别的研究[J].微电子学与计算,2006年第23卷第8期.
根据美国New Scientist杂志报道,Facebook的人工智能团队已经开发出一种识别算法,即使看不清楚人脸,也能根据各种线索,例如发型、服饰、身材和姿势等进行识别―比如Facebook就能轻松地认出它的创始人扎克伯格,因为他总是穿一件灰色T恤。这项技术的准确率据称可以达到83%。
传统的人脸识别是程序员预先将整套鉴别系统写好,告诉计算机一些标签信息,例如,人脸是由哪几个部分组成、各个部分的相对位置等等。随后再用大量照片让计算机学习,对其进行训练―简单地说,就是事先给出标准答案,然后让计算机学习。
这种训练方式叫有监督学习,程序员像是老师一样给出几个标签作为标准答案,让计算机“按标索脸”。但当程序员给出的标签数量不够多,不能全面描述一个事物的时候,计算机的识别准确率就会很低。所以,程序员要做的就是不断增加标签,完善识别模板。
通过有监督学习的方式来训练计算机,效率较低,程序员需要花费大量的时间来编写标签代码、测试计算机和补充标签代码,并且一套完善的鉴别系统只能识别出一种事物。
Facebook是不会花时间给每个人的发型和衣服写一套代码的。高效地识别各类事物,还需要借助于更智能的识别方式。而这种方式是通过基于卷积神经网络的无监督学习完成的。
使用无监督学习来训练计算机的时候,程序员并不需要告诉计算机人脸有哪些特点,只需要提供大量人脸照片让计算机看,计算机就能找到这些图片的共同特点,并自动绘制出这类事物的模板。这省去了编写标签代码的过程,识别的效率极大提高。
Google的“猫脸识别”系统就是这样的工作原理。这个由1000台计算机、1.6万个芯片组成的系统在“学习”了数百万张猫脸图片后,将边界、亮度、形状、色彩和局部形状等多个特征分类,做成标签,绘制模板。
当再看到一张图片后,系统会逐级对其进行识别。比如先判断图像的特定方位、位置边沿的有无,再通过不同的形状来检测局部图案,接下来则是将局部图案与模板中物体的相应部分匹配。后续的层级会把这些局部组合起来从而识别出整体。最后,系统将图片中的猫脸识别出来,并与之前学习过的数百万张猫脸图片归为一类。
这其实和人类的思维以及识别事物的过程十分相似。由于绝大多数图片都是由多种事物组成的,无监督学了自行绘制模板,还会将不同事物进行分类,进而分类绘制模板。
“卷积就是匹配的意思。”微软(亚洲)互联网工程院资深研发总监胡睿对《第一财经周刊》说,“我们有几千个或者几万个模板在一个卷积神经网络里面。如果新来一张图片,就用这些模板去做卷积,再通过神经网络推理出它到底是模板中的哪一类。”
Facebook的新技术使用的也是卷积神经网络。要知道,卷积神经网络技术正是Facebook的人工智能实验室负责人Yann LeCun,在1980年代末开发出的。2003年,他成为纽约大学的教授。而移动互联网的兴起带来的海量数据,为这一技术的进一步发展提供了极大可能。
如今,在互联网巨头公司中,Facebook拥有基于社交网络的大量图片,这一点非常吸引LeCun。2014年,他加入了Facebook,把实验室从学校搬到了公司。
除了丰富的图片资源,Facebook还有一项更大的优势:作为全球最大的社交网站,它能获取照片的拍摄地址、分析用户的社交关系,并在此基础上识别出照片中的人物。也就是说,即使在一些照片中,你的脸不是很清楚,并且其他和你相关的信息也比较缺乏,但是Facebook会根据你以往的消息推断出这张照片是在哪儿拍的,照片中哪个人是你,甚至你旁边那些脸部同样模糊的人都是你哪些朋友。
“Facebook需要解决的问题,并不是从50亿个人中把你挑出来,”胡睿说,“它只需要从几百个或者上千个与你有关系的人中间把你挑出来,这样问题其实极大地简化了。”
Facebook的研究人员表示,这项技术未来可以用于其Moments的照片分享。Moments是不久前Facebook推出的一款私密照片分享应用,主要是用来让好友间的图片交换与分享变得更方便。
不过目前,这项“不看脸识人”的技术还没有被应用在它Facebook的产品中,或许其中一个原因是,它还很难达到传统人脸识别技术的高准确率。Facebook也承认,这个算法并不十分完美。尤其,基于服饰的判断无法做到百分之百准确,毕竟,不是所有人都像扎克伯格那样,每天穿着同样的衣服。
随着时代的发展,构建在互联网生态模式之上的云计算、大数据、人工智能等新技术,正渗透到每一个行业,引发产业生产、服务模式的变革,并且已经取得一系列重要成果。在此背景下,大学教学如何跟上时代步伐,是值得每一个高校教师深入思考的问题。程序设计作为计算机专业大学生的必修课程和必须掌握的基本技能,其教学改革在新时代下尤显必要。
传统的大学教学中,一直都以C/C++或Java作为教学语言。诚然,C/C++和Java是当今使用人数最多的语言,但在“互联网+”时代,面对大数据分析时,特别是面对数据采集、仿真建模、结果验证与数据可视化时,他们就不再是最佳选择。
Python作为一种解释型超高级语言,具备交互式、可移植、面向对象的特点。它功能强大,适用于多种操作系统,有完善丰富的工具包,正在得到越来越多的应用,而且越来越被重视。2017年4月,北京理工大学计算机学院和高等教育出版社联合承办了“第一届高等学校Python语言及计算生态教学研讨会”,提出了计算生态的概念[1],大力推动了Python教学。在此背景下,根据我们在Python教学和科研中的应用经验,对如何进行基于Python计算生态的教学改革进行探讨。
1 Python语言的兴起与优势
从20世纪中期到今天,短短的70年间,电子计算机经历了飞速的发展,出现了许多不同的程序设计语言,例如Pascal、Fortran、C、C++、Java、PHP、C#等,这些不同的语言,都体现了不同的设计哲学,也反映了不同的时代特点。
然而,每种程序设计语言都有其局限性。Python的设计者Guido von Rossum希望有一种语言,既具有C方便地调用计算机功能接口的能力,又可以像一些脚本语言一样轻松地编程。Python正是在这种背景下被创造出来。
同C/C++和Java等语言相比,Python有以下优势:
(1)简单易学。Python是一种代表简单主义思想的语言,语法简单,学习起来容易上手。这使学生能够专注于解决问题而不是学习语言本身。
(2)解释性。Python写的程序不需要编译成二进制代码,可以直接从源代码运行程序。这使得Python更加简单,更易于移植。
(3)面向对象。Python既支持面向过程的编程,也支持面向对象的编程。
(4)可扩展性。为了提升运行效率,可以采用C/C++来编写关键代码,然后在Python程序中使用它们。
(5)混合编程。Python被称为胶水语言,是由于可以很容易地将Python与其他语言进行混合编程。这样方便地利用已有的各种工具包,提高开发效率。
(6)丰富的库。Python有强大的标准库,并且Python的生态系统开始拓展到第三方包,例如用于Web框架的web.py ,用于科学计算的numpy,以及用于数据可视化的matplotlib等。
Python作为一种跨平台编程语言,已经被移植在以Linux、Windows、Mac、Android为代表的许多平台上。由于Python的开放性,有丰富的来自开源社区的成熟库支持,从而可以基于Python完成各种工作,例如数据采集(如网络爬虫)、图像处理、机器学习、科学计算等。
2 针对Python的应用支持与国内外课程建设情况
正由于Python具有上述优点,它获得了业界的广泛支持。例如在Google公司,Python是继C++和Java之后,使用率排名第三的编程语言,使用Python的开发团队也是Google的第三大研发部门。
(1)Tensorflow:TensorFlow是由Google Brain小组开发的用于机器学习和深度神经网络的工具。据统计,Tensorflow是目前使用人数最多的开源深度学习框架[2]。TensorFlow本身是使用C++实现的,然后用Python封装。Tensorflow可以根据用户给出的所有指令创建一个计算图,该图被内部优化和编译成可执行的C++代码。这样Tensorflow就可以利用Python 带来的开发速度和C++带来的执行速度。
(2)Google App Engine:Google App Engine(GAE),是谷歌推出的云平台,它完全把CPU、内存等硬件基础设施抽象化,这样只需要关注代码的编写,不需要关注硬件、操作系统或者物理位置。Python是GAE最早支持编程的语言之一,任何使用Python编写的程序,都可以配合Google Python API,很方便地在GAE上创建、部署、运行Python程序。
(3)Caffe(Convolutional Architecture for Fast Feature Embedding):Caffe是由Berkeley AI Research(BAIR)和Berkeley Vision and Learning Center (BVLC)社?^贡献者开发的另一个深度学习框架。同Tensorflow一样,Caffe也是采用C++进行编写,然后提供Python封装,从而既可以利用C++的高执行效率,也可享受Python的高开发效率。
(4)在好莱坞,工业光魔公司(Industrial Light) 采用Python制作商业动画,在“阿贝斯(Abyss)”“星球之旅(Star Trek)”“Indiana Jones”等超级大片中惊艳登场。
(5)ERP和CRM软件的开发也开始基于Python完成;Red Hat曾用Python和Tk一起成功开发配置和管理操作系统的可视界面,整个系统可以全面控制Linux操作系统,并根据用户选择对配置文件作自动更新。
正由于Python是受到业界的欢迎,国外很多高校(如麻省理工学院、斯坦福大学、加州大学洛杉矶分校等)已经用Python作为程序设计语言的教学对象。在Coursera等在线教育平台上,可以发现有来自密歇根大学、莱斯大学、约翰霍普金斯大学等众多高校的Python课程;国内南京大学张莉老师的课程也在其中。然而国内这方面的工作做得还远远不够。截至2015年,我国开设Python语言教学的高校不超过10所[3]。目前在国内大力推动Python教学改革的主要有北京理工大学嵩天老师等人,已编著并出版相应的大学教材[4],受到广泛欢迎。哈尔滨工业大学车万翔老师等人分析了C语言作为入门语言的不足和Python作为入门语言的优势,阐述了计算机专业高级语言程序设计课程的改革方案和实施效果[5]。南京大学张莉老师发表了《基于MOOC的“用Python玩转数据”翻转课堂实践与研究》,研究证明:采用Python教学可以较好地提高学生的主动学习能力、学习兴趣和热情以及问题求解能力[6]。
3 基于Python的教学科研应用改革案例
3.1 输入输出
输入输出(I/O)是每个程序都必须具备的重要功能。常见的I/O可以分为3类:标准I/O(终端打印等)、文件I/O和网络I/O。以?K端I/O为例:
/* Basic I/O in C */
#include
int main()
{
char name[20]; /* char数组,保存第一行输入,作为名字输出 */
scanf("%s", name); /*读取第一行输入 */
printf("Hello %s\n", name);
return 0;
}
以上用C语言编写的有效代码共计8行,输入输出都采用标准库函数。由于C语言本身设计方面的缺陷(如果第一行输入超出char数组大小),可能导致严重的缓冲区溢出问题。针对这一问题,C++对数组越界进行了保护,从而提高系统安全性。
如果采用Java实现,则有效代码共10行。由于Java的面向对象编程思想,下面这个示例程序中多了很多对象构造的流程,引用的库看起来也相对较多,如下所示。我们只需要对这段代码进行稍微修改,就可以实现网络I/O和文件I/O。例如,替换“System.in”,就能够实现对文件或者网络流读取。将“Reader”和“InputStream”替换,就能够实现写入。
/ * Basic I/O in Java */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class HelloWorld {
public static void main(String[] args) throws Exception { /*所有Java程序的入口函数 */
/* 新建输入对象,用来读取标准输入。其中对象构造有嵌套*/
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String name = reader.readLine(); /* 读取第一行输入 */
System.out.printf("Hello %s\n", name);
}
}
相比之下,基于Python的代码则非常短小简洁:
/* Basic I/O in Python */
import sys
name = sys.stdin.readline() /* 读取第一行输入 */
print("Hello " + name)
有效代码仅仅只有3行!同样,替换其中的“sys.stdin”可以实现对文件读取。对于动态类型的Python来说,所有的变量都不需要繁复的声明,直接用就可以,再加上解释执行的特点,无需定义入口函数即可运行。
以上是对C/C++、Java、Python在基本终端I/O操作上的比较,当推广到文件I/O和网络I/O后,Python的优势会更突出,详见表1。
3.2 数据操作
数据处理是大数据时代我们面临的首要问题。然而,由于信息化系统建设过程中,数据可能以不同的结构存在,可能是纯文本文件、CSV格式,也可能是Excel格式,或者是各种不同厂商的数据库格式。
当然,可以采用C++或Java来读取各种异构数据源,但过程相当繁琐,需要利用各种底层驱动,甚至是一些商业化组件。以Excel文件读取为例,为了处理Excel数据,C/C++代码需要用到libxl商业库,而Java也需要用到Apache POI开源库。而利用Python对Excel文件进行读取则需要利用Pandas开源数据处理分析库,示例代码如下:
/* Read Excel in Python */
import pandas
df = pandas.read_excel('sample.xls')
print df.columns /* 输出列名 */
values = df['列名'].values /* 获取某一列的所有数据 */
FORMAT = ['列名1', '列名2', '列名3'] /* 获取指定列组成的数据帧 */
df_selected = df[FORMAT]
总的来说,在数据库操作方面,C++、Java和Python的支持都非常好。C++和Java都为SQL提供了标准的连接、驱动管理类,不同的数据库只需要加载不同的驱动就可以。Java对数据库有比较好的语言级别支持,相应的驱动也比较丰富。Python也提供语言级别的支持,同时第三方库十分丰富,甚至一种数据库有多个不同的连接库。另外值得一提的是, 尽管当前很多流行的分布式大数据平台及分布式数据库使用Java编写,但利用Python同样能够方便地基于第三方库实现操作Hbase、Hive以及其他非关系数据库,如Mongodb、Redis等,这种特点是C/C++不能比拟的。表2为Python与C++、Java在数据库操作上的比较。
由于Python对各种文件和数据库的支持都非常好,它十分适合编写数据库之间,数据库与文件之间相互导入导出数据的脚本,是大数据处理的首选语言。
3.3 数据可视化
丰富的可视化数据图形能够更好地对数据进行展示。利用数据可视化,可方便分析人员从宏观上了解数据的形态和分布,或者进行最后的结果展示。
Python提供了丰富的数据可视化工具,如pandas、Seaborn、Bokeh、matplotlib等。下面以matplotlib为例说明如何利用Python完成数据绘图与可视化。
假定我们要展现的数据用CSV格式保存,内容见表3。目标是基于matplotlib进行直观的数据总体分布展示,例如利用直方图统计年龄分布、利用箱体图展示薪资水平、利用散点图绘制年龄与收入的相关关系。完整代码如下:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv("example.csv") /* ?x取数据 */
fig = plt.figure()
ax1 = fig.add_subplot(1,4,1) /* 定义展示布局 */
ax1.hist(df["Age"], bins = 5) /* 定义直方图 */
plt.axis([20,45,0,5])
plt.title("Age distribution")
plt.xlabel("Age")
plt.ylabel("Employee")
plt.show()
ax2 = fig.add_subplot(1,4,2) /* 确定图在画布中的位置 */
ax2.boxplot(df["Age"]) /* 定义箱线图 */
ax3 = fig.add_subplot(1,4,3)
ax3.bar(df["Age"],df["Income"]) /* 定义条形图 */
ax3.set_title("Income distribution")
ax3.set_xlabel("Age")
ax3.set_ylabel("Income")
ax4 = fig.add_subplot(1,4,4)
ax4.scatter(df["Age"],df["Income"]) /* 定义散点图 */
ax4.set_title("Income distribution")
ax4.set_xlabel("Age")
ax4.set_ylabel("Income")
plt.show()
得到的可视化效果如图1所示。
Python的开放性还表现为利用支持库,实现如图1所示的各类统计效果和复杂的展示(如地图、热力图以及复杂网络等)。此外,除了构建在Python之上的原生库,还有大量其他的数据可视化工具包(如基于Javascript的Plot.ly、百度的Echart等),这些工具包同时也提供Python的调用封装,丰富了基于Python的可视化效果,体现了强大的Python计算生态。
3.4 图像处理与深度神经网络
深度学习的出现点燃了研究者对神经网络和机器学习的研究热情,特别是基于Google Tensorflow的AlphaGo接连击败世界围棋冠军,更加吸引了人们对深度学习的关注。在深度学习领域,很多优秀的开源平台与框架(如Tensorflow、Caffe、Theano、MXNet等)都提供Python接口。这也从侧面反映出Python计算生态已经建立。下面以Tensorflow提供的Python接口为例,介绍Python在图像处理与深度神经网络方面的应用。
卷积神经网络是深度学习的一个重要模型。Tensorflow已经屏蔽了关于卷积神经网络的具体结构,如神经元函数、拓扑连接状态等。程序员只需要通过参数指定,就能完成网络模型的设计,例如
conv1 = tf.layers.conv2d(inputs=input_layer,filters=32,kernel_size=[5, 5], padding="same",activation=tf.nn.relu)
pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)
通过设置输入层ID、激活函数、padding方法、核大小等参数,就可以唯一确定输入层、卷积层、池化层,再通过调整参数并选择一定的学习算法,结合pillow、scikit-image等基于Python的图像处理工具包,从而可以利用深度网络自动完成特征学习,完成模式识别或图像分类工作。
关键词:视觉注意;自顶向下;显著性;对象信息;卷积神经网
中图分类号:TP391.41
文献标志码:A
文章编号:1001-9081(2016)11-3217-05
0 引言
视觉注意机制的研究是探索人眼视觉感知的重要一环。在过去几十年中,如何用计算模型模拟人眼视觉注意过程一直是核心问题。尽管取得了很大的进步,但是快速准确地在自然场景中预测人眼视觉注意区域仍然具有很高的挑战性。显著性是视觉注意的一项重要研究内容,它反映了区域受关注的程度。本文的研究着眼于显著性计算模型,更多模型对比和模型分类可以参考Borji等[1]的文章。视觉注意存在两种机制:自底向上(Bottom-up)和自顶向下(Top-down)。过去的研究中,大多数的计算模型是基于自底向上的信息,即直接从图像像素获取特征。
自底向上显著性计算模型开创性工作源自于文献[2]的Itti模型,该模型是很多其他模型的基础和对照基准,它通过整合多种低层次特征,如颜色、亮度、方向等,给出一个显著度的概率分布图。Harel等[3]在Itti模型的基础上引入图算法,通过计算节点间特征值相似性和空间位置距离进行差异性度量获取显著图。近年来随着深度学习技术在目标识别领域的成功应用[4],研究者们对特征学习产生了更多的兴趣。Borji等[5]通过稀疏编码方法获取特征,使用图像块的稀疏表示结合局部和全局统计特性计算图像块的稀有性(rarity),稀有性反映了当前图像块中心位置的显著性。Vig等[6]通过训练多个神经网络获取层次特征,然后自动优化特征组合。特征提取的过程可以看作是一种隐式空间映射,在映射空间中使用简单的线性模型进行显著或非显著的分类。以上学习方法获得的特征都是一些低层次特征,对图像中的边缘和特定纹理结构敏感。此外,部分研究人员希望从数学统计和信号处理的角度来度量显著性。Bruce等[7]根据最大化信息采样的原则构建显著性模型。Li等[8]总结了多种基于频域的视觉注意研究工作,提出了一种基于超复数傅里叶变换(Hypercomplex Fourier Transform)的视觉注意模型,并展示了其他多种基于频域的模型在某种程度上都是此模型的特例。
以上模型均为数据驱动的显著性模型,模拟人眼视觉注意过程中自底向上的机制。由于人眼视觉注意过程中不可避免地受到知识、任务、经验、情感等因素的影响,因而整合自底向上和自顶向下信息的视觉注意研究受到更多的关注。现有模型整合的自顶向下信息可以分为三类:任务需求、场景上下文和对象特征。
Borji等[9]提出了一种构建任务驱动的视觉注意模型的联合贝叶斯方法。Zhang等[10]提出了一种使用贝叶斯框架整合自底向上和自顶向下显著性信息的方法。Siagian等[11]利用多种低层次特征对场景主旨进行建模,使用场景主旨引导视觉注意的转移。考虑到任务需求和场景上下文建模的复杂性,研究人员将对象特征视为一种高层次的知识表示形式引入视觉注意模型中。Judd等[12]和Zhao等[13]通过将低层次特征和对象特征整合在一个学习框架下来获得特征整合过程中每张特征图的叠加权重,但是模型使用的对象特征只有人脸、行人、车辆等有限的几种。Borji等[14]遵循了同样的方法,但是在整合过程中添加了更多特征并且结合了其他显著性模型的结果,最后用回归、支撑向量机(Support Vector Machine, SVM)、 AdaBoost等多种机器学习算法结合眼动跟踪数据进行训练。实验结果表明对象特征引入较大地提高了模型性能。Xu等[15]将特征划分为像素级、对象级和语义级三个层次,并重点探索对象信息和语义属性对视觉注意的作用;然而,模型中的对象级和语义级特征是手工标定的,因而不是一种完全意义上的计算模型。
总的来看,虽然部分模型已经使用对象特征作为自顶向下的引导信息,但是在对象特征的获取和整合上仍有很大的局限性。首先,对不包含特定对象的场景适应性较差;其次,对象特征描述困难,通常是通过特定目标检测方法获取对象特征,计算效率低下;此外,对象特征的简单整合方式不符合人眼的视觉感知机制。本文提出了一种结合深度学习获取对象特征的视觉注意计算模型,重点研究了对象级特征的获取和整合方法。算法结构如1所示,其中像素级突出图获取采用现有视觉注意模型的方法,对象级突出图获取采用本文提出的基于卷积神经网(Convolutional Neural Network, CNN)的特征学习和基于线性回归的特征整合方法。实验结果表明,对象级特征的引入可以明显提高显著性预测精度,预测结果更符合人类视觉注意效果。
1 对象信息获取
1.1 对象特征
大量实验证据表明对象特征引导视觉注意的转移。视觉注意中引入对象特征是为了获得图像中对象位置等信息,目的与计算机视觉中的目标检测类似。因而,已有的视觉注意计算模型的对象特征通常是通过特定目标检测方法获得。其中,Viola&Jones人脸检测和Felzenszwalb车辆行人检测是最常用的方法。文献[12-14]均使用此类方法引入对象特征。由于这一类特征针对特定对象样本进行设计和训练,因而推广能力不强。
li=fixations(obji)area(obji)(3)
其中: fixations()表示落入当前对象区域的正样本的数目;area()表示对象区域面积。li衡量当前对象单位面积受关注的程度,对象单位面积受关注程度越高,其在对象整合过程中的权重应越高,因而li与叠加权重成正比。
式(4)通过一个线性回归模型对已有样本数据进行训练,获得对象整合叠加权重W:
L=WF(4)
其中:F={F1,F2,…,FN}为训练样本数据集合;L={l1,l2,…,lN}为训练样本标签集合。
测试时根据式(5)~(6)获得对象级突出图:
3 显著图生成
视觉注意是自底向上和自顶向下两种机制作用的结果。完全使用自顶向下的对象特征进行显著区域预测有一定缺陷,主要表现在以下几个方面:首先,知识是对训练样本数据的抽象表示,由于神经网络的规模和训练样本中对象种类的限制,场景中部分对象对应的特征没有被抽象在网络结构中;其次,部分不具有明确语义的区域被错误地认为是对象,对视觉注意形成错误的引导;另外,人眼视觉注意转移的生理学机制并不清楚,兴趣区可能落在不具有对象特征区域中。因此,使用像素级特征给出低层次显著性信息是必要的。
视觉注意模型中常用的像素级特征有颜色、亮度、方向等[2-3,12]。本文直接使用GBVS(Graph-Based Visual Saliency)算法[4]整合多种像素级特征获取像素级突出图Spixel。式(7)给出了整合的方法:
其中:S(i, j)为最终给出的视觉注意显著图;N()为归一化操作;λ控制对象级突出图与像素级突出图的相对权重,通过实验分析可知λ=0.4时效果较好。当图像中不存在显著物体或无法获得高置信度的对象信息时,图像任意位置Sobj(i, j)=0,此时完全由像素级特征驱动的视觉注意引导。
4 实验结果及分析
本次实验是以Visual Studio 2012为实验平台,选取OSIE和MIT数据集作为实验数据。OSIE数据集包含700张含有一个或多个明显语义对象的图片以及15名受试者的眼动跟踪数据,此外该数据集还提供了语义对象统计及人工标注的精确对象区域。MIT数据集包含1003张自然场景图片以及15名受试者的眼动跟踪数据。这两个数据集是当前视觉注意研究领域中较大的数据集。为了验证本文方法的准确率,将本文算法与GBVS[4]、 Itti[2]、 Judd[3]、 AIM[10]、LG[8]等视觉注意方法进行对比。
对比实验中使用的评价指标为ROC(Receiver Operating Characteristic)曲线,实现方法与文献[12,15]相同。图6~8为实验对比结果,显著区域百分比是通过对归一化显著图作阈值处理获得,真正率(True Positive Rate)反映当前落入显著区域的样本占所有样本的比例。通过变化显著区域百分比获得ROC曲线。为了更直观比较算法效果,实验结果图中标注了每种算法的AUC(Area Under Curve)值,AUC值通过计算ROC曲线下的面积获得。AUC值越大表示该方法给出的显著性预测结果越准确。
图6为利用对象级突出图作为显著图在OSIE数据集上的实验结果。相对于RCNN算法, fasterRCNN算法使用了更深层次的网络结构和更多对象类别的训练样本,具有较高的对象位置预测准确率和对象检出率。实验分析可以看出,使用fasterRCNN算法生成对象级突出图可以更好进行显著性预测。同时,人脸特征(FACE)的引入进一步提升了预测准确性,从一个侧面说明了对象性信息对视觉注意的转移具有引导作用。
图7是多种视觉注意算法在OSIE数据集上的ROC曲线,可以看出本文方法实验效果明显好于其他算法。仅次于本文算法的是GBVS和Judd,Itti的准确率较差。图中对象级特征曲线为使用fasterRCNN结合人脸特征生成对象级突出图获得,由于该方法完全使用自顶向下的对象特征,显著性预测准确率明显弱于其他方法,因而证明了引入像素级特征必要性。图8为MIT数据集上的实验结果,本文方法和Judd算法为最好的两种方法,实验结果相差不大。AIM和LG方法效果较差。本文方法和Judd方法均使用了对象特征,可以看出整合了对象特征的方法相对于完全自底向上模型有明显优势。
图9中给出了多种算法显著图的直观对比。与其他方法强调对象边缘不同,本文结合了对象信息的方法可以有效突出图像中的完整对象区域。
5 结语
本文提出一种结合对象信息的视觉注意方法。与传统的视觉注意整合对象方法相比,该方法利用卷积神经网学到的对象特征,获取图像中对象位置等信息;然后通过一个线性回归模型将同一幅图像的多个对象加权整合,获得对象级突出图;最后,根据视觉注意的层次整合机制,将低层次特征和对象特征进行融合形成最终的显著图。本文方法在不同数据集上的准确率要高于现有模型。针对包含明显对象的图像,本文方法克服了部分现有模型由于边缘强化效果导致的显著区域预测不准的问题。本文方法仍然存在一定局限性,未来的工作将尝试非线性对象整合以及增大训练样本数量和网络规模以获取更多种对象特征。
参考文献:
关键词: 情感分析; 情感倾向性; 词典扩充; 电力客服工单; 主动服务
中图分类号: TN915.853?34; V249 文献标识码: A 文章编号: 1004?373X(2017)11?0163?04
Dictionary expansion based sentiment tendency analysis of power customer service order
GU Bin, PENG Tao, CHE Wei
(State Grid Jiangsu Electric Power Company, Nanjing 210000, China)
Abstract: In order to improve the customer satisfaction and active service consciousness of the electric power enterprises effectively, the textual characteristic of the power customer service order is combined to construct the sentiment analysis model of the power customer service order. The keywords of the service order are extracted according to TF?IDF thought. The word2vec training is used to get the word vector of each word. The cosine similarity is calculated to expand the high similarity field vocabulary to the sentiment dictionary. The service order sentiment analysis and text classification are performed. The validity of the method is verified with experimental analysis. The results show that, in comparison with the original sentiment dictionary, the method of dictionary expansion and service order sentiment tendency analysis is superior, has higher accuracy, and can provide a certain reference significance for the customer relation management of power enterprise.
Keywords: sentiment analysis; sentiment tendency; dictionary expansion; power customer service order; active service
0 引 言
随着电力体制改革的逐步深化,配电市场竞争不断加剧,迫切需要供电企业改变传统的思维方式和工作模式,进一步树立市场化服务意识,从客户需求出发,挖掘客户的潜在需求和内在价值,从而提升客户满意度和运营效益。作为与客户交流、沟通的重要窗口,电力企业95598客服系统记录了海量的客户信息,若能彻底挖掘客服工单中的客户特征、情感信息并了解客户的关注焦点,对电力企业和客户都将具有十分重要的意义[1]。
电力客服工单情感倾向性分析可以有效地发掘客户情感信息和需求,可根据客户情感倾向性识别潜在的投诉客户,可根据反馈信息判别某项业务的实施效果等。针对文本情感倾向性分析,现有的理论研究比较侧重于文本特征提取以及采用机器学习方法对文本进行分类,但是基于具体业务特征进行情感词典扩充的研究还比较少,导致情感倾向性计算往往会存在一定的差异,因此,根据电力行业的特c,进行客户服务工单情感词典扩充及情感倾向性的研究非常有必要。
情感分析是指利用文本挖掘、机器学习技术分析挖掘隐藏在文本中的情感信息,并将其分类为积极情感态度和消极情感态度[2]。目前,国内外关于文本情感倾向性分析已经进行了较多的研究工作[3?7],文献[3]基于情感词间的点互信息和上下文约束,提出一种两阶段的领域情感词典构建算法,提升了情感词情感倾向的识别能力。文献[4]研究了基于矩阵投影(MP)和归一化向量(NLV)的文本分类算法,实现对商品评价的情感分析,不仅可以有效识别商品评论情感性倾向,而且提升了识别效率。文献[5]将词级别向量和字级别向量作为原始特征,采用卷积神经网络提取文本特征并进行情感倾向性分析,结果表明字级别向量可取得较高的准确率。文献[6]提出一种词图模型的方法,利用PageRank算法得到情感词的褒贬权值,并将其作为条件随机场模型特征预测情感词倾向,提升了具体语境下预测的准确性,但是针对文本数量较大的情况准确率较低。文献[7]结合句子结构上下文语义关联信息,提出一种基于深度神经网络的跨文本粒度情感分类模型,提升了分类准确率,但该方法只适应于特定领域,泛化能力较低。
鉴于以上研究现状,本文以电力客户服务领域文本特征为突破口,构建了电力客服工单情感分析模型,基于工单关键词提取对原始的情感词典进行扩充,并对工单情感倾向性进行分析,最后,通过算例应用验证了本文所提方法的有效性。
1 相关工作
1.1 情感分类
情感分类技术的主要目标是基于文本数据识别用户所表达的情感信息,并将文本数据分为正类和负类。当前,针对情感分类的研究,主要从监督学习、基于规则方法、跨领域情感分析等方面展_研究,与此同时,针对文本特征的提取和特征情感判别是情感分类研究的两个关键问题。
1.2 Word2vec介绍
word2vec是Google在2013年开源的一款将词表征为实数值向量(word vector)的高效工具,采用的模型有CBOW(Continuous Bag?of?Words,即连续的词袋模型)和Skip?Gram两种,word2vec采用的是Distributed Representation的词向量表示方式,经过对输入集数据进行训练,可以实现将文本词汇转换为维空间向量,然后基于空间向量相似度来表达文本语义相似度,模型输出结果可用于自然语言处理领域相关工作,比如文本聚类、词典扩充、词性分析等。
word2vec生成词向量的基本思想来源于NNLM(Neural Network Language Model)模型,其采用一个三层神经网络构建语言模型,假设某个词的出现只与前个词相关,其原理示意图如图1所示。
图1中,最下方的为前个输入词,并根据其预测下一个词每个输入词被映射为一个向量,为词语的词向量。网络的第一层(输入层)为输入词语组成的维向量网络第二层(隐藏层)计算为偏置因子,使用激活函数tanh;网络第三层(输出层)包含个节点,每个节点表示下一词的未归一化log概率,并使用softmax激活函数将输出值归一化,最后使用随机梯度下降法对模型进行优化。
图1 NNLM原理模型图
模型的目标函数为:
需要满足的约束条件为:
2 电力客服工单情感分析模型
本文以某电力公司客服工单数据为研究对象,在深入理解电力业务及工单文本语义特点的基础上,建立了一种电力客服工单情感分析模型。首先,在进行文本预处理的基础上,对文本进行分词处理并且完成关键词提取;然后,采用word2vec训练工单数据,并基于关键词进行情感词典扩充,构建电力客服领域专用情感词典;最后,进行工单情感倾向性分析。
2.1 工单文本预处理
由于工单文本数据中存在大量价值含量较低甚至没有价值意义的数据,在进行分词、情感分析中会对结果产生较大的影响,那么在文本挖掘之前就必须先进行文本预处理,去除大量没有挖掘意义的工单数据。工单文本预处理工作主要包括:删除未标注业务类型数据、分句处理、文本去重、短句删除等。
分句处理:将工单数据处理成以句子为最小单位,以句尾标点符号为标志分割,包括“,”,“。”,“;”,“!”等符号。
文本去重:就是去除工单数据中重复的部分,常用的方法有观察比较删除法、编辑距离去重法、Simhash算法去重等。
短句删除:删除过短的文本,如“还可以”,“非常好”等,设置文本字符数下限为10个国际字符。
2.2 电力客户服务领域情感词典构建
2.2.1 分词
本文采用python的jieba分词工具对数据集进行分词,并完成词性标注和去除停用词,由于情感分析通常由名词、形容词、副词和连词等反映出来,因此删除词性为动词的词汇。jieba中文分词工具包包含三种分词模式:精确模式、全模式和搜索引擎模式,综合分词效果及后文的研究,本文选择精确模式进行分词,三种模式的分词效果如表1所示。
另外,在实际的分词过程中,出现了个别分词结果与实际的语义不符,原因是字典中缺少相关的专有名词,或者是这些词语的词频较低,比如“客户/咨询/抄/表示/数等/信息”,“客户/查户/号”,“变压器/重/过载”,“查/分/时/电价”等,因此,需要对原有词典进行更新。python中采用jieba.load_userdict(dict.txt)语句添加自定义词典,其中dict.txt是保存字典内容的文件,其格式为每一行分三部分:一部分为词语;另一部分为词频;最后为词性(可省略),用空格隔开。
2.2.2 关键词提取
构建电力客户服务领域专属情感词典,需要尽可能保证领域词典的多样性,关键词的提取要求一方面能够尽量反应出这个特征项所属的类别,另一方面能够把自身属于的类别与其他类别有效地区分开来,依据此原理,本文采用TF?IDF思想进行电力客户服务领域关键词的提取,关键词选取的权重决定了情感词典的多样性,为下文情感词典的扩充做好基础,算法原理如下。
将工单文档和特征项构建成二维矩阵,各条工单的特征向量可表示为:
式中:表示第个工单中第个特征中的词频。则与为:
式中:表示语料库中的文件总数;表示包含词语的文件总数,防止分母为零的情况,通常对分母做+1的处理。因此,的计算公式为:
实际应用中,依据维度的大小确定相应的权重大小,这样就形成了代表语料特征的关键词集。
2.2.3 基于word2vec进行情感词典扩充
随着经济技术的发展及客户文化的差异,不同的客户通常使用不同的词汇描述同一个对象特征,且电力行业中存在许多专用词汇,同样也表达了一定情感,但这些词脱离于现有的情感词典,因此,有必要对现有的情感词典进行扩充,进而提升工单情感倾向性分析的准确性[8]。选取中国知网情感词集和大连理工大学林鸿飞教授整理和标注的中文情感词汇本体库作为基础的情感词典,然后依据权重较大的关键词对原有词典进行扩充[9]。基于上文电力客户服务工单中提取的关键词,采用word2vec工具对工单数据集进行训练,根据CBOW模型或Skip?Gram模型训练出每个词的词向量,并通过计算余弦相似度得到文本语义上的相似度,并将相似度较高的词语加入到情感词典中。
依据上文分词后得到的工单文本数据,采用Linux Version2.6环境对数据进行训练,操作命令如下:
./word2vec ?train data95598.txt ?output vectors_95598data.bin ?cbow 0 ?size 200 ?winodw 5 ?negative 0 ?hs 1 ?sample le?3 threads 12 ?binary 1
其中,data95598.txt为输入数据集;vectors_95598data.bin为模型输出文件;采用Skip?Gram模型进行训练,词向量维度设置为200;训练窗口大小设置为5;-sample表示采样的阈值,训练结果采用二进制方式存储。这样,得到的模型文件中就包含了每个词的词向量。
采用余弦相似度计算关键词的相似词,即基于生成的词向量计算两个维向量的相似度,因为word2vec本身就是基于上下文语义生成的词向量,因此,余弦值越大,表明两个词语的语义越相似。向量与的余弦计算公式如下:
通过distince命令计算输入词与其他词的余弦相似度,经过排序返回相似词列表,再经过人工筛选,将这些词加入到原有情感词典中,实现对原有情感词典的扩充。
2.3 工单情感倾向性分析
工单情感倾向性分析是基于构建的情感词典,计算每个客服工单的情感分值,从而判断工单的情感倾向性。通过上文处理,每一个客服工单都可以被分割成一个个子句片段,表示为每个子句片段由一系列分词后的词语构成,提取每个句子的情感词、否定词等,表示为依据情感词典中给定词的极性值计算每个子句的情感值,分别算每个句子的正向和负向情感分值,计算公式如下:
式中:SenSum表示某个客服工单的情感分值;表示第个子句中第个正向情感词的极性值;表示第个子句中第个负向情感词的极性值。
在否定子句中,当为偶数时,否定子句情感为正;当为奇数时,否定子句情感极性为负。对所有的子句情感分值求和并求均值,就得到了整个客服工单的情感值,进而判断客服工单的情感倾向性,若SenSum为正,表示工单情感为正向;否则,工单情感为负向。
3 实验分析
3.1 实验数据准备
本文的实验环境基于Linux系统,采用python语言进行算法的实现,抽取某电力公司95598客服工单数据作为研究对象,运用jieba包进行中文分词处理,并采用word2vec训练数据生成词向量及扩充情感词典。由于工单数据是按照业务类型生成的,因此选取业务类型为表扬的工单作为正类,选取业务类型为投诉的作为负类,其中,正类和负类数据比例为21,共得到20 000条数据作为实验数据集,随后进行情感倾向性分析,随机选择70%的数据作为训练集,30%的数据作为测试集。
3.2 评价指标
当前针对文本分类效果评估有许多方法,本文选择准确率(precision)、召回率(recall)和值进行文本情感分类效果的评估,准确率是对分类精确性的度量,召回率是对分类完全性的度量,值越大说明分类效果越好,准确率和召回率是一组互斥指标,值是将二者结合的一个度量指标,值越大,分类效果越好,并将通过本文情感分析模型得到的结果与业务员标注的类型做对比分析。它们的计算公式如下:
3.3 实验结果及分析
本文基于抽取到的客服工单数据,结合设计的电力客服工单情感分析模型,实现对电力客户服务领域情感词典的扩充,并基于构建的电力客服领域专属词典进行工单情感倾向性分析,70%的数据用于训练word2vec并进行情感词典的扩充,30%的数据用于测试工单情感分类的准确性。测试集共包含工单数6 000条,其中正类工单3 895条,负类工单2 105条。将采用本文情感分析模型得到的结果与原始基础情感词典得到的结果进行对比分析,见表2。
由表2可知,采用本文构建的电力客服工单词典针对正向和负向的情感词都有较高的准确率、召回率和值,由此可知,本文设计的电力客服工单情感分析模型是合理的,且具有明显的性能优势。
4 结 语
本文设计了一种电力客服工单情感分析模型,构建了电力客服领域情感专用词典并进行工单情感倾向性分析。采用word2vec工具对采集到的数据进行训练,并用测试集数据对本文提出的模型进行验证分析,结果表明,本文所提方法具有一定的合理性和可行性,可为电力企业客户关系管理提供一定的参考意义,促进企业客户满意度及运营效益的提升。此外,本文主要研究了基于构建的电力客服专用情感词典进行客户情感倾向性分析,但是对于无监督性学习方法情感倾向性分析以及情感强度的分析还有待进一步研究。
参考文献
[1] 李胜宇,高俊波,许莉莉.面向酒店评论的情感分析模型[J].计算机系统应用,2017,26(1):227?231.
[2] SINGH VK, PIRYANI R, UDDIN A, et al. Sentiment analysis of movie reviews: a new feature?based heuristic for aspect?level sentiment classification [C]// Proceedings of 2013 International Multi?Conference on Automation, Computing, Communication, Control and Compressed Sensing (iMac4s). Kottayam: IEEE, 2013: 712?717.
[3] 郗亚辉.产品评论中领域情感词典的构建[J].中文信息学报,2016,30(5):136?144.
[4] 钟将,杨思源,孙启干.基于文本分类的商品评价情感分析[J].计算机应用,2014,34(8):2317?2321.
[5] 刘龙飞,杨亮,张绍武,等.基于卷积神经网络的微博情感倾向性分析[J].中文信息学报,2015,29(6):159?165.
[6] 黄挺,姬东鸿.基于图模型和多分类器的微博情感倾向性分析[J].计算机工程,2015,41(4):171?175.
[7] 刘金硕,张智.一种基于联合深度神经网络的食品安全信息情感分类模型[J].计算机科学,2016,43(12):277?280.