情感计算在人机交互中的作用在谈情感计算之前,我们先来说说情感本身在人类信息交流中的意义。情感在人类智能、理性决策、社会交往、感知、记忆、学习和创造中起着重要作用。甚至有研究表明,“人类交流中80%的信息都是情感信息”。但为什么不是内容,而是情感最能传达状态信息呢?事实上,从认知科学的角度来看,情绪本身就是高级智力的一部分。作为大脑运行资源的分配器,不同的情绪状态会导致大脑计算和分配资源的方式存在巨大差异,思维执行的路径也会完全不同。此外,人类的进化不断提高了情绪判断的准确性,持续的正反馈也让我们越来越依赖识别对方情绪的方法来判断其行为倾向,甚至成为一种自动的认知方法。由于情感在人类信息交流中的重要意义,情感计算是实现人机交互人性化过程中必不可少的环节,而情感识别与理解技术也是人机交互的基础技术之一。在此基础上,“需求分析”、“深度用户建模”、“情感表达”、“人性化交互体验”等更深入的交互设计成为可能。以深度建模为例,通过与人聊天,AI可以利用情感分析,高效自动标注实体,实现专用的情感词典。了解用户的偏好甚至偏好程度,并利用这些信息进行建模,久而久之就能实现“个性化”,而不是像Siri这样实际上不够个性化的所谓个人助理。对于情绪表达,人机对话系统可以诱发情绪。判断情绪后,可以通过不同的回复来改变情绪倾向。例如,对话系统可以判断下一个回复中的哪句话能够让用户产生情绪倾向,比如高兴、惊喜或者悲伤。其实能够让人有感觉,就是进一步实现更人性化的交互。人性化交互体验的应用方向不言而喻。当智能体的“智商”没有显着差异时,会更容易选择情商稍高的智能系统。当然,实现这一点需要一整套情感分析系统。从文本情感分析到多模态情感分析一般来说,我们讨论的情感分析多是指文本中的情感分析,而是多维度的情感分析,比如文本+图片+表情+emoji的综合分析,文本+语音+图像的合成,即多模态情感分析,是目前情感分析的一个更前沿、更重要的研究方向。对于多模态情感分析研究的必要性,这里提出一个概念——“情感带宽”,即人类所能表达的信息量的大小和维度。例如,在面对面的交流中,情感信息往往是从语气、面部表情、肢体等多个维度来表达的。然而,当涉及到人机交互时,整个情感带宽范式将发生重大变化。例如,通过人机对话系统进行交流时,没有了肢体的维度,人的情感带宽似乎突然下降了。但实际上增加了几个新的输出维度,比如图片、表情、响应时长等。除了自然语言理解技术,人机交互的另一个难点是信息维度的稀疏性。因此,人机交互中的情感分析应尽可能从多个维度入手,以弥补缺失的情感带宽——多模态情感分析成为一个重要的研究方向。内部多模态分析为emoji+照片+表情包+文字长度等,外部多模态分析包括面部表情识别+提供的标签(性格、爱好、年龄等)+语音等。一个基于自然语言理解技术的人机交互系统,它加入了多模态情感分析技术(文本、语音、图像),打破了以往情感识别在单一文本维度的局限性,让机器能够进一步阅读、理解、理解人类,从而达到更好的人机交互效果。情感分析的工具和方法深度学习在情感分析中的应用越来越普遍,例如使用LSTM结合句法分析树,基于卷积神经网络和支持向量机等。总的来说,各种深度学习的综合创新应用方法可以达到相互学习的效果,从而可以提高情感分析的准确性。此外,它还可以从未标记的文本中学习隐藏的特征,从而实现端到端的分类。.文本情感分析最常用的数据集是IMDBMovieReviews,那么如何入门和实践呢?下面以python为例,从简单的文本情感分析入手。前期工作:1.首先安装Keras(https://keras.io/),Keras是一个high-levelnetworksAPI,底层使用Tensorflow,CNTK,或者Theano操作(取决于安装的是哪个)。Keras安装指南:https://keras.io/#installation2。安装Keras后,IMDB可以通过这种方式启动(https://keras.io/datasets/)。这个API底层:https://github.com/fchollet/keras/blob/master/keras/datasets/imdb.py接下来分享如何使用LSTM、Bi-directionalLSTM、CNN、CNN-LSTM等NeuralNetwork为了解决情感分析(sentimentanalysis)的问题。LSTM(long-shortermemory)LSTM的详细原理这里不再赘述。感兴趣的朋友可以参考这篇文章:http://colah.github.io/posts/2015-08-Understanding-LSTMs/下面将使用RNN的概念来解决情感分析的问题。例子:假设用户输入:“我今天好难过”,分词的结果是“我今天好难过”,那么我们希望模型能输出“难过”。模型中的简单计算概念如下图所示。LSTM会一直把信息传回去,有记忆功能。最好综合所有的信息再做判断。通过Keras可以快速搭建上述模型:完整代码:https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py详细代码解释:http://machinelearningmastery.com/sequence-classification-lstm-recurrent-neural-networks-python-keras/Bi-directionalLSTMBi-directionalLSTM和LSTM很相似,但是从两个不同的方向看句子,如下图:这种做法有一个优势,用句子以“I'msosadtoday”为例,重点在句末。但是如果换句话说,“我好开心,我明天要出去玩”,这句话的重点在句首。因此,Bi-directionalLSTM可以用来处理这类问题。同样,通过Keras,可以快速构建这种模型:只要在LSTM外面包裹上wrapper“Bidirectional”,就可以立即完成制作。完整代码:https://github.com/fchollet/keras/blob/master/examples/imdb_bidirectional_lstm.pyCNN近年来在图像领域取得了很大的突破,但也有人将CNN的方法应用到了文字处理中。先分享一篇arxiv上的文章《RecentAdvancesinConvolutionalNeuralNetworks》,2017年初更新:https://arxiv.org/pdf/1512.07108.pdf有CNN的概述,同时在《5.10.NaturalLanguageProcessing”对NLP做了一些整理。那么我们回到主题,如何使用CNN进行情感分类呢?详细原理可以参考这个文档:https://arxiv.org/abs/1408.5882这是知名博客WildML写的介绍:http://www.wildml.com/2015/12/implementing-a-cnn-for-text-classification-in-tensorflow/不过从实现的角度来说,通过Keras,CNN的原理不是太重要,找对API(Conv1D)就好了。在下面的实现示例中,构建这个模型大约需要20行代码:完整代码:https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.pyCNN-LSTM上面介绍完LSTM&CNN后,有没有办法把两者的特点结合成一个CNN-LSTM模型呢?通过Keras,当然还是可以的!完整代码:https://github.com/fchollet/keras/blob/master/examples/imdb_cnn_lstm.py以上主要分享了比较常用的实现内容,或许可以帮助大家解决手头的问题。但是,上面使用LSTM和CNN解决情感分析的问题是近5年发展起来的技术,并不是最新的技术。关于多模态情感分析:最直观的方法是利用深度学习技术将文本、语音和图像的原始输入数据映射到一个共同的特征空间。以文本为例,将原始输入文本通过分词(预处理)转换为字符和字符,再通过一层embedding层映射到向量空间,利用CNN提取里面的信息。同理,以图像为例,对原始输入的照片进行预处理(例如:白化),然后使用CNN提取里面的信息。
