NLP之文本分類(lèi)

前言

作為NLP領(lǐng)域最經(jīng)典的使用場(chǎng)景之一侨艾,文本分類(lèi)積累了許多的實(shí)現(xiàn)方法褐啡。這里我們根據(jù)是否使用深度學(xué)習(xí)方法將文本分類(lèi)主要分為一下兩個(gè)大類(lèi):

  • 基于傳統(tǒng)機(jī)器學(xué)習(xí)的文本分類(lèi)瞬场,如 TF-IDF文本分類(lèi)抵代。
  • 基于深度學(xué)習(xí)的文本分類(lèi)抢肛,如Facebook開(kāi)源的FastText文本分類(lèi)煞抬,Text-CNN 文本分類(lèi)霜大,Text-CNN 文本分類(lèi)等。

一革答、基于傳統(tǒng)機(jī)器學(xué)習(xí)的文本分類(lèi)

隨著統(tǒng)計(jì)學(xué)習(xí)方法的發(fā)展战坤,特別是在90年代后互聯(lián)網(wǎng)在線文本數(shù)量增長(zhǎng)和機(jī)器學(xué)習(xí)學(xué)科的興起,逐漸形成了一套解決大規(guī)模文本分類(lèi)問(wèn)題的經(jīng)典玩法残拐,這個(gè)階段的主要套路是人工特征工程+淺層分類(lèi)模型途茫。整個(gè)文本分類(lèi)問(wèn)題就拆分成了特征工程分類(lèi)器兩部分。

1.1 特征工程

這里的特征工程也就是將文本表示為計(jì)算機(jī)可以識(shí)別的溪食、能夠代表該文檔特征的特征矩陣的過(guò)程囊卜。在基于傳統(tǒng)機(jī)器學(xué)習(xí)的文本分類(lèi)中,我們通常將特征工程分為文本預(yù)處理错沃、特征提取栅组、文本表示等三個(gè)部分。

1.1.1 文本預(yù)處理

文本預(yù)處理過(guò)程是提取文本中的關(guān)鍵詞來(lái)表示文本的過(guò)程枢析。中文文本預(yù)處理主要包括文本分詞去停用詞兩個(gè)階段玉掸。
文本分詞,是因?yàn)楹芏嘌芯勘砻魈卣髁6葹樵~粒度遠(yuǎn)好于字粒度(其實(shí)很好理解醒叁,因?yàn)榇蟛糠址诸?lèi)算法不考慮詞序信息司浪,基于字粒度顯然損失了過(guò)多“n-gram”信息)泊业。具體到中文分詞,不同于英文有天然的空格間隔啊易,需要設(shè)計(jì)復(fù)雜的分詞算法吁伺。傳統(tǒng)分詞算法主要有基于字符串匹配的正向/逆向/雙向最大匹配基于理解的句法和語(yǔ)義分析消歧租谈;基于統(tǒng)計(jì)的互信息/CRF方法篮奄。近年來(lái)隨著深度學(xué)習(xí)的應(yīng)用,WordEmbedding + Bi-LSTM+CRF方法逐漸成為主流垦垂,本文重點(diǎn)在文本分類(lèi)宦搬,就不展開(kāi)了。
停止詞文本中一些高頻的代詞劫拗、連詞间校、介詞等對(duì)文本分類(lèi)無(wú)意義的詞,通常維護(hù)一個(gè)停用詞表页慷,特征提取過(guò)程中刪除停用表中出現(xiàn)的詞憔足,本質(zhì)上屬于特征選擇的一部分。

1.1.2 特征提取

特征提取包括特征選擇特征權(quán)重計(jì)算兩部分酒繁。
特征選擇的基本思路根據(jù)某個(gè)評(píng)價(jià)指標(biāo)獨(dú)立的對(duì)原始特征項(xiàng)(詞項(xiàng))進(jìn)行評(píng)分排序滓彰,從中選擇得分最高的一些特征項(xiàng),過(guò)濾掉其余的特征項(xiàng)州袒。常用的評(píng)價(jià)有:文檔頻率揭绑、互信息、信息增益郎哭、χ2統(tǒng)計(jì)量等豌拙。
特征權(quán)重計(jì)算主要是經(jīng)典的TF-IDF方法及其擴(kuò)展方法馋艺。TF-IDF的主要思想一個(gè)詞的重要度與在類(lèi)別內(nèi)的詞頻成正比拴疤,與所有類(lèi)別出現(xiàn)的次數(shù)成反比媳拴。

1.1.3 文本表示

文本表示的目的是把文本預(yù)處理后的轉(zhuǎn)換成計(jì)算機(jī)可理解的方式,是決定文本分類(lèi)質(zhì)量最重要的部分亥至。傳統(tǒng)做法常用詞袋模型(BOW, Bag Of Words)或向量空間模型(Vector Space Model)悼沈,最大的不足是忽略文本上下文關(guān)系,每個(gè)詞之間彼此獨(dú)立姐扮,并且無(wú)法表征語(yǔ)義信息絮供。

1.2 分類(lèi)器

大部分機(jī)器學(xué)習(xí)方法都在文本分類(lèi)領(lǐng)域有所應(yīng)用,比如樸素貝葉斯分類(lèi)算法(Na?ve Bayes)茶敏、KNN杯缺、SVM、最大熵和神經(jīng)網(wǎng)絡(luò)等等睡榆。

二萍肆、基于深度學(xué)習(xí)的文本分類(lèi)

2.1 FastText文本分類(lèi)

2.1.1 FastText使用場(chǎng)景

FastText是Facebook AI Research在16年開(kāi)源的一種文本分類(lèi)器。 其特點(diǎn)就是fast胀屿。相對(duì)于其它文本分類(lèi)模型塘揣,如SVMLogistic Regression等模型宿崭,fastText能夠在保持分類(lèi)效果的同時(shí)亲铡,大大縮短了訓(xùn)練時(shí)間。

2.1.2 FastText的幾個(gè)特點(diǎn)

  • 適合大型數(shù)據(jù)+高效的訓(xùn)練速度:能夠訓(xùn)練模型“在使用標(biāo)準(zhǔn)多核CPU的情況下10分鐘內(nèi)處理超過(guò)10億個(gè)詞匯葡兑。
  • 支持多語(yǔ)言表達(dá):利用其語(yǔ)言形態(tài)結(jié)構(gòu)奖蔓,F(xiàn)astText能夠被設(shè)計(jì)用來(lái)支持包括英語(yǔ)、德語(yǔ)讹堤、西班牙語(yǔ)吆鹤、法語(yǔ)以及捷克語(yǔ)等多種語(yǔ)言。FastText 的性能要比 Word2Vec 工具明顯好上不少洲守。
  • FastText專注于文本分類(lèi)疑务。它適合類(lèi)別特別多的分類(lèi)問(wèn)題,如果類(lèi)別比較少梗醇,容易過(guò)擬合

2.1.3 FastText原理

FastText方法包含三部分知允,模型架構(gòu)層次SoftMaxN-gram特征叙谨。

2.1.3.1 模型架構(gòu)

FastText模型架構(gòu)和 Word2Vec 中的 CBOW 模型很類(lèi)似温鸽,因?yàn)樗鼈兊淖髡叨际荈acebook的科學(xué)家Tomas Mikolov。不同之處在于手负,F(xiàn)astText預(yù)測(cè)標(biāo)簽涤垫,而CBOW 模型預(yù)測(cè)中間詞

  • CBOW的架構(gòu):輸入的是w(t)的上下文2d個(gè)詞虫溜,經(jīng)過(guò)隱藏層后雹姊,輸出的是w(t)。


    CBOW模型架構(gòu)
  • FastText的架構(gòu):將整個(gè)文本作為特征去預(yù)測(cè)文本的類(lèi)別衡楞。


    FastText模型架構(gòu)
2.1.3.2 層次SoftMax
  • 對(duì)于有大量類(lèi)別的數(shù)據(jù)集吱雏,F(xiàn)astText使用了一種分層分類(lèi)器(而非扁平式架構(gòu))。不同的類(lèi)別被整合進(jìn)樹(shù)形結(jié)構(gòu)中(想象下二叉樹(shù)而非 list)瘾境。在某些文本分類(lèi)任務(wù)中類(lèi)別很多歧杏,計(jì)算線性分類(lèi)器的復(fù)雜度高。為了改善運(yùn)行時(shí)間迷守,F(xiàn)astText模型使用了層次 Softmax技巧犬绒。層次Softmax技巧建立在哈弗曼編碼的基礎(chǔ)上,對(duì)標(biāo)簽進(jìn)行編碼兑凿,能夠極大地縮小模型預(yù)測(cè)目標(biāo)的數(shù)量凯力。
  • fastText 也利用了類(lèi)別不均衡這個(gè)事實(shí)(一些類(lèi)別出現(xiàn)次數(shù)比其他的更多)茵瘾,通過(guò)使用 Huffman 算法建立用于表征類(lèi)別的樹(shù)形結(jié)構(gòu)(Huffman樹(shù))。因此咐鹤,頻繁出現(xiàn)類(lèi)別的樹(shù)形結(jié)構(gòu)的深度要比不頻繁出現(xiàn)類(lèi)別的樹(shù)形結(jié)構(gòu)的深度要小拗秘,這也使得進(jìn)一步的計(jì)算效率更高。


    Huffman樹(shù)結(jié)構(gòu)圖
2.1.3.3 N-gram特征
  • FastText 可以用于文本分類(lèi)和句子分類(lèi)祈惶。不管是文本分類(lèi)還是句子分類(lèi)雕旨,我們常用的特征是詞袋模型。但詞袋模型不能考慮詞之間的順序捧请,因此 FastText還加入了 N-gram 特征凡涩。“我 愛(ài) 她” 這句話中的詞袋模型特征是 “我”疹蛉,“愛(ài)”, “她”活箕。這些特征和句子 “她 愛(ài) 我” 的特征是一樣的。如果加入 2-gram氧吐,第一句話的特征還有 “我-愛(ài)” 和 “愛(ài)-她”讹蘑,這兩句話 “我 愛(ài) 她” 和 “她 愛(ài) 我” 就能區(qū)別開(kāi)來(lái)了。當(dāng)然啦筑舅,為了提高效率座慰,我們需要過(guò)濾掉低頻的 N-gram。
  • 在 FastText中翠拣,每個(gè)詞被看做是 n-gram字母串包版仔。為了區(qū)分前后綴情況,"<"误墓, ">"符號(hào)被加到了詞的前后端蛮粮。除了詞的子串外,詞本身也被包含進(jìn)了 n-gram字母串包谜慌。以 where 為例然想,n=3 的情況下,其子串分別為<wh, whe, her, ere, re>欣范,以及其本身 变泄。

2.1.4 FastText 和 word2vec 對(duì)比

  • 相似點(diǎn):
    • 模型結(jié)構(gòu)很像,都是采用embedding向量的形式恼琼,得到word的隱向量表達(dá)妨蛹。
    • 采用很多相似的優(yōu)化方法,比如使用Hierarchical softmax優(yōu)化訓(xùn)練和預(yù)測(cè)中的打分速度晴竞。
  • 不同點(diǎn):
    • 模型的輸出層:word2vec的輸出層蛙卤,對(duì)應(yīng)的是每一個(gè)term,計(jì)算某term的概率最大;而fasttext的輸出層對(duì)應(yīng)的是分類(lèi)的label颤难。不過(guò)不管輸出層對(duì)應(yīng)的是什么內(nèi)容神年,起對(duì)應(yīng)的vector都不會(huì)被保留和使用。
    • 模型的輸入層:word2vec的輸出層行嗤,是 context window 內(nèi)的term瘤袖;而fasttext 對(duì)應(yīng)的整個(gè)sentence的內(nèi)容,包括term昂验,也包括 n-gram的內(nèi)容。
  • 兩者本質(zhì)的不同艾扮,體現(xiàn)在 h-softmax的使用:
    • Word2vec的目的是得到詞向量既琴,該詞向量最終是在輸入層得到,輸出層對(duì)應(yīng)的h-softmax也會(huì)生成一系列的向量泡嘴,但最終都被拋棄甫恩,不會(huì)使用。
    • fastText則充分利用了h-softmax的分類(lèi)功能酌予,遍歷分類(lèi)樹(shù)的所有葉節(jié)點(diǎn)磺箕,找到概率最大的label(一個(gè)或者N個(gè))

2.2 Text-CNN文本分類(lèi)

TextCNN 是利用卷積神經(jīng)網(wǎng)絡(luò)對(duì)文本進(jìn)行分類(lèi)的算法抛虫,它是由 Yoon Kim 在2014年在 “Convolutional Neural Networks for Sentence Classification” 一文中提出的松靡。詳細(xì)的原理圖如下。

Text-CNN文本分類(lèi)模型原理圖

TextCNN詳細(xì)過(guò)程:第一層是圖中最左邊的7乘5的句子矩陣建椰,每行是詞向量雕欺,維度=5,這個(gè)可以類(lèi)比為圖像中的原始像素點(diǎn)了棉姐。然后經(jīng)過(guò)有 filter_size=(2,3,4) 的一維卷積層屠列,每個(gè)filter_size 有兩個(gè)輸出 channel。第三層是一個(gè)1-max pooling層伞矩,這樣不同長(zhǎng)度句子經(jīng)過(guò)pooling層之后都能變成定長(zhǎng)的表示了笛洛,最后接一層全連接的 softmax 層,輸出每個(gè)類(lèi)別的概率乃坤。

特征:這里的特征就是詞向量苛让,有靜態(tài)(static)非靜態(tài)(non-static)方式。static方式采用比如word2vec預(yù)訓(xùn)練的詞向量侥袜,訓(xùn)練過(guò)程不更新詞向量蝌诡,實(shí)質(zhì)上屬于遷移學(xué)習(xí)了,特別是數(shù)據(jù)量比較小的情況下枫吧,采用靜態(tài)的詞向量往往效果不錯(cuò)浦旱。non-static則是在訓(xùn)練過(guò)程中更新詞向量。推薦的方式是 non-static 中的 fine-tunning方式九杂,它是以預(yù)訓(xùn)練(pre-train)的word2vec向量初始化詞向量颁湖,訓(xùn)練過(guò)程中調(diào)整詞向量宣蠕,能加速收斂,當(dāng)然如果有充足的訓(xùn)練數(shù)據(jù)和資源甥捺,直接隨機(jī)初始化詞向量效果也是可以的抢蚀。

通道(Channels):圖像中可以利用 (R, G, B) 作為不同channel,而文本的輸入的channel通常是不同方式的embedding方式(比如 word2vec或Glove)镰禾,實(shí)踐中也有利用靜態(tài)詞向量和fine-tunning詞向量作為不同channel的做法皿曲。

一維卷積(conv-1d):圖像是二維數(shù)據(jù),經(jīng)過(guò)詞向量表達(dá)的文本為一維數(shù)據(jù)吴侦,因此在TextCNN卷積用的是一維卷積屋休。一維卷積帶來(lái)的問(wèn)題是需要設(shè)計(jì)通過(guò)不同 filter_size 的 filter 獲取不同寬度的視野。

Pooling層:利用CNN解決文本分類(lèi)問(wèn)題的文章還是很多的备韧,比如這篇 A Convolutional Neural Network for Modelling Sentences 最有意思的輸入是在 pooling 改成 (dynamic) k-max pooling劫樟,pooling階段保留 k 個(gè)最大的信息,保留了全局的序列信息织堂。

參考文獻(xiàn)

1. FastText算法原理解析
2. FastText原理總結(jié)
3. 文本分類(lèi)解決方法綜述
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末叠艳,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子易阳,更是在濱河造成了極大的恐慌附较,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件闽烙,死亡現(xiàn)場(chǎng)離奇詭異翅睛,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)黑竞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)捕发,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人很魂,你說(shuō)我怎么就攤上這事扎酷。” “怎么了遏匆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵法挨,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我幅聘,道長(zhǎng)凡纳,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任帝蒿,我火速辦了婚禮荐糜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己暴氏,他們只是感情好延塑,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著答渔,像睡著了一般关带。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沼撕,一...
    開(kāi)封第一講書(shū)人閱讀 49,144評(píng)論 1 285
  • 那天宋雏,我揣著相機(jī)與錄音,去河邊找鬼务豺。 笑死好芭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的冲呢。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼招狸,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼敬拓!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起裙戏,我...
    開(kāi)封第一講書(shū)人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤乘凸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后累榜,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體营勤,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年壹罚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了葛作。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡猖凛,死狀恐怖赂蠢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情辨泳,我是刑警寧澤虱岂,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站菠红,受9級(jí)特大地震影響第岖,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜试溯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一蔑滓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦烫饼、人聲如沸猎塞。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荠耽。三九已至,卻和暖如春比藻,著一層夾襖步出監(jiān)牢的瞬間铝量,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工银亲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慢叨,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓务蝠,卻偏偏與公主長(zhǎng)得像拍谐,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馏段,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Word2Vec 作者轩拨、臉書(shū)科學(xué)家 Mikolov 文本分類(lèi)新作 fastText:方法簡(jiǎn)單,號(hào)稱并不需要深度學(xué)習(xí)...
    山的那邊是什么_閱讀 2,362評(píng)論 0 2
  • 預(yù)備知識(shí) 為了更好的理解fastText院喜,我們先來(lái)了解一些預(yù)備知識(shí)亡蓉。第一個(gè)是BoW模型,也叫做詞袋模型喷舀。BoW模型...
    lwyaoshen閱讀 17,667評(píng)論 1 24
  • 應(yīng)用深度學(xué)習(xí)解決淘寶商品的類(lèi)目預(yù)測(cè)問(wèn)題的項(xiàng)目砍濒,總結(jié)下文本分類(lèi)領(lǐng)域特別是應(yīng)用深度學(xué)習(xí)解決文本分類(lèi)的相關(guān)的思路、做法和...
    MiracleJQ閱讀 3,565評(píng)論 0 20
  • 我所謂的反叛 是因?yàn)楹芏嗍虑槎加凶约旱牧?chǎng) 我不茍同 想寫(xiě)這個(gè)話題已經(jīng)有一段時(shí)間了甲棍,一直在糾結(jié),因?yàn)楹枚鄏appe...
    張小本閱讀 999評(píng)論 1 0
  • 躍龍禪寺位于寧焊弦矗縣縣城的南門(mén)感猛,坐落于躍龍山之上,和南門(mén)楊溪近在咫尺奢赂。躍龍禪寺鬧中取靜是個(gè)心靜的好所在陪白。拾臺(tái)階而上,...
    心若安一切安好閱讀 1,836評(píng)論 0 3