第8章自然语言文本处理8.1自然语言文本处理简介8.2学写唐诗8.3智能影评分类8.4聊天机器人•8.1.1处理模型的选择•自然语言文本处理:对输入的一段文本进行学习训练后,生成一种对应输出。•由于输入是一段自然语言文本,对其理解与上下文之间有着密切的关系,一般都会用到循环神经网络(RNN)模型。•对于输出而言,根据实际应用场景,主要有几种情况:应用在稿件编写、对图像进行描述等场景中。这类场景,都是针对一个主题,经过学习,输出一段有实际表达含义的语言文本。采用的神经网络模型一般包括了CNN和RNN模型。应用在电影评论、图书评论等情感分析场景中。这类场景,需要对输入的评价意见区别出积极或者消极的情感来。采用的模型包括基础模型、LSTM模型等。应用在机器翻译中,例如输入一段英文语句,然后将其翻译为中文语句的场景。采用的模型一般是seq2seq模型。8.1自然语言文本处理简介•8.1.2文本映射•在前面章节对机器学习算法的将讲解中,我们都是直接对数值的处理。但是,自然语言文本并不是数值,如果将这些机器学习算法应用到自然语言文本的处理中,就必须将文本转化成数值。对于实现从文本到数字的转化,其实现方法经过了不断演化,主要的方法包括如下类型:1.词袋模型(bagofwordsmodel)2.TF-IDF算法3.词的分布式表示4.Word2vec方法8.1自然语言文本处理简介•8.1.2文本映射•1.词袋模型(bagofwordsmodel)•词袋模型是将一个文本或文档看做是一袋子单词,不考虑其语法和词序关系,每个词都是独立的,然后对这一袋子单词进行编码。•词袋模型处理过程:(1)构造所有单词的词典;(2)使用该词典,采用独热编码(onehotrepresentation)对语句进行编码。•词袋模型特征:•(1)词袋模型是没有考虑词语在文本中的上下文之间的相关信息,损失了语句中单词的顺序特征;•(2)对于每一个语句,无论语句的长短,都会使用相同词典长度的编码;•(3)每一个单词都具有相同的数值化索引,无法体现单词在语音中的重要性。8.1自然语言文本处理简介•8.1.2文本映射•2.TF-IDF算法•TF-IDF(TermFrequency-InverseDocumentFrequency,词频-逆文件频率)算法。利用词频和文件频率来评估一个字词对于一个文件集或一份文件对于一个语料库的重要程度。•词频(TF):某个单词在文档中出现的频率,根据词频来确定每个单词的权重:•逆向文件频率(IDF):对于the、a等通用词,在每一篇文档中出现的频率都非常高,权重降低。而与文档主题有关的单词,仅仅会在某一篇文档中出现的频率较高,权重提高。则计算表示为:8.1自然语言文本处理简介•8.1.2文本映射•2.TF-IDF算法•结合词频和文件频率这两方面的权重设计,就找到了一种适合的计算方法,使得一个词条与主题的关联越强,其权重越大;关联越弱,其权重越小。所以对于每个单词在每个文档中的TF-IDF值可以表示为:8.1自然语言文本处理简介•8.1.2文本映射•3.词的分布式表示•分布假说(distributionalhypothesis):词的语义由其上下文决定。•词的分布式表示分为两步:(1)选择一种方式描述上下文(2)选择一种模型描述目标词与其上下文之间的关系。•词的分布式表示实现方法:基于矩阵的分布表示基于聚类的分布表示基于神经网络的分布表示8.1自然语言文本处理简介•8.1.2文本映射•4.Word2vec方法•一种基于神经网络的词分布表示的实现方法,提出并实现了两种模型:CBOW(ContinuousBagofWords,连续词袋模型)是通过上下文来预测目标词的模型;Skip-gram语言模型是从一个词文字来预测上下文的模型。8.1自然语言文本处理简介•8.1.3Tensorflow文本处理的一般步骤•对于自然语言文本的处理一般分为文本初始化、模型构建、模型训练和评估。•(1)首先需要对原始数据进行初始化,主要包括了对原始数据的的清洗,主要包括对大小写字符、标点符号、数字、空白字符以及自然语言处理中的停用词(stopword)的处理;•(2)根据处理后的数据,通过生成词汇表、转化词编码的方式,将我们需要把文字与数值之间建立一个映射字典,并对输入数据进行编码;•(3)构建处理模型,一般在循环神经网络模型基础上进行调整;•(4)训练、评估模型。8.1自然语言文本处理简介•8.2.1数据预处理对训练数据的处理,主要包括了原始数据的清洗、生成词汇表、转化词编码。1.原始数据清洗在训练文本中存在有不需要的标题、作者,格式上存在空格等字符。我们需要对这些数据进行去除、清洗•strip_line=line.strip().decode(‘utf8‘)2.生成词典提取出所有的单词,并统计各个单词出现的次数。为了避免低频词的干扰,同时减少模型参数,我们只保留部分高频词来形成词典8.2学写唐诗•8.2.1数据预处理对训练数据的处理,主要包括了原始数据的清洗、生成词汇表、转化词编码。•3.生成词编码文字是没法直接输入给模型的,所以我们需要根据词典对训练数据进行编码,然后才能使用。8.2学写唐诗•8.2.2生成训练模型由于前后文有关联,一般使用LSTM神经网络模型进行全新。选择LSTM模型为基础模型来进行改造,主要包括一个输入层、一个LSTM层、一个全连接层、一个输出层。•#创建词嵌入矩阵权重•embedding=tf.get_variable('embedding',shape=[VOCAB_SIZE,HIDDEN_SIZE])•#创建softmax层参数•softmax_weights=tf.get_variable('softmaweights',shape=[HIDDEN_SIZE,VOCAB_SIZE])•softmax_bais=tf.get_variable('softmax_bais',shape=[VOCAB_SIZE])•#进行词嵌入•emb=tf.nn.embedding_lookup(embedding,x_data)•#dropout•emb_dropout=tf.nn.dropout(emb,emb_keep)•#计算循环神经网络的输出•init_state=cell.zero_state(BATCH_SIZE,dtype=tf.float32)•outputs,last_state=tf.nn.dynamic_rnn(cell,emb_dropout,scope='d_rnn',dtype=tf.float32,initial_state=init_state)•outputs=tf.reshape(outputs,[-1,HIDDEN_SIZE])8.2学写唐诗•8.2.3评估模型我们以实现唐诗的输出为目标,分别实现随机生成一首唐诗和生成一首藏头诗。随机生成一首唐诗:•我们以“生日快乐”为藏头,生成一首藏头诗如下:8.2学写唐诗留和吹破信森罗,穆矣声中更赞谁。座上霜浓天下久,满身应是去经年。生金有气寻还远,日落云收叠翠屏。快风一瞬收残雨,乐天知命了无忧。影评分类就是从影评语言中获取人们对电影的情感评价。本节通过CBOW进行单词映射,在使用神经网络模型对电影影评数据进行情感分析。•8.3.1CBOW嵌套模型•CBOW嵌套是Word2vec方法的一种实现模型,能够比较好的体现词序关系。•实现CBOW嵌套可以分为以下五步:(1)加载数据:对需处理的数据集进行读取、加载;(2)归一化文本:对文本字符中存在大小写字符、标点符号、数字、空白字符以及没有实际含义的停用词(stopword)进行处理;(3)生成词典:对每个单词创建一个对应的索引值。为了提升效率,对于词频不够的单词都标记为RARE,作为unknown的单词。并提供单词转化为索引值的方法;(4)创建词向量训练模型:CBOW模型是将上下文窗口内的单词嵌套放在一起,用来预测目标单词。训练模型采用最简单的神经网络模型。输入层为独热编码(onehot)方式,经过一个隐藏层,然后进行输出。由于结果的稀疏性太强,使用NCE损失函数。(5)训练词向量:使用数据集训练词向量,并保存模型信息。8.3智能影评分类•8.3.2构建影评分类模型对数据采用CBOW嵌套模型进行单词转化,对于分类算法模型采用逻辑回归神经网络模型。1.加载数据•对影评数据集中的正面评价数据和负面评价数据,随机的区别为训练数据集和测试数据集来进行训练和验证。2.构建模型神经网络模型采用最简单的模型:包括一个输入层、一个隐藏层和一个输出层。损失函数选择逻辑回归中最常用的sigmoid方式。8.3智能影评分类•8.3.3训练评估影评分类模型使用训练集进行训练,影评分类只简单的分为正面评价和负面评价。在使用测试集进行评估,运行结果如图:•可以看出二类逻辑回归神经网络模型效果并不理想8.3智能影评分类•自然语言的人机交互发展过程中,主要经历了三个阶段:第一阶段,选用的技术是特征工程,通过大量的if,else进行逻辑判断。第二阶段,选用的技术是检索库。即建立一个问题与答案的检索库,当给定一个问题或者聊天时,从检索库中找到最匹配的答案。第三阶段,选用的技术是深度学习。通过对语料的大量训练,可以根据输入,生成对应的输出。目前,聊天机器人正在从检索库逐步发展到深度学习的技术演化中。对于深度学习的算法模型,最流行的处理模型是Attention机制的Seq2Seq模型。8.4聊天机器人•8.4.1Attention机制的Seq2Seq模型1.Seq2Seq模型SequencetoSequence,是一种翻译模型,把一个序列翻译成另一个序列。使用一个循环神经网络模型作为编码器,另一个循环神经网络模型作为解码器,通过编码输入、解码输出两个环节达到一个序列到另一个序列的过程:编码:输入序列X使用编码器编译为语境向量C的过程。解码:将语境向量C通过一个RNN解码器中进行解译,从而获取对应概率最大的词汇的过程。8.4聊天机器人•8.4.1Attention机制的Seq2Seq模型2.Attention机制Attention机制即注意力机制。加入Attention机制后,会对输入的上下文进行一次基于权重的筛选。通过这种加权的方式,让神经网络能够更好的利用语言序列在时序上的结构关系。3.Tensorflow方法•在Tensorflow中针对seq2seq模型提供了相应的函数,在tf.nn.seq2seq文件中,主要有以下5个:8.4聊天机器人basic_rnn_seq2seq(encoder_inputs,decoder_inputs,cell)tied_rnn_seq2seq(encoder_inputs,decoder_inputs,cell)embedding_rnn_seq2seq(encoder_inputs,decoder_inputs,cell,num_encoder_symbols,num_decoder_symbols,output_projection=None,feed_previous=False)embedding_tied_rnn_seq2seq(encoder_inputs,decoder_inputs,cell,num_encoder_symbols,num_decoder_symbols,output_projection=None,feed_previous=False)embedding_attention_seq2seq(encoder_inputs,decoder_inputs,cell,num_encoder_symbols,num_decoder_symbols,embedding_size,num_heads=1,output_projection=None,feed_previous=False,dtype=None,scope=None,initial_stat