VKYH-2017-8-17

未实践之事,无评价之理。


  • 首页

  • 关于

  • 归档

对NLP领域Mask机制总结与思考

发表于 2021-01-04

本文关键字: Mask

注意:如果看不到本文图片或者图片未能完全加载,请链接VPN翻墙或者更改HOST文件切换代理。

Mask机制即为掩码机制,其定义为遮罩某些文本元素的方法,该机制在近年来NLP各领域取得了广泛应用,本文将对此机制进行总结与思考。

1、Padding Mask机制

在NLP训练过程中,一般将不同长度的文本句通过补长或者截断处理,将所有句子样本变为长度一致,输入到模型中进行训练。若以”小吃很不错”,

则文本补长过程如下图所示:

图1 padding_mask

在RNN系列变式网络过程中,为了让模型计算过程不再关注后续补零元素,则需要通过Padding Mask机制对文本序列进行处理,去掉句向量中补零位置包含的信息。

首先,Mask矩阵如下所示:

图2 padding_mask

即如上图所示文本序列中,非零元素对应的mask矩阵元素都为1,含0元素为0,则只需要将mask矩阵与原始句向量进行对应相乘,即可去掉原始序列中含零元素的嵌入信息。则在RNN系列模型

的后续计算中,将不会在关注补零部分的元素。

2、Attention机制中的Mask

在NLP领域常见的注意力机制中,Mask应用也十分广泛,尤其在自注意力机制中,亦然如此。自注意力过程如下图所示:

图3 注意力机制

在注意力过程中,key矩阵中每一个Token向量与Query矩阵中每一个Token向量进行相似度匹配,从而得到形状大小为NXN大小的相似度分数矩阵。在该过程中,如果不对句向量进行mask处理

,那么将在下一个步骤通过sofamax计算概率矩阵的过程中,引入含0位置的信息,导致噪音增加。

因此需要引入padding mask机制,将文本序列中补零位置的嵌入元素数值变为-lnf(负无穷大),变为如下图的矩阵后,则通过后面softmax计算概率时,相应元素所得到的概率将为0。此过程也将表示注意力过程

将忽略掉含零位置的信息。

图4 padding_mask

在Multi-head attention机制中,多组self attention并行处理数据。不同self attention分别对应不同的head,具体mask矩阵过程图如下图所示:

图5 mask

则通过加入head mask机制,引入mask矩阵,从而确定最终输出结果包含哪些head信息进行输出。

3、Transformer decoder端中的Mask

在decoder端中,当模型进行target序列预测时,为了避免序列解码过程中受到后面时间步的文本信息影响,则需要加入MASK机制进行遮罩处理,具体如下图所示:

图6 mask

以序列“ABC”为例子,向量[0.8,0.5,0.6,0.5]为该句对应的句向量。当使用自注意力机制时,对于将序列按顺序输入模型的情况,等价于RNN中每一个时间步输入一个字词信息。则若以A词为

例,为了避免匹配过程中受到A后续的分词信息影响,从而需要设置图中三角矩阵进行MASK处理。则即为decoder端MASK机制。

4、语言模型中的Mask

在mask language model中,mask过程如下图所示:

图7 mlm

该语言模型,通过将文本中某些Token进行遮罩处理,然后再后续过程中通过遮罩词的上下文,对遮罩词进行预测,从而得到遮罩词的Embedding向量。尤其需要注意的是mask过程需要按照如

下规则进行处理:

  • 1、随机选取样本中15%的Token进行MASK处理。

  • 2、在具体MASK过程中,会从选取15%的Token中,按照80%的比例,用MASK标志替换相应Token;然后按照10%的比例,用一个随机的单词替换对应的Token;最后按照10%的比例,保持原始token不变化。

5、对Mask机制再思考

其实,通过以上实例可以得到一个有效结论,Mask机制可以起到信息筛选作用。鉴于此将Mask机制在注意力机制范畴内进行说法扩充,

描述如下:若存在某文本序列[x1,x2,x3,x4,x5,x6,x7],其中X2,x4为关键词信息,若只想让注意力过程得到这两者信息,该如何操作?答案还是Mask。

如下图所示:

图8 局部注意力

如上图所示,只需要指定所在位置关键词的mask矩阵,从而将非相关元素屏蔽掉,便可在最终计算score矩阵时,通过softmax将非相关词权重设置为0。从而得到含有关键词的x2和x7的权值

矩阵(去掉了其他含0元素)。这也是具体的局部注意力过程。

Mask,彩!

从Seq2Seq到NLG

发表于 2020-07-10

本文关键字: Seq2Seq,Attention

注意:如果看不到本文图片或者图片未能完全加载,请链接VPN翻墙或者更改HOST文件切换代理。

NLG,即为文本生成领域,英文全称为Natural Language Generation。该领域常见于机器翻译、对话系统、阅读理解、序列标注等任务。本文将尽可能对该领域常用技术理论进行总结。此外,由于从模型结构角度理解seq2seq并不全面,本文将从模型具体应用过程进行理论阐述,以便于读者更好的了解该领域常规方法。

1、seq2seq模型目标函数

NLG中常规方法即为Seq2Seq模型。该模型是一种端到端的模型结构,模型结构如下图所示,

图1

其包含要素为起始序列(Source Sequence)、Encoder-Decoder模型结构、目标序列(Target Sequence)。其中Encoder(编码器)端作为模型重要的特征提取器,作用是将起始序列编码成相应的语义向量c(Context Vector),Decoder(解码器)端主要利用Encoder端的语义向量和解码器本身的隐层向量完成序列预测过程。

其训练的目标数学原理也较为直观,假设存在X={x1,x2,x3,x4,…,xn}作为起始序列,Y={y1,y2,y3,y4,…,yn}作为目标序列,同时训练过程中存在多组训练句子构成的数据集(X,Y)={(X1,Y1),(X2,Y2),…,(X3,Y3)},则对于每一个句子的训练与预测过程而言,将是追求概率P(Y|X)达到最优解的过程。具体目标函数表达式如下所示:

图2

对两边取对数log运算,并通过极大似然处理以后,便得到了最终目标函数:

图3

式子中θ即为训练参数,n表示句子数目。此时对于单个句子预测条件概率P(Y|X)而言,将通过贝叶斯乘法公式与句子中字词分布概率产生联系。若以(X,Y)某一个句子对举例而言,数学过程如下所示:

图4

以上过程便将句子层级的概率求解与文本内部字词概率分布产生了关联,从而对模型训练过程提供了数学指引。

2、初始seq2seq训练过程

Seq2Seq模型运用过程主要包含训练阶段(Training)与推断阶段(Inference)。其中,Seq2Seq模型刚提出来的时候,其训练过程如下所示:

图5

图中,以机器翻译任务为例,在模型训练过程中首先将目标序列(Target Seq)进行数据预处理,添加序列起始符号和序列终止符号。后续过程中,将起始序列输入到词嵌入层完成查表操作后,后续通过Encoder模型结构编码成相应的context vector。图中以GRU网络作为特征提取器为示例,则将使用第K个时间步输出的隐层向量H(K)作为context vector的特征表征进行输出。后续decoder端将利用context vector和前一时刻输入的目标序列字词信息预测下一个时刻目标序列信息。该训练过程中,目标序列和起始序列都经过权值共享的预训练词向量模型进行嵌入处理,从而确保模型词向量维度统一。在模型decoder阶段,初始输入的词向量也经过词向量模型嵌入产生。

该模型训练方法较为直接,但也存在一个很大的问题。如果模型decoder阶段在进行预测时,中间某一步出现错误,则会导致后续预测过程全部产生错误,最终导致整个模型由于错误预测序列信息从而学习到偏差较大的权重,从而影响模型效果。鉴于此模型将引入teacher forcing机制进行训练过程改革。Teacher forcing机制如下所示:

图6

Teacher Forcing机制是在训练过程中,在decoder端将第T时刻的目标序列作为输入,将第T+1时刻的目标序列作为标签进行训练。在模型结构中,将引入softmax层将decoder获得的句子隐层状态量转化为字词分布概率,从而与T+1时刻的序列值对齐。最后,该过程将仅仅存在于训练阶段,在推断阶段并不存在此机制。

此外,在该机制训练过程中,可能存在decoder端模型输出预测序列字符与真实字符不一致情况,扩大训练误差。鉴于此将可以采取Scheduled Sampling策略。在该策略中,若某一个时间步模型输出序列字符和真实字符不相等时,便将从真实的字符与模型输出字符中,通过掷硬币的方式(或者一种50%几率的随机决策过程),选取一个字符作为下一个时间步的输入。该策略过程如下图所示。

图7

3、初始seq2seq推断预测过程

在seq2seq模型推断过程中,由于缺少目标序列作为输入,因此teacher forcing机制将无法使用。该模型推断步骤包含GreedySeqrch、BeamSearch、Random Sample三种方式。其中Greedy Search方法如下图所示:

图8

在解码过程中,decoder端输入encoder端编码的到的隐层向量(图中未画出此部分)
和目标序列初始时刻的起始编码向量后,decoder端模型将从第一个时间步开始解析向量,然后得到相应的隐藏层S,后续通过softmax处理,将其此时隐藏状态矩阵内部可能被划分为各个类别的目标词概率预测出来,后续将选择概率最大值输出,从而作为预测序列的最终输出值。在该过程中,decode model通常使用RNN系列模型,标识符向量再有的方案中采用随机初始化进行处理。当decoder端第一个时间步预测过程结束后,将会把此时模型解析出的的隐藏状态值S0作为下一个时间步的初始输入,后续过程将与此前过程一致,不在详述。待解析到最终出现标识符时候便终止预测过程。若将推断过程用树形结构表示出来,则如下图所示:

图9

图中每一层树表示一个时间步解析过程,而红色的解析方向即为模型最优解,即红色解析路线能使得模型产生的目标序列概率达到最大。但该方法也存在较大问题,即在每一步解析过程需要选择满足最大概率分配的词进行输出,这种通过局部最优解产生全局最优解的贪心策略,其本质上并未能从整体最优上考虑,因此很难确保结果是全局最优状态。比如若某几个时间步预测概率较大,接近于1,而其他几步概率较小,则此方法解析过程得到的最优解很可能并不是接近于真实值的预测结果,将会存在较大误差。最终导致产生的序列缺乏语义连贯性。

鉴于此,是时候让BeamSearch机制上了!BeamSearch机制如下图所示:

图10

BeamSeach机制需要设置一个参数Beam size值,设为K(或者B),其物理意义表示每个时间步中条件概率较大的TOP K个结果。如上图所示,对于为”ABC”的目标序列而言,第一个时间步挑选3个最优概率值参与下一步decoder解析过程,当时间步T=2
时,此时从9种解析情况中选取条件概率排名前3(图中标红色的项)的继续参与后续过程,待最后输出K个最优解。最终预测得到的序列将从这K个最优解中进行选择。从检索过程而言,当K=1时,BeamSearch过程也就是Greedy过程。但当K!=1时,其检索空间大于Greedy Search方法,从而易于寻找全局最优解。

除此以外还有一种解码策略Random Sampling。该策略与Greedy search类似,唯一的区别在于decoder每一个时间步解码生成字词分布概率时,将不在选择概率最大的单词输出,而是随机采样输出某一个字词作为预测序列字词。具体流程如下图所示:

图11

4、带注意力机制的seq2seq模型

伴随着注意力机制发展,将seq2seq模型与注意力机制结合起来也逐步拥有了良好的理论基础。Seq2Seq与注意力机制结合的方案类别较多,本文将选取几个常见的进行阐述。首先,对于内部注意力机制而言,seq2seq模型中可以在Encoder端加入自注意力机制,从而提升encoder端文本特征提取能力,本文将不在详述,模型结构如Transformer一样。但有一点需要注意,当时用自注意力机制时,需要加入位置特征向量来记录原始序列中每一个分词的位置。此外在decoder端使用自注意力机制时,为了避免序列解码过程中受到后面时间步的文本信息影响,则需要加入MASK机制,具体如下图所示:

图12

以序列“ABC”为例子,当时用自注意力机制时,对于将序列按顺序输入模型,等价于RNN中每一个时间步输入一个字词信息。则若以A词为例,为了避免匹配过程中受到A后续的分词信息影响,从而需要设置图中三角矩阵进行优化处理。而对于外部注意力机制而言,其中一种方案如下所示:

图13

注意力机制计算过程如下:

  • 1、假设模型从Encoder端输出hidden State向量为=(X(0),X(1),X(2),…,X(T)),假设当前decoder端解析得到的hidden state 为S0。

  • 2、首先将S0与每一个时间步的Encoder端hidden staten向量进行相似度匹配,计算相似性分数,从而得到向量Score(S0,X(t))=((S0,X0),(S0,X1),(S0,X2),…,(S0,XT))
    相似性分数计算方法如下所示:( 式子中V、W1、W2为模型训练过程中待学习参数。)

图14

  • 3、通过softmax计算将分数转化为具体相似性权值矩阵a。

图15

  • 4、利用注意力权值矩阵a进行加权求和,得到句子层级的context vector(C)。数学计算过程如下:

图16

  • 5、最后得到decoder下一个时刻隐藏状态值S1=F(S0,Y0,C),该位置输出为G(Y0,S0,C),其中G,F为激活函数

最后以机器翻译为例,附上一副全局的带注意力机制的seq2seq模型过程图:

图17

5、模型评估指标

在文本生成任务中,常用模型评价指标为BLEU、Rouge系列。则假设在某个文本生成项目中,模型生成序列为G,真实序列为S,则此部分内容将以上述例子进行阐述。对于BlEU指标而言,首先根据下列公式计算S序列与G序列n-gram词组彼此匹配(Match)的准确率。(此处匹配的定义为模型生成序列S中的N-Gram词组出现在真实序列G中的情况):

图18

此外若生成序列G长度远远小于S,则将会产生如下惩罚因子:

图19

则最终BLEU指标计算方法如下:

图20

BLEU是站在Precision角度来计算N-gram词组准确率,而另一种站在Recall角度来计算N-gram词组找回来吧的常用评估标准为Rouge,由于成稿时间限制,细节不在阐述,待后面补全。
本文到此就暂时结束了,NLG领域最具有灵魂的当属对话系统,这期间还涉及到强化学习应用过程,期待后面能够掌握更多的技术来完善本文!

一文解读Synthetic-attention机制

发表于 2020-06-01

本文关键字: Synthetic,attention

注意:如果看不到本文图片或者图片未能完全加载,请链接VPN翻墙或者更改HOST文件切换代理。

2020年5月25日,谷歌发表了一篇对自注意力机制的深度思考大作,笔者仔细读后顿感耳目一新。鉴于此,笔者将在此进行初步解读和阐述相应机理。首先,我们回忆一下传统自注意力机制过程。自注意力机制过程图如下所示:

图1 self-attention机制

首先,假设输入一个句子,将该句转换为相应的数值向量为X={W0,W1,W2,W3}。首先通过下面三个计算式将句子每一个词粒度(Token)元素W0,W1,W2,W3通过线性变化,转换为相应词粒度向量,计算式如下所示:

图2 self-attention机制公式

式中WQ、WK、WV表示待训练确认的超参数。待得到相应Query、Key、Value矩阵后,将Query矩阵与Key矩阵进行相似度匹配,根据下面的式子计算得到相似度矩阵f(Key,Query)。

图3 公式

待得到了相似度值后,将相似度值进行归一化处理得到注意力权重矩阵a_j,通过公式5进行计算。

图4 公式

在计算式(5)中,〖f(Key,Query)〗_i表示Query矩阵与Key矩阵中计算得到的相似度分数矩阵内部的任意一行向量。此外,j的取值范围为[0,n],n表示句子长度。经过该式处理后,便将Query矩阵中一个词粒度的相似度向量转化为数值范围为0-1之间的注意力权值向量a_j。得到权值向量后,便通过计算式(6)将权值向量转换为句子层级的注意力矩阵AttentionValue。

图5 公式

计算式中j值的取值范围为[0,n],其中n表示句子长度。注意力矩阵AttentionValue内部元素概率大小不一,其本质将呈现出重点词语与按照句子语法规则排布的词组匹配所得到的概率大小。
那么,对于自注意力机制而言,Query、Key、Value矩阵是必须的吗?为了解答这个问题,首先我们对传统的自注意力计算过程进行简单的数学变化来看看。
假设自注意力机制输入的token所在序列为X={X0,X1,X2,…,Xi},序列长度为L,模型中词向量宽度为d,则矩阵X中每个词映射到词向量宽度后构成矩阵维度为(L,d)。在传统自注意力机制计算中,相似度计算函数f(Key,Query)将输入形状为(L,d)的矩阵变换为(L,L)。因此,在Synthetic注意力机制中假设不需要内部Token相似度计算过程,将使用如下式来代替上述矩阵运算过程:

图6 公式

其中函数F(.)为含参类型的函数,其作用是将每一个token所构成的向量由d维度映射到L维度。同时,我们将传统自注意力机制中的value矩阵忽略掉,用如下式来替代:

图7 公式

该式子作用为由原始形状为(L,d)的序列矩阵X得到形状大小相同的矩阵G(X)。到此处,我们便可以得到全新的自注意力机制计算的数学方法:

图8 公式

其中注意力机制输出值Y(X)的形状为(L,d),这里和传统Transformer中的自注意力输出矩阵大小相同。到这里,我们便可以得到如下2点条件:

  • 1、数学式7-9即为内部注意力机制前向计算的一般性数学表述过程,其描述范围大于传统基于相似度匹配的描述过程,从而脱离了相似性匹配的计算过程。

  • 2、新引入的动态方法F(X)、G(X)是与传统内部注意力计算过程中所用方法相比,具有等同的矩阵维度变化过程,计算方法多种多样。

1、Dense Synthesizer

图9 公式

谷歌这篇论文中,Dense Synthesizer数学过程如上所示,其使用两层全连接层进行矩阵变换,从而替代传统相似度匹配过程。其中σR为ReLu激活函数。模型结构图如下所示:

图9 Dense Synthesizer

该混合模型用全两层连接层替代了相似度匹配过程提供相应的矩阵变换过程。从数学表达过程来看,计算式编号10->7->8->9即为整个全连接混合网络前向计算过程。

2、Random Synthesizer

随机初始化的混合模型数学过程见式11。该网络将注意力机制中能够使得形状为(L,d)的矩阵变为(L,L)的函数方法舍弃掉,从而使用形状为(L,L)的随初始化矩阵R作为Softmax函数的输入。

图10 Synthesizer

该模型网络结构图下图所示。矩阵R随机初始化作为模型输入,在模型训练过程中R矩阵也将为可训练矩阵,从而确保模型可以得到想要的输入信息。

图11 Synthesizer

3、Factorized Models

由于模型在softmax方法中的矩阵宽度为L,很可能导致模型含有参数量较大,从而对较大的模型训练产生难处。鉴于此,本文对softmax函数的输入矩阵进行了矩阵分解,从而探究了矩阵分解情况下的注意力机制表现情况。

*3.1、Factorized Dense Synthesizer**

图12 Synthesizer

首先,模型Token向量,通过式子12的全连接网络假设函数计算得到相应分解向量A,B。在计算过程中,向量A宽度由L变为a,向量B宽度由L变为b,且aXb=L。后续通过式子13计算得到形状为(L,L)的矩阵C。

图13 Synthesizer

式子中H(.)表示某种向量复制方法,可以将向量A宽度a变为ab,将向量B宽度由b变为ba。为了避免上述变化过程中,向量A和B中可能包含相似信息,因此这里将所得的隐层向量H(A)与H(B)通过对应元素相乘的形式进行输出,从而得到c向量宽度为ab=L。由于具体向量变化过程中,是由文本序列变化而来,所以对于长度为L的文本序列而言,当多个Token经过上述变化过程后,进行向量合并便得到了形状为(L,L)的矩阵C。

图14 Synthesizer

最后通过式子14便得到了模型最终输出矩阵Y。

*3.2、Factorized Random Synthesizer**

图15 Synthesizer

该模型来源于Random Synthesizer模型,其将输入到softmax方法中的随机初始化矩阵R分解为形状大小为(L,K)的矩阵R1与R2的转置矩阵乘积形式。论文在具体实践中,K值远远小于L大小,同时基于实践意义考量,K的最小值为8。该模型中R1,R2矩阵也是可训练矩阵。

4、Mixture of Synthesizers

从前文可知,在替代相似度的混合计算过程中,也可以通过矩阵相加的方式进行模型构建。改论文中通过一系列构造方法得到了如下式的混合计算的注意力模型。

图16 Synthesizer

其中α表示模型学习的权重,S(.)表示矩阵混合运算的函数方法。但混合类型的模型中,矩阵维度变化过程依然需要严格遵循2017年的Transformer中的自注意力机制矩阵变化过程,也就是说,二者相比输入输出矩阵形状大小没有变化。最后,该文中将Random Factorized 和Dense Synthesizers进行了混合,从而得到了见式17所示的混合模型。

图17 Synthesizer

5、Synthesizers Attention汇总以及部分实验结果

该论文中所提出的Synthesizers Attention汇总如下,从图中也可以看出具体的条件。由于语言模型迁移训练,是当前NLP最重要的一个场景。本文在NMT实验中,所得结果如下。
在融合了Vanlia Transformer的Synthesizer (Random)方式中,其得到的结果表现效果最好。

图18 Synthesizer

图19 Synthesizer

结果震撼了!随机初始化的ATT竟然有效果!竟然work!这确实挺令人感到震撼。在语言模型训练过程中,融合了Vanlia Transformer的Synthesizer (Dense)方式中语言模型的困惑度表现较优。当然,该文还有其他实验结果,各位读者可以结合自身情况再次查阅下其他任务以做评判。

6、一些小的Tips

写到这,我也有一些个人想法在这,提出来以便于大家思考一下:

  • 1、 Query、Key、Value矩阵是否是注意力机制必须的?

其实从该论文中,个人觉得其换了一种描述方式来阐述注意力机制过程。这种描述方式相比于之前的token相似度匹配过程描述的范围更大,从而更容易包含更多的理论情况,从而通过实验找寻最优解。而传统的相似度匹配过程,可以理解为一种基于检索形式的内部机理过程描述,两者并不冲突,可以看做为承前启后的观点。

  • 2、新引入的动态方法F(X)、G(X)是与传统内部注意力计算过程中所用方法相比,具有等同的矩阵维度变化过程,计算方法多种多样。

其实个人觉得是否能够将Dense更换为CNN等其他模型结构,进行实验以提升模型效果。此外G(X)部分变化过程应该也可以创新。

  • 3、个人仍然觉得此文有些许不足

该论文对G(X)阐述不是很详细,在具体实验中是怎么变换的,个人依然觉得有些不明白之处,还需更进一步关注细节。

多标签分类场景处理思路

发表于 2020-03-05

本文关键字: 多标签,分类,组合二分类模型,sigmoid
1、多标签分类场景定义

常规的文本分类场景主要为单标签多类别分类问题。而对于描述用户画像之类的场景而言,仅仅用单个标签词将不足以准确描述用户特征情况。现实中将从几个不同角度进行用户画像描述,这也就引出本文模型场景——多标签分类(Multi-label)问题。

图1 多标签分类场景

多标签分类问题(Multi-label Task)如上图所示。假设输入数据集集合为X={X1,X2,X3,X4,X5},X集合中每一个元素Xi表示一个句向量。而对应的集合Y={Y1,Y2,Y3,Y4,Y5}经过独热编码处理,即表示从5个不同角度描述各个句子的标签类别。而与之难以区分的场景为多类别标签分类问题(Multi-class),具体场景如下图所示。

图2 多类别分类场景

在相应多类别分类数据中,每一个数据实例对应的分类标签为确定类型标签,但不同类别的标签同属一种角度描述实例的标签类别。对于多标签分类问题而言,不同角度的标签集合Y={Y1,Y2,Y3,Y4,Y5}内部存在相互独立和相互关联的两种情况。不同情况模型构建思路也将不同,具体将在下节进行讲解。

2、多标签分类场景模型构建方案

2.1 标签角度相互独立的情况

2.1.1 转化为二分类方法

对于多标签分类问题,若标签相互独立,且不相关,则第一种处理思路如下图所示。将各角度标签作为不同数据实例的分类标签,通过单独构建二分类模型进行建模处理。按照此方法,若存在K个角度描述的标签,则需要构建K个二分类模型。对于每一个二分类模型而言,其输出类别为“是/否符合此类标签”。该方法对于研究领域而言,建模思路简单,模型效果较好。但工程领域而言,该方案需要重复性模型构建过程,模型数量过多的情况下将不利于模型部署工作。鉴于此,此类方法并非多标签分类场景下的最优解。

图3 多个二分类场景

2.1.2 转化为多分类方法

图4 多分类场景

如上图所示,对于多标签分类场景而言,其特点在于标签角度繁多,若能以一种方式将分类方式构建到一个模型中进行处理,则将大大简化具体分类计算复杂度。在转化为多分类策略中,其通过标签合并做法,将完整的Y={Y1,Y2,Y3,Y4,Y5}看做一个大类的合并标签集合。在模型分类器过程中,仅仅只需要进行一次softmax运算,即可转化为相应标签类别。该方法相对于K个二分类而言效率较高,但其问题在于标签合并过程中,无法确保各合并标签数据集分布特性。很可能出现合并标签中,某些类别数量较少,某些类别数量较多,从而导致模型构建过程中存在大量训练偏差。该方法应在标签合并过程中,通过欠采样的数据处理方式,以确保各类别数据分布比例适中为核心目标。最后,对于各类别比例适中的数据集便可使用此方法。但该方法页不适用于多标签存在关联的场景,即在多标签集合中,内部各标签Y互换位置也可能存在整体标签合并集合不一致的情况。

2.2 标签角度相互关联的情况

对于类别标签集合Y={Y1,Y2,Y3,Y4,Y5}而言,其内部标签若存在相互关联情况,从而导致传统分类方法无法应对此类需求。目前常见做法,是通过构建大规模标签类别词典进行相关词检索,同时辅以词相似度计算过程,倘若在目标文本中找到了相应标签词或者相似词组,则该文本中即包含相应标签。该方法需要投入大量精力进行语料库归纳,检索,不够智能。
对此场景而言,还有一种思路是转化为序列生成场景,但相关过程将在详细讲解了seq模型之后进行补充。

2.3 通用建模方法

那么,是否存在一种通用情况呢?目前而言还真有,可以将其称为组合二分类模型。具体建模思路如下。组合二分类模型结构如下图所示,将输入分类器的(batch,maxlen,d)的文本特征张量进行一系列维度变化,最终生成形状为(batch,Y)的分类结果矩阵。该矩阵长度batch表示句子实例,Y表示每个句子的多个角度的标签合并集合。若标签YI产生概率大于等于sigmoid函数临界条件,则该句子实例对应的该角度标签为1,反之为0. 核心通过设置sigmoid激活函数。该方法的核心在于通过矩阵运算,同时结合sigmoid激活函数。将多个角度的标签输入到同一个模型中,通过最后输出各类别标签状态矩阵,进行组合二分类处理,从而得到句子各类别的分类结果。

图5 组合二分类模型

对于组合二分类过程,本文将进行如下矩阵变化实验进行流程演示:

图6 模拟分类器输入矩阵

  • 1、 假设模型输入到分类器的矩阵如上图所示,该矩阵形状为(6,10),而对应的类别集合为Y={Y1,Y2,Y3,Y4,Y5},其中宽度10表示文本信息展开量,长度6表示句子实例个数。对于矩阵而言,每一行即表示相应句子的句向量。

图7 分类结果矩阵

  • 2、 其次将其输入到线性层中,通过矩阵运算改变矩阵维度。后续经过sigmoid激活函数处理。最终得到分类结果矩阵如上图所示。对于分类结果矩阵而言,其长度为6,表示句子数目,宽度为5表示对应的标签类。矩阵内部元素表示对于每一个句子而言,能被归类到某一类标签的概率大小。

图8 标签类别矩阵

  • 3、后续对于分类结果矩阵,通过选取sigmoid激活函数阈值0.5,来进行类别转换。凡是概率大于等于0.5的分类元素,其对应的标签类别矩阵值为1,反之为0。最终生成如上图所示的标签类别矩阵。图中该矩阵形状为(6 , 5),即表示每一个句子能被归为的标签类别情况。

综上即为组合二分类模型流程完整流程,各位朋友可以自行尝试下。最后,torch技术非常符合自身需求,后期相关实践将无缝对接该技术。

最后,原创不易,若有空请博主喝杯咖啡,将会大大激励更多博文产出哟!二维码如下,hhh:

图9 二维码

Hello World

发表于 2020-01-07

本版本仅适用于Win环境
本文关键字: Hexo绿色版,Hexo便携版,Hexo配置,Hexo,U盘

Hexo是一个快速、简洁且高效的博客框架,支持 GitHub Flavored Markdown 的所有功能;具有超快生成速度,让上百个页面在几秒内瞬间完成渲染;还拥有各式各样的插件等等。

但是就像很多教程里面写的那样,搭建 Hexo 本地环境,需要安装 Node.js、Git 以及使用 npm 进行安装和配置。这对于毫无经验的新手来说,是一个很大的挑战。同时,由于这些环境的存在,导致如果需要更换计算机的时候,重新安装配置一个新的Hexo环境,又得花费一些功夫。

所以呢,锵锵,我们整合了一个 Hexo 便携版,来简化本地环境的部署。

####版本介绍
那么所谓的便携版到底是什么?便携版就是将 Hexo 本地环境所需要的各种依赖环境的整合到一起,做成的不需要安装的版本。

本便携版(Release 1.0.0)所包含的软件如下:

  • Git: 2.7.4
  • Nodejs: 6.10.1
  • Npm: 4.4.1
  • Hexo: 3.2.2

为了便携的需要,不能配置固定的环境变量,所以除此之外还有相应的批处理文件,下文将详细介绍。

####从零开始,1分钟搭建Hexo写作环境
说了这么多,我们这就开始教你如何在1分钟内,从零开始搭建Hexo写作环境!

#####1 注册一个Github帐号

1.1 进入Github,并在右边的3个框框中分别填写 用户名、邮箱地址、账户密码,并点击 Sign up for Github;

图1.1.1

1.2 进入欢迎页面后,点击Finish sign up;

图1.2.1

1.3 进入到这一步之后(图1.3.1),先别记着点任何东西,查看你的邮箱,应该会收到如下的邮件(图1.3.2),确认你的邮件。否则,你会看到错误页面(图1.3.3)。query完毕之后在图1.3.1所示的页面,点击+ New repository;

图1.3.1

图1.3.2

图1.3.3

1.4 请在红框中的 Repository name 里面输入 用户名.github.io ( 用户名 就是你刚刚 步骤1.1 中注册的用户名),然后点击 Create repository;

图1.4.1

1.5 至此,Github网页注册的部分完毕

####2 下载HEXO Portable

2.1 访问我们的 HEXO Portable 页面,或者 Github仓库 下载最新的便携版;

2.2 双击得到的自解压文件,解压到你需要安装博客的地方,可以选择硬盘或者U盘;

####3 配置你的环境

3.1 在你的博客的文件夹,你会发现很多批处理文件,我先介绍下各个文件的用途:

  • 配置基本信息 >> 配置博客的基本环境
  • 配置Github部署 >> 配置博客的部署
  • 启动命令行 >> 启动带环境变量的Git-Bash,否则无法使用node、npm、git等命令
  • 新建文章 >> 新建一篇文章
  • 渲染并本地测试 >> 生成并本地预览
  • 渲染并部署 >> 生成并部署到GitHub
  • 重置配置文件 >> 重置_config.yml

3.2 我们继续进行环境配置,双击配置基本信息并按顺序输入以下信息:

  • 主标题:顾名思义
  • 副标题:顾名思义
  • 描述:顾名思义
  • 作者:顾名思义
  • 网站地址:填写 用户名.github.io (此处的用户名为步骤1.1中填写的用户名)
    如果您已经购买了域名,可以参看相关的文章!

3.3 双击配置Github部署并按顺序输入以下信息:

  • Github的用户名:此处的用户名为步骤1.1中填写的用户名
  • Github注册邮箱:此处的注册邮箱为步骤1.1中填写的注册邮箱

3.4 输入完毕之后,会进行测试部署,等待屏幕提示下面将进行部署测试,稍后将有一个openssh的对话框出现,请输入你的github用户密码。的时候,按回车继续;(此处的用户密码为步骤1.1中填写的用户密码)

3.5 然后继续等待,此时屏幕会出现n多行,耐心等待即可;

3.6 等待屏幕提示请访问 https://用户名.github.io 查看是否部署成功!的时候,在浏览器中输入https://用户名.github.io ,理论上可以看到你的Hexo站点!(此处的用户名为步骤1.1中填写的用户名)

3.7 至此,你的Hexo环境就配置完成了,这样你的这个Hexo博客文件夹无论移动到哪一台电脑,都能通过启动命令行出现的bash命令行,或者其余便捷的批处理文件比如新建文章、渲染并本地测试、渲染并部署进行相应的操作。

3.8 如果你在配置中出错,可以运行重置配置文件后,再重复3.1~3.6步骤

####4 开始享受纯粹的Hexo写作吧!

####5 备注

  • 本便携版以及本文均使用 CC BY-NC-SA 4.0协议;
  • 本文所有权归 QistChan & Bitmoe Inc. 所有;
  • 本便携版由 Bitmoe Inc. 维护并提供技术支持;
  • 需要技术支持可以在Github仓库 提交Issues;
  • Written with StackEdit.

Transformer模型及基于Keras的复现

发表于 2019-03-27

1.动态词向量技术
先说以下动态词向量吧。这个东西其实本质上来讲还是需要由word embedding基础上进一步处理。其借助于seq2seq模型,经过encoder端将文本序列动态编码成数值矩阵,其本质上已经脱离了传统词向量模型基于词相似度生成的特征矩阵。对于动态这种词的理解,可以按照Transformer来理解。在encoder端中,通过几层self-attention并行处理,其依据序列语言模型结构,动态计算每一个词的att权值,从而给了每个词的分布概率。最终依托此权值进一步生成attention数值编码。这种迁移学习的编码方式得到的矩阵中包含了文本上下文信息,也解决了部分语序理解问题。

而传统的词向量模型,只是单纯依托于词相似度,同时通过建立的索引词典进行数值编码,这种方式无法解决同义词问题。对于文本前后信息的理解也并未达到良好程度,因此算是落后了吧。
2.Transformer模型理论与结构
图1 Transformer图

Transformer模型结构其实很简单,其本质上是seq2seq模型的变种。首先在Encoder端,其通过将输入文本经过embedding层look up操作后,得到Word embedding矩阵。然后与词位置矩阵进行加性连接,赋予静态词向量词位置关系这类特征。在此基础上输入到多层self attention层构成的Muti-head注意力层中建立序列的动态编码矩阵,后为了避免深度网络所带来的梯度消失问题,做了一次残差连接。通过一层BP神经网络与第二次残差,即得到了最终encoder端的编码值。而在Decoder端,将target序列进行同样嵌入操作后,通过一次带有mask操作的muti-attention层处理,结合encoder端生成的编码矩阵(也叫state状态矩阵)再次经过attention+BP网络处理。最终通过一步线性变化,通过softmax即可得到序列中各个词的输出概率大小。在模型构建中,还加入了Batch Normalization层加速训练,同时避免过拟合。
3.Transformer模型的应用
用法很简单,首先在分类场景下,你只需要一个encoder+softmax即可作为文本分类的baseline,后续进行微调即可。当然,如果你觉得只有encoder不舒服,在后面自己接入其他神经网络模型进行处理也可以。其次,对于文本摘要,NMT问题,生成式对话而言,Decoder端是需要的,但不一定和论文中decoder结构一致,此处不再扩展声明。从这个角度上来看,Transformer反而Encoder是最重要的结构了。
4.基于keras的模型复现
这部分请跳转至GIT仓库查看吧,欢迎提Issue。

自然语言处理语序问题及解决思路(部分附源码实现)

发表于 2019-03-24

在自然语言领域,语序问题对于文本特征表述,生成序列等场景都有很强的影响份量。本文将专门针对此场景进行理论汇总。同时将给出解决方案。

一.语序对于文本特征提取的影响与优化
在自然语言领域,对于文本特征提取方式,从当初基于词频构建的矩阵,由于缺乏对于同义词辨析与文本上下文信息的解读,使得模型训练依然存在较大误差。到后来基于词相似度所构成的Word2vec词向量方案及后续变种出现后,解决了部分文本上下文信息问题,但依然存在词义辨析问题。鉴于此,为了更好的从文本中提取信息,这里就引出了下面要描述的一种词位置矩阵——Position Embedding方案。

将Position Embeding机制发扬光大的,正是谷歌《All you need is attention》这篇论文。其原理在于通过word embedding嵌入层进行词组look up操作后,将所生产的张量E进行进一步特征提取。张量E的宽度为d维,则在张量E的第I维则通过以下式子进行转换计算。同时,式中pos表示张量E的每一个列元素。

图1 POSemb图

Position Embeding一般放置于词嵌入层后使用,在Transformer模型中,position embedding替代了传统RNN与cnn,直接通过记录词位置,作为文本上下文信息表征结构。而2018年谷歌Bert模型利用此机制对文本特征提取这一块进行改善,其将word embedding,句子层面嵌入向量和POS EMB三者相加进行结合训练。由此可见,POS EMB机制的有效性。

图2 BERT图

我在此基于keras复现此机制,详情请点击查看。

二.语序对于序列生成的影响与优化

首先先提一下语言模型的概念吧。设一段文本序列长为n,其表征为x={x1,x2,x3,x4,……,xn}.则最终生成的该序列x概率可用条件概率表示: P=P(x1)P(x2|x1)P(x3|x2x1)P(x4|x3x2x1)……P(Xn|x1,x2,x3,x4,…,xn-1).因此在序列生成情况过程中,其条件概率分布及蕴含了文本上下文信息,从而可以看出语序对于文本而言重要性不言而喻。

在文本序列生成场景中,最常见的莫过于文本摘要,机器翻译,生成式对话,自动对联等应用场景。其原理基于seq2seq结构模型进行训练,通过Encoder将原始文本序列进行特征提取,转换为数字编码,生成隐藏状态向量state。之后与decoder端T0时刻目标文本序列构成的张量进行合并,从而输出T0+1时刻的目标文本序列。而在预测阶段的文本序列生成时,由于生成的文本是根据概率来分布,组合情况有多种,因此确认最优效的序列并进行输出便有了重要意义。在此阶段,我们可以使用集束搜索进行优化(Beem Search)。

BeemSearch原理大致如下:1.我们假设在Decoder端要生成序列A,B,C,D.若我们设置Beem search的词表大小为2,则预测阶段先生成词A作为序列开头位置。2.当后续要输入第二个词时,此时将会计算P(AB),P(AC),P(AD),P(AA)四种序列语言模型的概率大小。3.从中选出最大的概率P(AB)=P(A)P(B|A)。从而选择AB序列输出。4.后续又从词B开始,按照上述流程依次输出,直到输出整个序列ABCD为止。

BeemSearch实现很简单了,在decoder输出概率后,对其进行相应生成序列概率计算,即可完成整个序列生成步骤,此处不再举代码例子。

就到此为止吧!

自然语言处理Attention机制综述与基于keras复现

发表于 2019-03-18

在自然语言领域中,Attention机制借鉴于人脑得注意力机制流程,从而选择输入文本序列中关键信息进行处理,从而减少语言模型中带有序列信息得重点词与平常词没有区分得前提下,所带来的训练误差。

1.Attention机制的种类

从宏观上来讲,目前Attention机制主要分为聚焦式(focus)注意力机制和显著性(saliency-based)注意力机制。其中聚焦式注意力机制概念为依托于输入到神经网络的数据,按照从前往后的顺序,将数值较大的重要权重主动的、依赖预定任务的聚焦于某一对象上,从而将该对象与其他对象进行区分。而显著性注意力机制主要是神经网络中,从往前的一种反馈机制导致的被动注意力机制。这种注意力机制不受主动干预影响,只是一种神经网络为了更好的拟合数据,从而出现的被动反馈的调节机制而已。在LSTM与GRU中的门控机制可以近似看作这种注意力机制。最后,在自然语言处理过程中的注意力机制都属于focus一类。

2.Attention机制运行过程

图1 attention机制原理

Attention机制运行过程如上图所示。其大致步骤如下:

1.输入文本序列,并将文本序列表征为类似于key-value这样的键值对
。
2.输入query句向量,用keyi与query句向量计算文本相似度。

3.进行softmax运算得出注意力权值ai=softmax(F(keyiquery))。此处ai可以理解为文本序列query中,第i(列)个信息受到的关注程度。

4.将value序列输入到网络,与ai 进行加权平均计算,从而得到序列编码值Attention。其中,在第三步文本相似度计算时,主要有如下几种方式:

1.加性注意力机制,计算如图所示,W和Wq分别为训练的超参数:

图1 公式

2.点积注意力机制,相似度计算如下图所示:

图2 公式

3.缩放点积注意力机制·,其中d为词向量宽度,为了减少内存消耗,此处除以d进行缩放,减小计算量。相似度计算如下图所示:

图3 公式

4.余弦相似度注意力机制,相似度计算如下图所示:

图4 公式

最后,上述注意力机制总体称为软性注意力机制(soft attention).其将文本序列x看作由key-value键值对构成。在此基础上,其通过与Query进行相似度计算从而对文本序列x进行软寻址。这也是被称为此机制的原因。

3.Attention机制细节
3.1外部注意力机制

当key=value=x,query=y时,attention机制计算流程与上述一致。此时注意力机制称为外部注意力机制。此时,softmax计算方式也进行了更改,计算公式如下,其他attention流程与上述图一致:

图5 公式

3.2.自注意力机制(self-attention)

图6 点乘缩放注意力机制

自注意力机制是点乘缩放注意力机制变种,其结构如上图所示.当key=value=query=x时,分别对Q,K,V矩阵进行线性变换操作,如下图所示:

图7 公式
图8 公式
图9 公式

其中,WQ,WK,WV为待训练的参数。其他后续流程与上述点乘缩放注意力机制一样,此处不再说明。

3.3.多头(muti-head)注意力机制

图10 多头注意力机制

如上图所示,当进行了h次self attention之后,对每一次经过self attention得到的att值进行加性连接,运算公式如下所示,其中WO为待训练参数:

MultiHead(Q,K,V ) = Concat(head1,…,headh).WO

3.4硬注意力机制(Hard attention)

此类注意力机制与软性注意力机制的区别在于如下几方面:软性注意力机制输入的是定长的文本序列,同时其通过对文本序列中所有信息进行权值处理,从而进行编码。而硬性注意力机制只选择定长文本中,选择分布概率(语言模型)最大的信息作为输入,同时其用欠采样或者随机采样的方式进行信息筛选。最终得到长度不一致的序列进行训练。此处将会有更大问题,无法使用神经网络模型训练,因此一般都使用软性注意力机制进行训练。

4.基于keras的self-attention机制复现

我在此复现了下self-attention,其源码请点击到git仓库查阅。

其输入:上一层的输出张量。

输出:一个三维张量,维度为(samples,maxlen,attention),第一个维度含义代表句子数目,maxlen维度代表每一个句子长度,attention维度代表每个句子中每个分词构成的attention编码值个数。

模型融合方案Stacking原理与实现

发表于 2019-03-12

机器学习是基于统计学原理的一门技术。今天,我将给各位献上stacking模型融合方案原理简介与实现。首先,在此介绍几个前置概念。

1.数据K折交叉验证(K-FOLD)

图1 数据K折交叉

如上图所示,我们在获得一个完整数据集后,将数据分为K份(图中设置K为5),每次遍历数据取其中1份作为测试集,其余K-1份作为训练集。同时,对于任意一个基础机器学习模型而言,将会重复K次对数据进行处理的过程,这即为k-fold机制。

2.基模型
Stacking中的对数据K折交叉验证处理过程中,用到的机器学习模型。

3.stacking原理

图2 Stacking原理图

Stacking原理如上图所示。下面我将结合具体数据维度,来对该机制进行说明。
假设我得到训练集Train_data,维度为:mn,同时测试集Test_data维度为a(n-1)。同时假设使用Train_data中所有特征进行训练,则从中取出一列label列表,其长度为m,此时Train_data维度变为(m*(n-1))。之后,设置K个机器学习模型作为基模型(本案例中所设置数字为5)。之后,我们分别取这K个模型中,每一个模型进行训练集上K折交叉处理。在一次迭代中,将数据的第K份作为测试集,其他K-1份作为训练集,从而一次迭代生成维度为(m/k,(n-1)/k)的矩阵。将每一次生成的矩阵拼接起来,则对于一个模型而言,完整K次遍历数据后,将生成维度为(m,n-1)的矩阵。则K个模型而言,我们将这些矩阵横向拼接起来,得到最终超特征矩阵new_train,维度为(m,kn-k)。

除此外,对于测试集Test_data而言,我们也在基模型每次遍历测试集并训练出模型时,对测试集进行预测。每个模型每次遍历得到的测试数据集矩阵维度为(a,n-1),则
k次遍历后,最终的到的矩阵维度为(a,kn-k).此时为了保证维度统一,我们对该矩阵进行按行求取均值,将其维度变为(a,n-1)。对于K个模型而言,最终经过上述处理过程后,得到新的测试集上的超特征矩阵new_test,其维度为(a,kn-k)。

上述过程即为stacking第一层处理过程。之后第二层处理过程中,我们将new_train作为训练集,将第一层得到的label集合作为标签进行训练,得到最终训练出的模型,从而对new_test进行预测即可。

4.stacking扩展

在kaggle的比赛上,有的团队在经过第一层处理后得到的new_train矩阵基础上,与原始的train_data矩阵进行横向拼接。同时,对new_test也做此处理。从而选取K个机器学习模型,继续对新数据进行K-fold处理。后续操作与上述同理。但一般经过三层即可结束了。

5.stacking代码实践

代码已经上传至git仓库,请点击查看

我用此机制跑了跑某比赛,在没有调参的情况下,与第一名指标相差不是很大,还是较为满意的。

图3 跑分图

文本数据挖掘流程

发表于 2018-07-21

本文主要记录文本数据挖掘大致流程,用以梳理该部分结构知识。
1.数据获取
对于文本数据而言,在公司项目中大部分数据可以通过购买方式获取数据。但常见的方式即为通过网络爬虫获取,详细请参考我后续爬虫技术教程。该种方式获取数据原理是通过程序自动遍历固定网址,将整个页面HTML结构中,不同页面DOM节点文本信息收集整理,然后缓存到本地数据库中。数据集具有结构不唯一,含有HTML标签,特殊符号等不利于训练的数据,需要后期进一步处理。
2.数据清洗与数据预处理
2.1文本数据清洗
在获得的文本数据集,也叫语料库,里面含有许多无关的HTML标签,前端JS代码段,注释,无关特殊符号等增加训练噪声的数据,因此我们需要对数据进行处理,筛选掉这些无关数据项,技术上一般使用python正则表达式处理即可。最后,对于文本数据中的标点符号,可以剔除掉,用空格来代替。
2.2结构化数据
通过上述步骤处理后,我们就有了训练语料库。但对于文本数据挖掘而言,运用机器学习模型或者深度学习模型来训练的话还远远不够。对于监督学习,无监督学习,半监督学习而言,监督学习在文本数据瓦解运用上来看目前效果较好,也是最合理的方式。因此我们需要对文本进行打标签(label),这对于回归与分类问题而言具有重要意义。最后,我们要将不同网页的文本数据单独保存为一个文档,然后添加这个文档数据的标签,整个数据集就由多个带标签的文档构成,也叫作文档库。于是数据就有了词汇——》文档——》文档库这么一个简单结构,有利于构成训练矩阵。最后对于部分结构数据中存在的NAN数值项,在大文本训练情况下将这类数据删除即可,数据量小的可以用数值0代替。
2.3 分词
中文分词原因与处理过程请见我另一篇文本主题分类文章,这里不再详述。
3.文本挖掘数值特征工程
首先,文本数据集内部全是各种str类型的文本分词数据,这类结构无法直接带入到计算机中进行计算。因此我们需要将数据进一步处理成能够让计算机计算,标注的一种矩阵结构。目前做法一般分两种。
3.1词袋模型(BOW)
此类方式通过忽略分词语义特征与前后顺序,直接将所有分词放在一个统一的文档集合中,统计每一个分词出现的次数,最后得出一个矩阵。矩阵的列代表每一个分词的出现次数,矩阵的行代表文档数量,在这篇文档出现了的分词次数为m,就在那个位置标注为m即可,其他没出现的文档位置直接标注0,这类矩阵即为词频矩阵,其横向维度即为分词数目,长度会很长,因此对于低频词影响没法忽略掉,需要进一步特征筛选。最后,这类矩阵可以直接带入模型中训练。而目前大部分使用的TF-IDF算法效果较好,其引入了逆文档频率IDF,在词频概率TF基础上计算的词频矩阵能更好的契合主题分类模型。
3.2词向量模型
这种方式通过one-hot编码将分词序列化。举个例子,我有段文本“今天天气好晴朗”经过分词处理后的结构变为“今天”,“天气”,“好”,”晴朗“。那么通过one-hot编码处理后的每一个分词向量即为:
“今天”=[1,0,0,0],”天气”=[0,1,0,0],”好”=[0,0,1,0],”晴朗”=[0,0,0,1],最后这个句子(文档)的词向量模型即为[[1,0,0,0],[0,1,0,0],[0,0,1,0],[0,0,0,1]].这样不同的文档词向量矩阵组合在一起就构成了一类高维度的文档集合词向量,矩阵的列代表词表大小即为分词个数,行代表文档个数。但考虑到对于分词而言,每一个词向量列元素只有其所在位置标1,而其他位置全部标0,这会造成数据分布不均问题。所以上述简单处理方式外,还有word2vec,doc2vec,fasttext模型进一步优化处理(fasttext,word2vec模型分类过程后续详谈)。有一种基于哈夫曼树的正负训练方式值得关注,其将正负表示词语语序排布问题,在树上正负分别表示左右处理方向,对于语言相似性判断有极大作用。最后,词向量模型高度抽象,无法直接带入统计机器学习模型训练,所以最好与深度学习模型进行嵌入训练,效果最佳。
3.3特征选取
经过编码处理后的矩阵词库大小依然太大,全部带入模型训练的话,拟合起来可能速度太慢。因此需要选择数据量合适,表征能力强,区分度大,经过编码处理后的分词作为训练数据集的特征。因此具体问题就回到了传统数据挖掘数据特征选取问题,一般采用卡方检验,信息增益,随机森林算法进行特征提取即可。
4.训练模型和调参
这一步就需要看你选择的模型来操作了,从大体上来讲,模型需要对数据进行拟合,要达到相应精度要求,除了确保数据质量高,特征选取合适外,还需要合理的调参设置。为了增强具体模型预测的泛化性,设置合理的L1,L2正则化项也是需要考虑的。此部分就不展开说了,后续结合实例再谈。
最后整个文本数据挖掘流程大致如此了,后续可以在这样处理框架下细化操作即可。

123
VKYH

VKYH

21 日志
© 2021 VKYH
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.2