
前言
上一篇文章介紹了基本的基于注意力機制方法對序列特征的處理,這篇主要介紹一下基本的基于卷積神經網絡方法對序列特征的處理,也就是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