前言
上一篇文章介绍了基本的基于注意力机制方法对序列特征的处理,这篇主要介绍一下基本的基于卷积神经网络方法对序列特征的处理,也就是TextCNN方法。序列特征的介绍,背景以及应用可以参考上一篇的详细介绍,这里简单回顾一下定义,用户在使用APP或网站的时候,用户会产生一些针对物品的行为,比如点击感兴趣的物品,收藏或购买物品等,而这些行为往往代表着用户对这些物品是感兴趣的,而将这些交互过的物品放在时间轴来看,就形成了用户感兴趣的物品序列,我们要处理的数据对象类似如图 1 所示具有时序关系的序列特征,这里拿用户感兴趣的物品序列为例作为处理对象。
我们都知道用户的历史行为中可能存在着一些局部的连续行为,比如最近新型冠状病毒疫情严重,可能用户在过去几天内连续买了口罩和酒精这种消毒和防护用品,那么在推荐中可以根据这种局部信息来推荐一些跟防护和消毒相关的商品。而浅层的卷积神经网络由于其卷积感受野比较小,善于捕获局部信息,因此可以利用浅层卷积神经网络来对序列特征中的局部行为模式进行建模。鉴于针对句子序列建模的卷积神经网络TextCNN也是针对embedding matrix做处理,因此选用TextCNN来对用户感兴趣的物品序列进行处理。
TextCNN原理
如图 2 所示为TextCNN对句子序列建模并进行分类的示意图:
- Embedding:每个单词包括标点都被处理成5维的embedding vector,句长为7,因此处理之后为7×5的矩阵,为图 2 的第一列所示。
- Convolution:经过 kernel_sizes分别为2,3,4的一维卷积层,每个kernel_size 都有2个卷积核,因此经过卷积之后输出6个卷积结果,其中卷积核的示意图为图 2 第二列所示,卷积后的结果为图 2 第三列所示。需要说明的一点是,从图 2 可以看出卷积核的高分别有2,3和4,而卷积核的宽都是都和embedding vector的维度一致,这是因为每一个向量代表一个词,在抽取特征的过程中,词做为文本的最小粒度,应该保证其信息的完整性。
- MaxPooling:对卷积后得到的6个结果进行MaxPooling,然后进行concact,最终得到一个6维的特征向量,如图 2 第四列所示。
- Fully Connect and Softmax:在6维的特征向量后加上一个神经元为2的全连接层,并进行softmax归一化得到分类概率值,如图 2 第五列所示。
应用在序列特征上
我们主要借鉴的是上面介绍的TextCNN提取特征的方法,也就是上面介绍的如何把embedding matrix变为最终的6维特征向量的方法。如图 3 所示:
一般在把TextCNN应用在序列特征的处理上时一维卷积的kernel_sizes设置为2或3,或者同时都用,每个kernel_sizes的卷积核个数一般都为1。一维卷积核大小分别设置为2和3时可以提取不同范围大小的局部信息,保证了特征的多样性。
除此之外,为了弥补有关全局信息提取的不足之处,还可以结合max/mean/sum pooling提取全局特征的方法,使得提取的特征既有全局信息又有局部信息[2],如图 4 所示,其中全局pooling和textCNN共享序列特征的embedding matrix。
总结
卷积神经网络因其滑动卷积的计算方式对局部特征的提取有天然的优势,因此成为提取局部信息的首选建模方法。除此之外,还可以结合全局pooling的方法提取全局特征,弥补对全局特征提取的不足,提高特征的多样性。与此同时,之前介绍过多值类别特征的处理方法,同样可以采用textCNN进行局部特征的提取。
参考文献
[1] Convolutional Neural Networks for Sentence Classification
[2] Convolutional Sequence Embedding Recommendation Model