1 前言
2 收集数据
3 探索数据
4 选择模型
5 准备数据
6 模型-构建训练评估
构建输出层
构建n-gram模型
根据前面章节的描述,n-gram模型是独立地处理分词,与原文中的单词顺序不相关。简单的多层神经感知(逻辑回归)、梯度推进机、支持向量机,这些都属于n-gram类型,这些模型利用的信息与原文的顺序无关。
实践证明,多层神经感知(multi-layer perceptions,MLPs)模型比其他模型的表现更佳,MLPs模型定义简单而且容易理解、能提供优越的准确度以及消耗更小的计算资源。
神经网络
在一个神经网络模型中,至少需要包括一个隐藏层,一个深度神经网络模型中,需要包括多于一个隐藏层,如下图所示,包括两个隐藏层的深度神经网络。
如上所示,从左到右,input layer是输入层,输入用于机器学习的特征向量集合,中间两个层hidden layer是隐藏层,first hidden layer是第一个隐藏层,sceond hidden layer是第二个隐藏层,每个隐藏层中包括的元素(unit)是神经元(neuron),每个神经元提供机器学习的能力,前一隐藏层的每个神经元都与后续的隐藏层的每个神经元实现连接(全连接层,稠密层dense)。output layer是输出层,主要是输出分类。
神经元
一个神经网络的每个隐藏层都包括不同的机器学习单元,该单元被称之为神经元(neuron),每个神经元都执行如下所示的两个步骤:
步骤1: 每个输入值与其对应的权重乘积再相和,得出权重和 |
步骤2: 输入步骤1的权重和到对应的神经元的激活函数,输出到下一层 |
如下所示的代码实例中,运行tf.keras技术框架实现两层的MLP模型,在两层中间,为了防止数据样本的过度拟合,增加两个用于处理信息规则化的层,其作用是在梯度下降的步骤中删除随机的特征选择。
mlp_model函数对应的输入参数说明如下所示,该函数返回MLP模型:
layers 稠密层(全连接层,前后层的全部神经元都发生连接)的数量 |
units 层输出的维度,与稠密层的神经元相关 |
dropout_rate 防止过度拟合操作中,删除的比率 |
input_shape 已标准化处理的数据样本的特征向量集合 |
num_classes 分类的类别数,二元分类或者多元分类 |
构建序列模型
序列模型是与原文的单词顺序有关,因此,序列模型具备从原文相邻的分词中学习的能力。序列模型主要包括CNN卷积神经网络与RNN循环神经网络,这些模型的数据样本使用序列向量集的方式进行预处理。
一般情况下,序列模型需要学习大量的参数。在序列模型中,第一隐藏层(first hidden layer)是一个嵌入层(embeding layer),该层主要用于学习一个稠密向量集的空间中的单词之间的关系,因此,学习的数据样本越多,该层掌握的单词之间的关系就越丰富。
embeding layer
嵌入层是神经网络中第一个隐藏层,主要用于从高维度的特征集合向低维度的特征集合进行学习,也就是,输入一个高维度的特征向量集合,通过嵌入层的学习,输出一个低维度的特征向量集合,因为维度的降低,在神经网络的学习过程中能大规模地节省计算资源、以及提供更加准确的训练结果。
例如,目前地球上具有大概73000种树分类,假设,树分类作为机器学习的模型的特征向量集合,则神经网络的输入层的一个数据样本中包括73000个元素(one-hot向量集),假如,其中一个数据样本的只包括一个树分类baobad,则one-hot对应的特征向量集如下所示:
如上所示,该数组是一个稀疏向量集,仅baobad对应的索引位置是1,其他索引位置是0。如果不增加嵌入层处理,则学习过程将耗费大量的时间,如果增加嵌入层,则嵌入层只需要学习一个包括12个维度的向量集合(嵌入向量空间,embedding space)。
embedding space
嵌入向量空间是从高维度的向量空间向低维度的向量空间的映射而形成的。理论上,嵌入向量空间的存储组织架构能表示出有意义的数学结果,例如,在嵌入向量空间中,向量集之间的加减能解决单词之间的类比任务。
embedding vector
嵌入向量集是一个浮点类型数值的数组,嵌入层使用这些数组进行训练,如前面所述地球上的73000种树分类,对于baobab类型树种的嵌入特征向量集如下所示:
如上所示,一个嵌入向量集并不是一系列的随机数,嵌入层通过训练而确定这些数值,这个训练方式类似于在神经网络中通过训练学习权重的方式,嵌入向量集中的每个数值都是与某些树种分类的特征相关。
嵌入向量集的明显的数学特性是相似的项具有相似的浮点数值集,如上例中的树种分类,相似的树种分类之间具有相似的浮点数值集,而不相似的树种分类之间具有不相似的浮点数值集,例如,红木树种分类与红杉树种分类具有更多相似的浮点数值,而红木树种分类与椰子树种分类具有更少相似的浮点数值,嵌入层每次对数据样本的训练而输出的嵌入向量集是不相同,即使每次输入的数据样本都相同。
对于给定数据集的单词并不是唯一的,相同的单词也会出现在其他数据集,因此,不同数据集之间可以相互学习单词之间的关系,也就是,嵌入层可以从其他嵌入向量空间中学习所得融入到当前嵌入层的向量空间中,这些被嵌入的向量空间被称之为预训练嵌入向量空间,被引入的其他嵌入向量空间用于学习过程的开始阶段。
一些有名的机构可以提供预训练的嵌入向量空间,这些向量空间是通过大量的训练而学习所得,可以运用于当前文本分类的机器学习过程中,其链接如下所示:
https://nlp.stanford.edu/projects/glove/ |