
因為目前有在做涉及到文本分析(情感分析)的項目,也想為以後的相關項目做下知識儲備,最近開始入坑Tensorflow的一些深度學習的NLP相關實踐,同時學習了文本分類領域中基于深度學習的模型的一些應用知識(然而還是個菜鳥,半懂不懂的哈哈哈)。這裡對相關知識進行了總結,鞏固個人知識體系,同時分享給大家~
其實最近挺糾結的,有一點點焦慮,因為自己一直都期望往自然語言處理的方向發展,夢想成為一名NLP算法工程師,也正是我喜歡的事,而不是為了生存而工作。我覺得這也是我這輩子為數不多的剩下的可以自己去追求自己喜歡的東西的機會了。然而現實很殘酷,大部分的公司算法工程師一般都是名牌大學,碩士起招,如同一個跨不過的門檻,讓人望而卻步,即使我覺得可能這個方向以後的路并不如其他的唾手可得的路輕松,但我的心中卻一直有一股信念讓我義無反顧,不管怎樣,夢還是要有的,萬一實作了呢~
扯得有點遠了hhh,回到文章,因為目前有在做涉及到文本分析(情感分析)的項目,也想為以後的相關項目做下知識儲備,最近開始入坑Tensorflow的一些深度學習的NLP相關實踐,同時學習了文本分類領域中基于深度學習的模型的一些應用知識(然而還是個菜鳥,半懂不懂的哈哈哈)。這裡對相關知識進行了總結,鞏固個人知識體系,同時分享給大家~
(提前聲明:菜雞觀點,非大佬觀點,歡迎糾正,也會不斷修正的)
持續更新........
文本分類領域,目前主要可分為:
情感分析
新聞分析
主題分類
問答系統
自然語言推理(NLI)
五大領域(當然也有一些其他細分領域,這裡不進行讨論)。近幾年随着深度學習在自然語言處理領域的應用,文本分類也進入了由深度學習模型所導引的第三個階段,逐漸超越了基于傳統機器學習的方法。
目前,學術界針對文本分類所提出的深度學習模型大緻有150多種,根據結構可分為11大類:
前饋網絡:将文本視為詞袋
基于RNN的模型:将文本視為一系列單詞,旨在捕獲文本單詞依存關系和文本結構
基于CNN的模型:經過訓練,可以識别文本分類的文本模式(例如關鍵短語)。
膠囊網絡(Capsule networks):解決了CNN在池化操作時所帶來的資訊丢失問題。
注意力機制:可有效識别文本中的相關單詞,并已成為開發DL模型的有用工具。
記憶體增強網絡:将神經網絡與某種外部存儲器結合在一起,該模型可以讀取和寫入。
圖神經網絡:旨在捕獲自然語言的内部圖結構,例如句法和語義解析樹。
暹羅神經網絡(Siamese):專門用于文本比對,這是文本分類的特殊情況。
混合模型(Hybrid models):結合了注意力,RNN,CNN等以捕獲句子和文檔的局部和全局特征。
Transformers:比RNN擁有更多并行處理,進而可以使用GPU高效的(預)訓練非常大的語言模型。
監督學習之外的模組化技術:包括使用自動編碼器和對抗訓練的無監督學習,以及強化學習。
阿巴阿巴,如果看不太懂也沒關系,我也隻認識比較經典的幾個hhh,但是可以了解下做儲備嘛,也許哪一天就接觸到了呢~下面這張圖是2013年至2020年釋出的一些很經典的深度學習文本嵌入和分類模型。我們可以看到入門的word2vec在2013年就已經提出來了,還有當下比較熱門的Tree-LSTM、BERT也是前幾年提出來的,的确是更新很快啊emmmm...
我們在針對文本分類任務選擇最佳的神經網絡結構時,常常會很迷茫,像我這種菜鳥就是百度下哪個模型社群比較火就用大佬們的代碼來複現hhh(當然使用比較多也說明這個模型的性能和适用性不會太差)。老師常說,其實要多試,采用精度最高的。嗚嗚嗚,然而現實是前期用來做精度驗證的資料集的标注就是一個很大的工程量了,然後每一個模型的實作也.....很!複!雜!啊!超級燒腦,畢竟神經網絡的建構可不是傳統機器學習算法那樣調一兩個參數就好了~
當然,多試肯定是要多試的,但是我們應該有選擇性的試,那麼,初步的篩選、确定模型的類别就很重要了,這一點其實很靠經驗,我這個菜雞就不教壞大家了,我們來看下大佬的官方思路:
神經網絡結構的選擇取決于目标任務和領域,領域内标簽的可用性,應用程式的延遲和容量限制等,這些導緻選擇差異會很大。盡管毫無疑問,開發一個文本分類器是反複試錯的過程,但通過在公共基準(例如GLUE )上分析最近的結果,我們提出了以下方法來簡化該過程,該過程包括五個步驟:
選擇PLM(PLM,pretraining language model預訓練語言模型):使用PLM可以顯着改善所有流行的文本分類任務,并且自動編碼的PLM(例如BERT或RoBERTa)通常比自回歸PLM(例如OpenAI GPT)更好。Hugging face擁有為各種任務開發的豐富的PLM倉庫。
領域适應性:大多數PLM在通用領域的文本語料庫(例如Web)上訓練。如果目标領域與通用的領域有很大的不同,我們可以考慮使用領域内的資料,不斷地預訓練該PLM來調整PLM。對于具有大量未标記文本的領域資料,例如生物醫學,從頭開始進行語言模型的預先訓練也可能是一個不錯的選擇。
特定于任務的模型設計:給定輸入文本,PLM在上下文表示中産生向量序列。然後,在頂部添加一個或多個特定任務的層,以生成目标任務的最終輸出。特定任務層的體系結構的選擇取決于任務的性質,例如,需要捕獲文本的語言結構。比如,前饋神經網絡将文本視為詞袋,RNN可以捕獲單詞順序,CNN擅長識别諸如關鍵短語之類的模式,注意力機制可以有效地識别文本中的相關單詞,而暹羅神經網絡則可以用于文本比對任務,如果自然語言的圖形結構(例如,分析樹)對目标任務有用,那麼GNN可能是一個不錯的選擇。
特定于任務的微調整:根據領域内标簽的可用性,可以使用固定的PLM單獨訓練特定任務的層,也可以與PLM一起訓練特定任務的層。如果需要建構多個相似的文本分類器(例如,針對不同領域的新聞分類器),則多任務微調是利用相似領域的标記資料的好選擇。
模型壓縮:PLM成本很高。它們通常需要通過例如知識蒸餾進行壓縮,以滿足實際應用中的延遲和容量限制。
是不是看不懂了,我攤牌了,第一遍讀完我整個人都是懵的,然後又仔細讀了兩遍,好像懂了一點點,又百度了一些專業名詞,又懂了一丢丢了,但還是懂一半啊哈哈哈哈。估計要真正走一遍流程之後采用完全解讀吧!等之後有時間實踐一遍我再重新更新解讀一下!
當下常用的用于評估文本分類模型性能的名額,以下介紹4種:
準确率和錯誤率(Accuracy and Error Rate):評估分類模型品質的主要名額,是從整體角度出發的。假設TP,FP,TN,FN分别表示真積極,假積極,真消極和假消極,𝑁為樣本總數。分類精度和錯誤率在等式中定義如下:
Accuracy=(TP+TN)/N
Error Rate=(FP+FN)/N
Error Rate= 1-Accuracy
精度/召回率/ F1分數(Precision / Recall / F1 score):也是主要名額,針對于預測結果而言的。F1分數是精度和查全率的調和平均值。一般情況下用于單個分類類别樣本的驗證,對于多類别分類問題,也可以為每個類别标簽計算精度和召回率,并分析類别标簽上的各個性能,或者對這些值取平均值以擷取整體精度和召回率。F1較高說明模型比較理想。
Precision = TP/(TP+FP)
Recall = TP/(TP+TN)
F1 score = 2Precision*Recall/(Precision+Recall)
Exact Match(EM):精确比對度量标準是問答系統的一種流行度量标準,它可以測量與任何一個基本事實答案均精确比對的預測百分比。EM是用于SQuAD的主要名額之一。
Mean Reciprocal Rank(MRR):MRR通常用于評估NLP任務中的排名算法的性能,例如查詢文檔排名和QA。𝑄是所有可能答案的集合,ranki是真相答案的排名位置。
其他廣泛使用的名額包括平均精度Mean Average Precision(MAP),曲線下面積 Area Under Curve(AUC),錯誤發現率False DiscoveryRate,錯誤遺漏率False Omission Rate,僅舉幾例。
相關的定義百度很多hhh,這裡有幾個點是我在學習過程中注意到的:
很多人會把Accuracy和Precision搞混,雖然中文轉換過來經常回混用,但切記這是兩個不同的東西,一個時相對整體的名額,一個是相對于預測結果的。
一般情況下,查準率(精度)和查全率(召回率)不能同時提高。這是很多人都不太會注意的點,是以解釋一下,一般當查準率比較低時,我們會提高門檻值,即減少輸入的測試樣本,進而保證模型預測出的正例都是真實的正例,很明顯這個時候雖然查準率提高了,但我輸入的總測試樣本減少了,導緻有些樣本你本來可以正确預測的,但你并沒有輸入。這個就是提高 Precision 而導緻 Recall 降低的過程,你也可以反過來,得到的就是提高 Recall 而導緻 Precision 降低的過程。是以,一般Precision高,Recall低;Recall低高,Precision低
P-R曲線問題,這裡貼一張在網上淘到的某位大佬的筆記hhh,是以就截圖放進來了,講的很透徹:
當然深度學習模型性能分析除了使用常用的評估文本分類模型性能的名額進行評估外,還可以與傳統的機器學習算法或其他非深度學習模型名額進行一個對比,進一步來凸顯性能的提升。
深度學習其實是一個很早前提出來的東西,卻在近幾年火得一塌糊塗,不僅源于相關理論、硬體條件的發展,當然也源于其強大的應用成效。借助深度學習模型,CV和NLP的相關領域也取得了很大的進步。前沿、先進的新穎思路也層出不窮,如神經嵌入,注意力機制,自我注意力,Transformer,BERT和XLNet,這些思想導緻了過去十年的快速發展。在這方面,國内其實做的還不夠完善,相比于國外大量成熟的落地項目和開源工具。然而,由于中文語言的特殊性,我們也看到中文自然語言處理,中文文本分析還具有很大的發展改善空間。很多公司也開拓了中文文本分析的一站式業務,并緻力于 提升其适用性和精确度。
缺少大規模的中文領域資料集,這是我在中文自然語言探索時所發現的一個國内學術的重大缺失,這在一定程度上也抑制了一些相關領域的發展,同時也難以形成一個微細分通用領域的模型評測度量,這也導緻了很多小型團隊的研究成果也難以推廣。在這個基礎上,針對更具挑戰性的文本分類任務建構新的資料集,例如具有多步推理的QA,針對多語言文檔的文本分類,用于極長的文檔的文本分類也将成為下一個中文文本分析領域飛速發展的突破口。(僅代表個人觀點hhh)
除此之外,因為目前大多數的深度學習模型是受監督類型,是以需要大量的領域标注文本,需要大量人力和時間成本的投入,雖然目前已經有了少量學習和零學習Few-Shot and Zero-Shot Learning概念的提出,但仍不夠成熟,如何更好地、較為平衡地降低模型的輸入成本是一個下一個待解決的問題。
增加對常識知識進行模組化的探索。在這一點上,領域知識圖譜的建構是一個重要的分支。結合知識圖譜進行深度學習,進而提高模型性能的能力,在提高解釋性的同時,無疑也增加了機器對語義的了解,這和人的思維是很接近的,而不隻是一個不可預測的黑箱模型。在此基礎上,實作以人們類似的思維方式基于對未知數的“預設”假設進行推理,而不隻是依賴于數字模型。目前,知識圖譜建構的研究在國内已經有了大量的探索,趨向一個較為成熟的階段,而結合知識圖譜進行深度學習的研究卻鮮有團隊進行探索,或者說在萌芽階段(如果沒記錯大部分是基于圖資料庫的深度學習),至少還沒有較為著名的開源項目(可能是我沒發現哈哈哈)。
黑箱模型的深層探索。雖然深度學習模型在具有挑戰性的基準上取得了可喜的性能,但是其中大多數模型都是無法解釋的。例如,為什麼一個模型在一個資料集上勝過另一個模型,而在其他資料集上卻表現不佳?深度學習模型究竟學到了什麼?能在給定的資料集上達到一定精度的最小神經網絡架構是什麼?盡管注意力和自我注意力機制為回答這些問題提供了一些見識,但仍缺乏對這些模型的基本行為和動力學的詳細研究。更好地了解這些模型的理論方面可以幫助開發針對各種文本分析場景的更好的模型。
部落格首發于:https://www.wujunchao.top/?p=121
一半是現實,一半是夢想~
一念花開,一念花落~