system: [SYSTEM]

user: 2. 算法分析 针对本课题——基于文本信息的人物性格分析算法，本章节主要谈论如何选择适用于本课题的算法，并且对于算法的选择上，分析各个算法的优势和劣势，并且阐述了为何该算法更适用于本课题的研究。本章节所列出的算法都将成为下一章节算法框架的重要组成元素，本章节的阐述主要是为基于文本信息的人物性格分析算法打下理论基础。 2.1. 自然语言处理算法 1) 文档分类算法 文档分类是自然语言处理技术中常见的一项应用。它旨在解决在给定一个文档或者一段文本的情况下，如何准确地将其分类的问题。确切来说，文档分类称不上是一个具体的“算法”，更像是一个“算法思路”。因为它常常需要将传统的文本处理技术和其他传统的机器学习或深度学习算法相结合，以此来完成它对文档“分类”的任务目标。 具体来说，文档分类算法的主要思路是文档标注、文档格式转换、生成词典、计算词语权重、主题建模、训练分类模型、预测等步骤。在训练分类模型的过程中，可以应用机器学习模型，比如支持向量机、逻辑斯蒂回归模型等，或者应用深度学习构建神经网络进行分类器的训练。 举例来说，近年比较热门的情感分类问题，通过对一段已标注正负向情感倾向的文本进行模型训练和预测，从而达到自动分析一段文字的情感极性的目的。这也是一种典型的文档分类问题。 针对本课题来说，可以应用文档分类算法的算法思路，因为从本质上来说，本课题所研究的主要问题可以类比成“文档分类”。在输入层面上，文档分类算法与本课题所研究的都是文本。在输出层面上，文档分类算法主要注重的是多分类问题，也就是在有限的类数上通过算法预测出该文档的确切类别，而本课题旨在分析人物性格，在之后的算法框架描述上会具体说明预测人物性格并不是简单的分类问题。 除了算法思路之外，从文档分类算法的实现步骤上来具体谈谈一些其他可被本课题借鉴的思路。首先是文档标注和文档格式转换，文档标注主要涉及到文本的标签问题，这会在之后的数据收集方面具体谈到，而在本课题中不会存在文档格式转换这个问题，因为我们分析的就是纯文本，输入的就是文字，不会输入其他pdf、excel等格式的文件，同时不会有其他的图片等非文字格式的元素。其次是生成词典部分，这会成为本课题的重要步骤之一。余下的其他步骤都是针对“分类”这一目标服务的，对本课题的借鉴意义不大。 2) 分词算法 对于现在大多数自然语言处理算法模型来说，分词算法是一个基础性工作。分词就是将连续的字序列按照一定的规范重新组合成词序列的过程。中文与英文的区别就是英文的单词之间是有空格的，而中文只在语句之间有标点符号，字词之间是没办法划分的。以此来看，中文分词的难度很高。 中文分词算法大概分为三大类，第一类是基于字符串匹配，即扫描字符串，如果发现字符串的子串和词典中的词相同，就算匹配。第二类是基于统计以及机器学习的分词方法，它们基于人工标注的词性和统计特征，对中文进行建模，即根据观测到的数据(标注好的语料)对模型参数进行训练，在分词阶段再通过模型计算各种分词出现的概率，将概率最大的分词结果作为最终结果。常见的序列标注模型有HMM和CRF。第三类是通过让计算机模拟人对句子的理解，达到识别词的效果，由于汉语语义的复杂性，难以将各种语言信息组织成机器能够识别的形式，目前这种分词系统还处于试验阶段。 对于本课题来说，采用基于统计以及机器学习的分词方法n-gram模型，模型基于这样一种假设，第n个词的出现只与前面N-1个词相关，而与其它任何词都不相关，整句的概率就是各个词出现概率的乘积。并且将n设为3，采用Trigram模型，因为高阶n-gram虽然对更多的上下文敏感，但是数据拥有更多的稀疏性，而低阶n-gram考虑非常有限的上下文信息，但是具有更强的鲁棒性，综合考量选择使用Trigram模型。 同样地，作为对比，也使用中文分词工具jieba。Jieba作为当下最常用的中文分词工具自带了一个叫做dict.txt的词典，里面有2万多条词，包含了词条出现的次数(这个次数是于作者自己基于人民日报语料等资源训练得出来的)和词性。把这2万多条词语，放到一个trie树中进行词图扫描，而trie树是有名的前缀树，也就是说一个词语的前面几个字一样，就表示他们具有相同的前缀，就可以使用trie树来存储，具有查找速度快的优势。 2.2. 传统机器学习算法 机器学习是多种理论学科交叉生成的产物，其中包括统计学、概率论、高等数学多门学科。机器学习的主要目的是为了分析一些已知的数据，针对不同的数据类型、数据量的多少以及不同的研究目的，来选择并使用相应有效的算法来对未知的数据进行预测或决定，或者探究已知数据自身所存在的一些潜在的、未被人们发现的规律等。通过这样的方式，计算机就可以像人类一样在“经验”数据中获取解决某些任务的方法，从而“学习”到相应的算法，这也正是机器学习的含义所在。 机器学习目前主要分为三种类型：监督学习、无监督学习和强化学习。监督学习与无监督学习的主要区别在于是否已知标签，对于一个明确的任务目标来说，如果你所拥有的数据已经含有任务目标数据，那么这种机器学习任务被称为监督学习。同样地，如果你所拥有的数据不含有你的任务目标，或者你并不需要分析某个任务目标而只是探索已拥有的数据之间的联系，或者你只需要对数据进行一些变换等预处理操作，那么这样的机器学习任务被称为无监督学习。而强化学习与标签关系不大，它的运作机制与监督学习和无监督学习有本质上的差别。强化学习主要是使用机器自身的个人历史经验来决定它的算法走向的。 对于监督学习来说主要分为两大类，分类和回归。分类的一个经典例子是垃圾邮件的分类，对于我们已有的数据来说，是否为垃圾邮件就成了分类算法的任务目标，这就要求在我们已有的邮件信息里就已经包含了其是否为垃圾邮件的标签。那么邮件的其他信息，包括发件人地址、邮件信息内容等都将成为为了预测一封邮件是否为垃圾邮件的重要输入，选择合适的监督学习算法，从而在输入的邮件特征中学习如何区分是否为垃圾邮件。回归问题与分类问题的主要区别在于分类问题的最终目的是要把一条数据归为某一类当中，而回归问题主要是为了预测一条数据的任务目标的值。比较经典的例子是天气的预测，通过选择相应地回归算法来对天气的历史数据进行回归学习，从而拟合出回归曲线，进而达到对未来的未知天气的预测，比如预测温度、湿度和降水量等，从这个例子中可以看出，回归任务与分类任务最大的不同在于预测结果的“类型”不同。 由于在实际的生产生活中，常常没有办法获取到我们想要的数据标签，所以无监督学习也获得了广泛的应用。对于无监督学习来说，常分为两大方法，聚类和降维。聚类顾名思义主要是把相似数据归为一类，从而达到把数据分为一簇一簇的效果，这与分类有着本质差别，因为分类任务的目标类别是指定好的已知的，而聚类完全是根据所选择的不同算法来生成的，也就是聚类的结果，数据所生成的类别具体是什么类型是人为不可控的，只能根据数据各个属性的相似度来衡量一些数据是否为同一类别，常见的应用比如一些营销手段，通过使用聚类算法来把相似顾客归为同一类，从而使用相同的营销手段，从而达到减少成本、提高效率的目的。无监督学习的另一个应用降维的主要目的是减少数据的维度，因为对于大多数机器学习来说，数据常常有着大量的属性标签，在进行特征工程处理之后一条数据的维度将成指数爆炸级别的增长，这对于计算机来说处理起来就会有很大的困难，而降维的主要目的是对输入标签太多的数据进行预处理，从而寻求其高维数据结构的低维向量表示，将其作为高维数据的特征表达向量，这样就使得高维向量问题转化为低维特征向量问题，大大降低了计算的复杂程度，减少了额外维度的附加信息所造成的误差。 对于本课题而言，输入数据是文本信息，输出信息是人物性格。为了使得传统机器学习算法能够处理本课题的输入输出数据，我们首先要对输入输出数据进行量化处理。首先是文本输入信息，如果我们将文本拆分成字，通过自然语言处理算法直接对字进行处理，那么面临的问题有：一、对于一段文本来说，如果将文本切割成字符形式或者单词形式，那么输入向量的维度就是整段文本的字个数或者词个数，这就意味着输入向量将面临指数级别的维度增长问题，作为训练数据会使得模型的处理能力变弱，这样对于输入向量的表示是不推荐的。二、从自然语言处理的角度分析，如果将文本切割成字，那么就会忽略掉上下文的信息，因为一段文本之所以能表达含义，是通过文本的上下文语法结构来实现的，切割成字必然会打乱文本原本想要表达的信息。总之，通过以上两点原因的分析，输入向量不能使用简单地将文本切割成字的方式去实现，具体的实现方法在上一节中有提到自然语言处理中的分词算法，而将分好的词变成向量，需要用到后面章节中的深度学习算法，深度学习算法是如何应用的在之后的章节会提及，所以在此先假设我们已经获取了关于一段文本的特征向量表示，这就是我们的输入信息。 对于输出信息而言，本课题研究的是人物性格。为了量化人物性格，本课题采用大五人格理论作为人物性格的量化标准，大五人格理论在本课题中如何应用的具体说明会在之后章节中阐述，假设我们在此已经获得了人物性格的量化表示，同样的，也是一个向量。 那么在输入和输出都是一个多维向量的情况下，传统机器学习算法在本课题中是如何得以应用的。通过分析输入输出向量的条件发现，本质上这是一个输出向量为连续值的预测问题，也就是回归问题，那么可选择的传统机器学习算法有感知机算法，同样的，如果将性格的向量输出看作是一个有“阈值”的分类问题，那么可应用的机器学习算法有逻辑斯蒂回归算法、决策树算法等。此外，为了降低输入向量的维度，减小模型复杂度，非监督学习的降维和聚类算法也会在本课题中有所应用。关于这些机器学习算法如何在本课题中应用，将在后续算法框架设计中具体阐明。 2.3. 人物性格算法 如背景中所提及的，人物性格可从人物的语言文本中分析得到，但是如何量化复杂的人物性格，从而使算法能够加以预测，这是我们需要考察研究的。 人物性格的量化方法经历了一百多年的历史，首先心理学家、语言学家便提出词汇学假设，人格词汇学假说指的是人类特性的个体差异可用一套适用于世界上多种语言甚至所有语言的简单术语表达出来。该假设使得人格特质从可词汇使用中推断出来这一想法得以发展，从奥尔波特到卡特尔，先后做了很多基于该假设的工作，主要是在语料词典中挑选出所有能够描述人格差异的词汇，经过一层一层筛选，并对比了自我评定、同伴评定和心理咨询师的评定，最终发现所有与人格相关的词汇大多会出现在五个因素中，在之后的心理学家的研究中也发现这五个因素的普遍性，因此大五人格理论被提出，且成为心理学权威的人格模型。 大五人格理论指的是人的人格描述主要由五种特质涵盖——开放性(Openness)、责任心(Conscientiousness)、外倾性(Extroversion)、宜人性(Agreeableness)和神经质性(Neuroticism)。因此大五人格理论也常被称为OCEAN人格的海洋。开放性主要反映人物个体对于新鲜事物的接受程度，开放性得分高的人往往用于探索未知领域，对从未接触过的知识或生活状态保持着开放的态度，因此可能具有兴趣广泛的特征，而得分低的个体一般情况下是墨守成规的、性格保守且比较传统的。责任心主要反映了个体的自控力，责任心得分比较高的人通常给人的感觉是靠谱的、值得信赖的，而得分比较低的个体通常是比较冲动的、自控能力比较差的，而冲动的个体有时会被当作有趣的朋友，虽然这有时会带来各种麻烦，尽管责任心高的人会在工作中可能会取得领导更高的信任，但极端情况下会出现事事完美主义这一情况，会让人觉得单调乏味。外倾性主要反映的是与人交往从而获得快乐的能力，在外倾性下得分高的个体通常会有较强的交际能力，喜欢与人接触并很热情，而得分低的个体通常比较谨慎内向，喜欢独处但并不一定抑郁。宜人性反映的是人物个体对其他个体所持的态度，与外倾性是不同的，宜人性高的人通常是有同情心的、宽容的、容易信任他人的等等，反之宜人性得分低的个体通常是有心机的、愤世嫉俗的、无情的等等，可以看出宜人性高的人通常是无私的、具有奉献精神的，而宜人性低的人是总会把自己的利益高于别人。神经质主要反映的是人物个体的情感调节情况，反映出情绪的不稳定程度。比如神经质性得分高的人经常会有更多的心理压力，对外界的刺激反应会比较强烈，而得分低的人一般会比较少出现情绪化的状况。 因此，在本课题中，我们采用大五人格理论作为人物性格的考量标准。将文本中的人物的人格量化成开放性、宜人性、外倾性、责任心和神经质性五个维度上的得分，以此来使得本课题所研究的输出向量为一个五维向量，同时该五维向量的各个维度是连续的，那么本课题的研究目标也就转化成如何训练一个算法模型来拟合一个五维的输出连续向量。 2.4. 深度学习、神经网络算法 正如背景所说，语言具有动态性、歧义性和不规范性，我们通常需要一定的推理能力和足够的知识储备才能够推断出一句话中所包含的含义内容。随着互联网时代的快速发展，网络语料库成爆炸式的增长，这为自然语言处理技术的发展提供了丰厚的土壤，同时也让人们能够更深刻地理解语言学的机理机制。 由于语言的复杂性，使得传统机器学习在直接应对自然语言处理这一复杂问题时略显“吃力”。统计机器学习在自然语言处理上的应用被称为统计自然语言处理。统计自然语言处理的主要设计思路是由训练数据和统计模型两部分构成的，然而统计自然语言处理在这两部分上都存在严重的问题。首先是获取训练数据环节，对于文本语料库而言，如果想要对文本进行处理，就要获取标注数据，无论是输入向量还是输出向量，都需要大量的人工工作进行繁琐的标注工作，这样使得获取大量的高质量的训练数据需要更多的财力物力成本。然后是统计模型也就是算法设计环节，由于传统机器学习中并不存在与语言学相对应的机器学习算法，也就是说在机器学习算法中，数据并不具有语言学特征，这使得在输入进算法模型中之前就要进行语言学特征的人工设定，从而保证在算法训练环节考虑语言学因素，从而保证整个算法模型的对文本输入的泛化能力。这样的前期人工特征设计以及预处理更加加大了模型训练的时间以及人力成本，因此，统计自然语言处理存在诸多短板，不适合广泛应用。 近年来，深度学习的快速发展为统计自然语言处理所存在的问题提供了一个解决方案。因为深度学习算法一般建立在复杂神经网络结构上，这样的神经网络结构可以对多种数据进行抽象表示从而进行学习，神经网络算法已经在图像等多种领域大放异彩，同样地，深度学习算法也可以在自然语言处理任务中得以应用。 针对本课题而言，深度学习算法的主要应用点在于处理人物的输入文本，将输入文本抽象处理成文本向量，同时要保证获取到的文本向量能够尽量表示文本的语法结构以及语义信息，这样才能够尽量保证信息的不丢失，增强模型的预测能力。 具体而言，主要应用的神经网络模型的深度学习或神经网络算法有Word2Vec、Doc2Vec、LSTM算法，以及为了处理文档向量而采用的CNN算法。 1) Word2Vec算法 为了解决如何计算一段文本序列在某种语言下出现的概率这一问题，研究者们提出了Ngram模型，即根据要预测的词的前n-1个词来获取该词的条件概率，常见的如bigram模型即N = 2和trigram模型即N = 3。 然而由于Ngram模型的参数会随N而产生爆炸式的增长，所以N的取值一般不超过3。此外，Ngram模型只考虑了每个预测词的上文，而忽略了词与词之间的内在联系以及相似性，比如women和man在语句的语法结构和语义表示上有极大的可替换性，所以对于两个语句The women is sleeping和The man is sleeping而言，如果能计算出前者的概率，那么即可通过women和man的相似性来推断出后者的概率，而这是Ngram模型无法做到的。究其根源而言，主要是因为Ngram模型将词当作成一个个孤立的原子单元去处理的，对于每个词而言其都对应一个one-hot向量，比如The women is sleeping对应一个大小为4的词典，而women对应的向量为[0， 1， 0， 0]，也就是说，在Ngram模型中，每个词对应的向量长度为词库的大小，如果语料库有成千上万的词，那么这样就面临着词向量维度爆炸的问题。 为了解决Ngram的问题，2003年，Bengio等人提出了Neural Network Language Model，并首次提出了word embedding的概念，具体原理不加赘述，其解决了统计语言模型中条件概率的计算和向量空间模型中的词向量的表达着两大问题。 然而该模型存在难以处理变长序列和训练速度太慢两大问题，因此Mikolov提出了改进方案，也就是Word2Vec，简单阐述一下Word2Vec的原理，其主要分为两种模型——CBOW和Skip-gram，前者是根据中心词的上下文来预测中心词，后者相反，利用中心词来预测上下文。同时，Word2Vec还有两种优化算法——Hierarchical Softmax和Negative Sampling，前者是将复杂的归一化概率分解为一系列条件概率的乘积，并利用哈弗曼树来提升训练效率，后者是为了解决那些无法归一化的概率模型的参数预估问题而改造模型的似然函数。 针对本课题而言，Word2Vec的主要作用在于将输入文本向量化，具体来说是将输入文本的“词”向量化，得到可表征语义的稠密词向量，从而为该算法的后续步骤做好基础性工作。 2) Doc2Vec算法 在通过Word2Vec算法获取到文本的各个词向量之后，我们面临着一个问题，就是如何将词向量与输入文本的文档向量相关联，也就是说如何用获取到的词向量来生成文档向量，并且能保持Word2Vec词向量的语义丰富性和高质量。 以往的主要思路有bag of words、LDA、平均词向量、tfidf加权词向量等。首先bag of words不适用，因为其单纯根据词频来建立文档向量忽略了单词的顺序和语义。然后LDA模型主要应用在于计算文本的主题分布，在原理上与Doc2Vec有所不同。其次平均词向量和tfidf加权词向量都是对文档中所有的词向量进行处理，前者直接求平均值来代表文档向量，后者通过计算tfidf的值来让句子中更重要的词权重更大，然而两者都存在一个缺陷就是并没有考虑单词的顺序。 为了解决以上问题，Doc2Vec算法在2014年被提出，是一种非监督学习算法，可以获得句子、段落、文档的向量表示，是Word2Vec的拓展。简单阐述一下原理，Doc2Vec即是在输入层输入词向量时，把文档向量添加成一个额外的输入，与其他词向量一起映射到投影层进行级联或求均值，这被称作为Distributed Memory Model of Paragraph Vectors (PV-DM)，与Word2Vec类似，Doc2Vec也有另一种训练方式——PV-DBOW，即忽略输入的上下文，让模型预测段落中随机的一个单词，而模型的输入就是段落向量，对于大多数任务而言，PV-DM表现更好。 针对本课题而言，可用Doc2Vec模型直接获取文档主题向量表示，也就是针对每个人物的每段文本都可以利用Doc2Vec算法获取到该人物的文本特征向量集作为输入向量集来进行训练。 3) CNN算法 CNN即卷积神经网络是近几年发展起来得到广泛应用的神经网络模型，20世纪60年代，Hubel和Wiesel在研究猫脑皮层中用于局部敏感和方向选择的神经元时发现其独特的网络结构可以降低反馈神经网络的复杂性，卷积神经网络(Convolutional Neural Networks——简称CNN)因此被提出。就目前而言，卷积神经网络主要应用于图像处理问题，包括边界检测等应用。 CNN的结构构成主要有3个层构成：Convolutional layer (卷积层——CONV)、Pooling layer (池化层——POOL)、Fully Connected layer (全连接层——FC)。卷积层主要由滤波器和激活函数构成，池化层主要去设定模型的池化方法是Max pooling还是Average pooling，最终全连接层即神经网络中最普通的一排神经元。 CNN中有一些基本概念需要阐明。首先是padding填白，因为CNN的卷积操作会使输入矩阵经过每次卷积之后都会缩小，这样就会存在矩阵消失的问题，而且输入向量边缘的值会因此而无法进行多次运算，从而使得信息缺失，所以可以采用padding填白操作来补0。其次是stride步长，这控制了滤波器kernel的卷积步长，从而影响了每次卷积操作之后的输出矩阵大小。然后是pooling池化，池化的主要作用是为了提取一定区域的主要特征，从而减少参数数量，防止过拟合，方式主要有Max Pooling和Average pooling，一般使用前者。最后是对多通道图片的卷积，这一概念一般使用在彩色图像RGB的处理上，与本课题相关性不大，不加赘述。 针对本课题而言，CNN主要为了处理文档矩阵或词向量所拼接成的文档矩阵，目的是降低模型复杂度，提取文档中的关键特征，提高训练效率和模型的泛化能力，并且通过CNN之后，能获得更低维度、更高凝练度的文档向量，也为了之后的全连接层或机器学习层做准备。