0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

探討深度文本分類之DPCNN原理與代碼

8g3K_AI_Thinker ? 來源:cc ? 2019-02-13 14:59 ? 次閱讀

01

導(dǎo)讀

ACL2017 年中,騰訊 AI-lab 提出了Deep Pyramid Convolutional Neural Networks for Text Categorization(DPCNN)。

論文中提出了一種基于 word-level 級(jí)別的網(wǎng)絡(luò)-DPCNN,由于 TextCNN不能通過卷積獲得文本的長距離依賴關(guān)系,而論文中 DPCNN 通過不斷加深網(wǎng)絡(luò),可以抽取長距離的文本依賴關(guān)系。

實(shí)驗(yàn)證明在不增加太多計(jì)算成本的情況下,增加網(wǎng)絡(luò)深度就可以獲得最佳的準(zhǔn)確率。?

02

DPCNN 結(jié)構(gòu)

究竟是多么牛逼的網(wǎng)絡(luò)呢?我們下面來窺探一下模型的芳容。

03

DPCNN 結(jié)構(gòu)細(xì)節(jié)

模型是如何通過加深網(wǎng)絡(luò)來捕捉文本的長距離依賴關(guān)系的呢?下面我們來一一道來。為了更加簡(jiǎn)單的解釋 DPCNN,這里我先不解釋是什么是 Region embedding,我們先把它當(dāng)作 wordembedding。

等長卷積

首先交代一下卷積的的一個(gè)基本概念。一般常用的卷積有以下三類:

假設(shè)輸入的序列長度為n,卷積核大小為m,步長(stride)為s,輸入序列兩端各填補(bǔ)p個(gè)零(zero padding),那么該卷積層的輸出序列為(n-m+2p)/s+1。

(1)窄卷積(narrow convolution):步長s=1,兩端不補(bǔ)零,即p=0,卷積后輸出長度為n-m+1。

(2)寬卷積(wide onvolution):步長s=1,兩端補(bǔ)零p=m-1,卷積后輸出長度n+m-1。

(3)等長卷積(equal-width convolution):步長s=1,兩端補(bǔ)零p=(m-1)/2,卷積后輸出長度為n。如下圖所示,左右兩端同時(shí)補(bǔ)零p=1,s=3。

池化

那么DPCNN是如何捕捉長距離依賴的呢?這里我直接引用文章的小標(biāo)題——Downsampling with the number of featuremaps fixed。

作者選擇了適當(dāng)?shù)膬蓪拥乳L卷積來提高詞位 embedding 的表示的豐富性。然后接下來就開始Downsampling(池化)。

再每一個(gè)卷積塊(兩層的等長卷積)后,使用一個(gè) size=3 和 stride=2 進(jìn)行 maxpooling 進(jìn)行池化。序列的長度就被壓縮成了原來的一半。其能夠感知到的文本片段就比之前長了一倍。

例如之前是只能感知3個(gè)詞位長度的信息,經(jīng)過1/2池化層后就能感知6個(gè)詞位長度的信息啦,這時(shí)把 1/2 池化層和 size=3 的卷積層組合起來如圖所示。

固定 feature maps(filters) 的數(shù)量

為什么要固定feature maps的數(shù)量呢?許多模型每當(dāng)執(zhí)行池化操作時(shí),增加feature maps的數(shù)量,導(dǎo)致總計(jì)算復(fù)雜度是深度的函數(shù)。與此相反,作者對(duì) feature map 的數(shù)量進(jìn)行了修正,他們實(shí)驗(yàn)發(fā)現(xiàn)增加 feature map 的數(shù)量只會(huì)大大增加計(jì)算時(shí)間,而沒有提高精度。

另外,夕小瑤小姐姐在知乎也詳細(xì)的解釋了為什么要固定featuremaps的數(shù)量。有興趣的可以去知乎搜一搜,講的非常透徹。

固定了 feature map 的數(shù)量,每當(dāng)使用一個(gè)size=3和stride=2進(jìn)行maxpooling進(jìn)行池化時(shí),每個(gè)卷積層的計(jì)算時(shí)間減半(數(shù)據(jù)大小減半),從而形成一個(gè)金字塔。

這就是論文題目所謂的Pyramid。

好啦,看似問題都解決了,目標(biāo)成功達(dá)成。剩下的我們就只需要重復(fù)的進(jìn)行等長卷積+等長卷積+使用一個(gè) size=3 和 stride=2 進(jìn)行 maxpooling 進(jìn)行池化就可以啦,DPCNN就可以捕捉文本的長距離依賴?yán)玻?/p>

Shortcut connections with pre-activation

但是!如果問題真的這么簡(jiǎn)單的話,深度學(xué)習(xí)就一下子少了超級(jí)多的難點(diǎn)了。

(1) 初始化CNN的時(shí),往往各層權(quán)重都初始化為很小的值,這導(dǎo)致了最開始的網(wǎng)絡(luò)中,后續(xù)幾乎每層的輸入都是接近0,這時(shí)的網(wǎng)絡(luò)輸出沒有意義;

(2) 小權(quán)重阻礙了梯度的傳播,使得網(wǎng)絡(luò)的初始訓(xùn)練階段往往要迭代好久才能啟動(dòng);

(3)就算網(wǎng)絡(luò)啟動(dòng)完成,由于深度網(wǎng)絡(luò)中仿射矩陣(每兩層間的連接邊)近似連乘,訓(xùn)練過程中網(wǎng)絡(luò)也非常容易發(fā)生梯度爆炸或彌散問題。

當(dāng)然,上述這幾點(diǎn)問題本質(zhì)就是梯度彌散問題。那么如何解決深度 CNN 網(wǎng)絡(luò)的梯度彌散問題呢?當(dāng)然是膜一下何愷明大神,然后把 ResNet 的精華拿來用啦!ResNet 中提出的shortcut-connection/ skip-connection/ residual-connection(殘差連接)就是一種非常簡(jiǎn)單、合理、有效的解決方案。

類似地,為了使深度網(wǎng)絡(luò)的訓(xùn)練成為可能,作者為了恒等映射,所以使用加法進(jìn)行shortcut connections,即z+f(z),其中f用的是兩層的等長卷積。這樣就可以極大的緩解了梯度消失問題。

另外,作者也使用了pre-activation,這個(gè)最初在何凱明的 “Identity Mappings in Deep Residual Networks 上提及,有興趣的大家可以看看這個(gè)的原理。

直觀上,這種“線性”簡(jiǎn)化了深度網(wǎng)絡(luò)的訓(xùn)練,類似于 LSTM 中 constant errorcarousels 的作用。而且實(shí)驗(yàn)證明pre-activation 優(yōu)于 post-activation。

整體來說,巧妙的結(jié)構(gòu)設(shè)計(jì),使得這個(gè)模型不需要為了維度匹配問題而擔(dān)憂。

Region embedding

同時(shí) DPCNN 的底層貌似保持了跟 TextCNN 一樣的結(jié)構(gòu),這里作者將 TextCNN 的包含多尺寸卷積濾波器的卷積層的卷積結(jié)果稱之為 Region embedding,意思就是對(duì)一個(gè)文本區(qū)域/片段(比如3gram)進(jìn)行一組卷積操作后生成的embedding。

另外,作者為了進(jìn)一步提高性能,還使用了tv-embedding (two-views embedding)進(jìn)一步提高 DPCNN 的 accuracy。

上述介紹了 DPCNN 的整體架構(gòu),可見 DPCNN 的架構(gòu)之精美。本文是在原始論文以及知乎上的一篇文章的基礎(chǔ)上進(jìn)行整理。

本文可能也會(huì)有很多錯(cuò)誤,如果有錯(cuò)誤,歡迎大家指出來!建議大家為了更好的理解 DPCNN,看一下原始論文和參考里面的知乎。

04

用 Keras 實(shí)現(xiàn) DPCNN 網(wǎng)絡(luò)

這里參考了一下 kaggle 的代碼,模型一共用了七層,模型的參數(shù)與論文不太相同。這里濾波器通道個(gè)數(shù)為64(論文中為256),具體的參數(shù)可以參考下面的代碼,部分我寫了注釋。

05

DPCNN 實(shí)戰(zhàn)

上面我們用 keras 實(shí)現(xiàn)了我們的 DPCNN 網(wǎng)絡(luò),這里我們借助 kaggle 的有毒評(píng)論文本分類競(jìng)賽來實(shí)戰(zhàn)下我們的 DPCNN 網(wǎng)絡(luò)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 網(wǎng)絡(luò)
    +關(guān)注

    關(guān)注

    14

    文章

    7389

    瀏覽量

    88211
  • cnn
    cnn
    +關(guān)注

    關(guān)注

    3

    文章

    349

    瀏覽量

    21963

原文標(biāo)題:一文看懂深度文本分類之 DPCNN 原理與代碼

文章出處:【微信號(hào):AI_Thinker,微信公眾號(hào):人工智能頭條】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    pyhanlp文本分類與情感分析

    語料庫本文語料庫特指文本分類語料庫,對(duì)應(yīng)IDataSet接口。而文本分類語料庫包含兩個(gè)概念:文檔和類目。一個(gè)文檔只屬于一個(gè)類目,一個(gè)類目可能含有多個(gè)文檔。比如搜狗文本分類語料庫迷你版.zip,下載前
    發(fā)表于 02-20 15:37

    TensorFlow的CNN文本分類

    在TensorFlow中實(shí)現(xiàn)CNN進(jìn)行文本分類(譯)
    發(fā)表于 10-31 09:27

    NLPIR平臺(tái)在文本分類方面的技術(shù)解析

    文本分類問題就是將一篇文檔歸入預(yù)先定義的幾個(gè)類別中的一個(gè)或幾個(gè),而文本的自動(dòng)分類則是使用計(jì)算機(jī)程序來實(shí)現(xiàn)這種文本分類,即根據(jù)事先指定的規(guī)則和示例樣本,自動(dòng)從海量文檔中識(shí)別并訓(xùn)練
    發(fā)表于 11-18 17:46

    基于文章標(biāo)題信息的漢語自動(dòng)文本分類

    文本分類文本挖掘的一個(gè)重要組成部分,是信息搜索領(lǐng)域的一項(xiàng)重要研究課題。該文提出一種基于文章標(biāo)題信息的漢語自動(dòng)文本分類方法,在HNC理論的領(lǐng)域概念框架下,通過標(biāo)題
    發(fā)表于 04-13 08:31 ?10次下載

    基于apiori算法改進(jìn)的knn文本分類方法

    隨著互聯(lián)網(wǎng)信息的飛速增長,文本分類變成了一項(xiàng)處理和資質(zhì)文本信息的關(guān)鍵技術(shù)。文本分類技術(shù)可用于分類新聞,在互聯(lián)網(wǎng)上尋找有趣的信息,或者通過超文本
    發(fā)表于 11-09 10:25 ?9次下載
    基于apiori算法改進(jìn)的knn<b class='flag-5'>文本分類</b>方法

    textCNN論文與原理——短文本分類

    是處理圖片的torchvision,而處理文本的少有提及,快速處理文本數(shù)據(jù)的包也是有的,那就是torchtext[1]。下面還是結(jié)合上一個(gè)案例:【深度學(xué)習(xí)】textCNN論文與原理——短文本分
    的頭像 發(fā)表于 12-31 10:08 ?2424次閱讀
    textCNN論文與原理——短<b class='flag-5'>文本分類</b>

    文本分類的一個(gè)大型“真香現(xiàn)場(chǎng)”來了

    ? 文本分類的一個(gè)大型“真香現(xiàn)場(chǎng)”來了:JayJay的推文《超強(qiáng)文本半監(jiān)督MixText》中告訴大家不要浪費(fèi)沒有標(biāo)注過的數(shù)據(jù),但還是需要有標(biāo)注數(shù)據(jù)的!但今天介紹的這篇paper,文本分類居然不需要
    的頭像 發(fā)表于 02-05 11:02 ?1771次閱讀
    <b class='flag-5'>文本分類</b>的一個(gè)大型“真香現(xiàn)場(chǎng)”來了

    基于深度神經(jīng)網(wǎng)絡(luò)的文本分類分析

      隨著深度學(xué)習(xí)技術(shù)的快速發(fā)展,許多研究者嘗試?yán)?b class='flag-5'>深度學(xué)習(xí)來解決文本分類問題,特別是在卷積神經(jīng)網(wǎng)絡(luò)和循環(huán)神經(jīng)網(wǎng)絡(luò)方面,出現(xiàn)了許多新穎且有效的分類方法。對(duì)基于
    發(fā)表于 03-10 16:56 ?37次下載
    基于<b class='flag-5'>深度</b>神經(jīng)網(wǎng)絡(luò)的<b class='flag-5'>文本分類</b>分析

    基于不同神經(jīng)網(wǎng)絡(luò)的文本分類方法研究對(duì)比

    海量文本分析是實(shí)現(xiàn)大數(shù)據(jù)理解和價(jià)值發(fā)現(xiàn)的重要手段,其中文本分類作為自然語言處理的經(jīng)典問題受到研究者廣泛關(guān)注,而人工神經(jīng)網(wǎng)絡(luò)在文本分析方面的優(yōu)異表現(xiàn)使其成為目前的主要研究方向。在此背景下,介紹卷積
    發(fā)表于 05-13 16:34 ?48次下載

    基于LSTM的表示學(xué)習(xí)-文本分類模型

    文本表示和分類是自然語言理解領(lǐng)域的研究熱點(diǎn)。目前已有很多文本分類方法,包括卷積網(wǎng)絡(luò)、遞歸網(wǎng)絡(luò)、自注意力機(jī)制以及它們的結(jié)合。但是,復(fù)雜的網(wǎng)絡(luò)并不能從根本上提高文本分類的性能,好的
    發(fā)表于 06-15 16:17 ?18次下載

    基于注意力機(jī)制的新聞文本分類模型

    基于注意力機(jī)制的新聞文本分類模型
    發(fā)表于 06-27 15:32 ?30次下載

    帶你從頭構(gòu)建文本分類

    文本分類是 NLP 中最常見的任務(wù)之一, 它可用于廣泛的應(yīng)用或者開發(fā)成程序,例如將用戶反饋文本標(biāo)記為某種類別,或者根據(jù)客戶文本語言自動(dòng)歸類。另外向我們平時(shí)見到的郵件垃圾過濾器也是文本分類
    的頭像 發(fā)表于 03-22 10:49 ?3308次閱讀

    PyTorch文本分類任務(wù)的基本流程

    文本分類是NLP領(lǐng)域的較為容易的入門問題,本文記錄文本分類任務(wù)的基本流程,大部分操作使用了**torch**和**torchtext**兩個(gè)庫。 ## 1. 文本數(shù)據(jù)預(yù)處理
    的頭像 發(fā)表于 02-22 14:23 ?962次閱讀

    人工智能中文本分類的基本原理和關(guān)鍵技術(shù)

    在本文中,我們?nèi)?b class='flag-5'>探討文本分類技術(shù)的發(fā)展歷程、基本原理、關(guān)鍵技術(shù)、深度學(xué)習(xí)的應(yīng)用,以及從RNN到Transformer的技術(shù)演進(jìn)。文章詳細(xì)介紹了各種模型的原理和實(shí)戰(zhàn)應(yīng)用,旨在提供對(duì)文本分類
    的頭像 發(fā)表于 12-16 11:37 ?988次閱讀
    人工智能中<b class='flag-5'>文本分類</b>的基本原理和關(guān)鍵技術(shù)

    卷積神經(jīng)網(wǎng)絡(luò)在文本分類領(lǐng)域的應(yīng)用

    在自然語言處理(NLP)領(lǐng)域,文本分類一直是一個(gè)重要的研究方向。隨著深度學(xué)習(xí)技術(shù)的飛速發(fā)展,卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,簡(jiǎn)稱CNN)在圖像識(shí)別領(lǐng)域取得了
    的頭像 發(fā)表于 07-01 16:25 ?380次閱讀