產(chǎn)品級垃圾文本分類器

向AI轉(zhuǎn)型的程序員都關(guān)注了這個(gè)號???
機(jī)器學(xué)習(xí)AI算法工程?? 公眾號:datayx
任務(wù)場景
文本反垃圾是網(wǎng)絡(luò)社區(qū)應(yīng)用非常常見的任務(wù)。因?yàn)楦鞣N利益關(guān)系,網(wǎng)絡(luò)社區(qū)通常都難以避免地會涌入大量騷擾、色情、詐騙等垃圾信息,擾亂社區(qū)秩序,傷害用戶體驗(yàn)。這些信息往往隱晦,多變,傳統(tǒng)規(guī)則系統(tǒng)如正則表達(dá)式匹配關(guān)鍵詞難以應(yīng)對。通常情況下,文本反垃圾離不開用戶行為分析,本章只針對文本內(nèi)容部分進(jìn)行討論。
為了躲避平臺監(jiān)測,垃圾文本常常會使用火星文等方式對關(guān)鍵詞進(jìn)行隱藏。例如:

垃圾文本通常還會備有多個(gè)聯(lián)系方式進(jìn)行用戶導(dǎo)流。識別異常聯(lián)系方式是反垃圾的一項(xiàng)重要工作,但是傳統(tǒng)的識別方法依賴大量策略,攻防壓力大,也容易被突破。例如:

在這個(gè)實(shí)例中,我們將使用TensorLayer來訓(xùn)練一個(gè)垃圾文本分類器,并介紹如何通過TensorFlow Serving來提供高性能服務(wù),實(shí)現(xiàn)產(chǎn)品化部署。這個(gè)分類器將解決以上幾個(gè)難題,我們不再擔(dān)心垃圾文本有多么隱晦,也不再關(guān)心它們用的哪國語言或有多少種聯(lián)系方式。
第一步,訓(xùn)練詞向量,相關(guān)代碼在word2vec文件夾,執(zhí)行步驟見word2vec/README.md。
第二步,訓(xùn)練分類器,相關(guān)代碼在network文件夾,執(zhí)行步驟見network/README.md。
第三步,與TensorFlow Serving交互,客戶端代碼在serving文件夾。
代碼??獲?。?/span>
關(guān)注微信公眾號 datayx ?然后回復(fù)??文本分類? 即可獲取。
AI項(xiàng)目體驗(yàn)地址 https://loveai.tech
網(wǎng)絡(luò)結(jié)構(gòu)
文本分類必然要先解決文本表征問題。文本表征在自然語言處理任務(wù)中扮演著重要的角色。它的目標(biāo)是將不定長文本(句子、段落、文章)映射成固定長度的向量。文本向量的質(zhì)量會直接影響下游模型的性能。神經(jīng)網(wǎng)絡(luò)模型的文本表征工作通常分為兩步,首先將單詞映射成詞向量,然后將詞向量組合起來。有多種模型能夠?qū)⒃~向量組合成文本向量,例如詞袋模型(Neural Bag-of-Words,NBOW)、遞歸神經(jīng)網(wǎng)絡(luò)(Recurrent Neural Network,RNN)和卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)。這些模型接受由一組詞向量組成的文本序列作為輸入,然后將文本的語義信息表示成一個(gè)固定長度的向量。NBOW模型的優(yōu)點(diǎn)是簡單快速,配合多層全連接網(wǎng)絡(luò)能實(shí)現(xiàn)不遜于RNN和CNN的分類效果,缺點(diǎn)是向量線性相加必然會丟失很多詞與詞相關(guān)信息,無法更精細(xì)地表達(dá)句子的語義。CNN在語言模型訓(xùn)練中也被廣泛使用,這里卷積的作用變成了從句子中提取出局部的語義組合信息,多個(gè)卷積核則用來保證提取的語義組合的多樣性。RNN常用于處理時(shí)間序列數(shù)據(jù),它能夠接受任意長度的輸入,是自然語言處理最受歡迎的架構(gòu)之一,在短文本分類中,相比NBOW和CNN的缺點(diǎn)是需要的計(jì)算時(shí)間更長。
實(shí)例中我們使用RNN來表征文本,將輸入的文本序列通過一個(gè)RNN層映射成固定長度的向量,然后將文本向量輸入到一個(gè)Softmax層進(jìn)行分類。本章結(jié)尾我們會再簡單介紹由NBOW和多層感知機(jī)(Multilayer Perceptron,MLP)組成的分類器和CNN分類器。實(shí)際分類結(jié)果中,CNN和MLP兩種分類器的準(zhǔn)確率都能達(dá)到95%以上(RNN模型由于未知原因準(zhǔn)確度較低)。相比之前訓(xùn)練的SVM分類器所達(dá)到的93%左右的準(zhǔn)確率,基于神經(jīng)網(wǎng)絡(luò)的垃圾文本分類器表現(xiàn)出非常優(yōu)秀的性能。

詞的向量表示
最簡單的詞表示方法是One-hot Representation,即把每個(gè)詞表示為一個(gè)很長的向量,這個(gè)向量的維度是詞表的大小,其中只有一個(gè)維度的值為1,其余都為0,這個(gè)維度就代表了當(dāng)前的詞。這種表示方法非常簡潔,但是容易造成維數(shù)災(zāi)難,并且無法描述詞與詞之間的關(guān)系。還有一種表示方法是Distributed Representation,如Word2vec。這種方法把詞表示成一種稠密、低維的實(shí)數(shù)向量。該向量可以表示一個(gè)詞在一個(gè)N維空間中的位置,并且相似詞在空間中的位置相近。由于訓(xùn)練的時(shí)候就利用了單詞的上下文,因此Word2vec訓(xùn)練出來的詞向量天然帶有一些句法和語義特征。它的每一維表示詞語的一個(gè)潛在特征,可以通過空間距離來描述詞與詞之間的相似性。
比較有代表性的Word2vec模型有CBOW模型和Skip-Gram模型。圖2演示了Skip-Gram模型的訓(xùn)練過程。假設(shè)我們的窗口取1,通過滑動(dòng)窗口我們得到(fox, brown)、(fox, jumps)等輸入輸出對,經(jīng)過足夠多次的迭代后,當(dāng)我們再次輸入fox時(shí),jumps和brown的概率會明顯高于其他詞。在輸入層與隱層之間的矩陣W1存儲著每一個(gè)單詞的詞向量,從輸入層到隱層之間的計(jì)算就是取出單詞的詞向量。因?yàn)橛?xùn)練的目標(biāo)是相似詞得到相似上下文,所以相似詞在隱層的輸出(即其詞向量)在優(yōu)化過程中會越來越接近。訓(xùn)練完成后我們把W1(詞向量集合)保存起來用于后續(xù)的任務(wù)。

Dynamic RNN分類器
傳統(tǒng)神經(jīng)網(wǎng)絡(luò)如MLP受限于固定大小的輸入,以及靜態(tài)的輸入輸出關(guān)系,在動(dòng)態(tài)系統(tǒng)建模任務(wù)中會遇到比較大的困難。傳統(tǒng)神經(jīng)網(wǎng)絡(luò)假設(shè)所有輸入都互相獨(dú)立,其有向無環(huán)的神經(jīng)網(wǎng)絡(luò)的各層神經(jīng)元不會互相作用,不好處理前后輸入有關(guān)聯(lián)的問題。但是現(xiàn)實(shí)生活中很多問題都是以動(dòng)態(tài)系統(tǒng)的方式呈現(xiàn)的,一件事物的現(xiàn)狀往往依托于它之前的狀態(tài)。雖然也能通過將一長段時(shí)間分成多個(gè)同等長度的時(shí)間窗口來計(jì)算時(shí)間窗口內(nèi)的相關(guān)內(nèi)容,但是這個(gè)時(shí)間窗的依賴與變化都太多,大小并不好取。目前常用的一種RNN是LSTM,它與標(biāo)準(zhǔn)RNN的不同之處是隱層單元的計(jì)算函數(shù)更加復(fù)雜,使得RNN的記憶能力變得更強(qiáng)。
在訓(xùn)練RNN的時(shí)候我們會遇到另一個(gè)問題。不定長序列的長度有可能范圍很廣,Static RNN由于只構(gòu)建一次Graph,訓(xùn)練前需要對所有輸入進(jìn)行Padding以確保整個(gè)迭代過程中每個(gè)Batch的長度一致,這樣輸入的長度就取決于訓(xùn)練集最長的一個(gè)序列,導(dǎo)致許多計(jì)算資源浪費(fèi)在Padding部分。Dynamic RNN實(shí)現(xiàn)了Graph動(dòng)態(tài)生成,因此不同Batch的長度可以不同,并且可以跳過Padding部分的計(jì)算。這樣每一個(gè)Batch的數(shù)據(jù)在輸入前只需Padding到該Batch最長序列的長度,并且根據(jù)序列實(shí)際長度中止計(jì)算,從而減少空間和計(jì)算量。
閱讀過本文的人還看了以下文章:
TensorFlow 2.0深度學(xué)習(xí)案例實(shí)戰(zhàn)
基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測
《基于深度學(xué)習(xí)的自然語言處理》中/英PDF
Deep Learning 中文版初版-周志華團(tuán)隊(duì)
【全套視頻課】最全的目標(biāo)檢測算法系列講解,通俗易懂!
《美團(tuán)機(jī)器學(xué)習(xí)實(shí)踐》_美團(tuán)算法團(tuán)隊(duì).pdf
《深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)》高清中文PDF+源碼
python就業(yè)班學(xué)習(xí)視頻,從入門到實(shí)戰(zhàn)項(xiàng)目
2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
《21個(gè)項(xiàng)目玩轉(zhuǎn)深度學(xué)習(xí):基于TensorFlow的實(shí)踐詳解》完整版PDF+附書代碼
《深度學(xué)習(xí)之pytorch》pdf+附書源碼
PyTorch深度學(xué)習(xí)快速實(shí)戰(zhàn)入門《pytorch-handbook》
【下載】豆瓣評分8.1,《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn和TensorFlow》
《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼
汽車行業(yè)完整知識圖譜項(xiàng)目實(shí)戰(zhàn)視頻(全23課)
李沐大神開源《動(dòng)手學(xué)深度學(xué)習(xí)》,加州伯克利深度學(xué)習(xí)(2019春)教材
筆記、代碼清晰易懂!李航《統(tǒng)計(jì)學(xué)習(xí)方法》最新資源全套!
《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》最新2018版中英PDF+源碼
將機(jī)器學(xué)習(xí)模型部署為REST API
FashionAI服裝屬性標(biāo)簽圖像識別Top1-5方案分享
重要開源!CNN-RNN-CTC 實(shí)現(xiàn)手寫漢字識別
同樣是機(jī)器學(xué)習(xí)算法工程師,你的面試為什么過不了?
前海征信大數(shù)據(jù)算法:風(fēng)險(xiǎn)概率預(yù)測
【Keras】完整實(shí)現(xiàn)‘交通標(biāo)志’分類、‘票據(jù)’分類兩個(gè)項(xiàng)目,讓你掌握深度學(xué)習(xí)圖像分類
VGG16遷移學(xué)習(xí),實(shí)現(xiàn)醫(yī)學(xué)圖像識別分類工程項(xiàng)目
特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊
如何利用全新的決策樹集成級聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?
Machine Learning Yearning 中文翻譯稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在線識別手寫中文網(wǎng)站
中科院Kaggle全球文本匹配競賽華人第1名團(tuán)隊(duì)-深度學(xué)習(xí)與特征工程
不斷更新資源
深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、數(shù)據(jù)分析、python
?搜索公眾號添加:?datayx??
機(jī)大數(shù)據(jù)技術(shù)與機(jī)器學(xué)習(xí)工程
?搜索公眾號添加:?datanlp
長按圖片,識別二維碼
