【人人都能學得會的NLP - 文字分類篇 04】層次化多標籤文字分類如何做?
NLP Github 專案:
-
NLP 專案實踐:fasterai/nlp-project-practice
介紹:該倉庫圍繞著 NLP 任務模型的設計、訓練、最佳化、部署和應用,分享大模型演算法工程師的日常工作和實戰經驗
-
AI 藏經閣:https://gitee.com/fasterai/ai-e-book
介紹:該倉庫主要分享了數百本 AI 領域電子書
-
AI 演算法面經:fasterai/nlp-interview-handbook#面經
介紹:該倉庫一網打盡網際網路大廠NLP演算法面經,演算法求職必備神器
-
NLP 劍指Offer:https://gitee.com/fasterai/nlp-interview-handbook
介紹:該倉庫彙總了 NLP 演算法工程師高頻面題
1、引言
分類問題是機器學習中的經典問題。我們也在前文介紹了多標籤分類任務等複雜場景下的文字分類任務,但在現實世界的許多問題上,標籤之間具有層次結構,其中,一個標籤可以被特殊化為子類或者被一個父類所包含,層次多標籤正如下圖所示,Chemistry有著兩個子類。這些類標籤以層次結構(Hierarchical Structure) 的形式儲存,這就是層次多標籤分類(Hierarchical-Multilabel-Text-Classification,hmtc)問題。
標準多標籤和層次多標籤的不同
之前的多標籤可以稱為標準平面多標籤任務,層次多標籤分類和我們之前標準平面多標籤分類對比如下:
- 層次的標籤是以預定義的層次結構儲存的,這帶來了不同層級以及相同層級之間的標籤之間的內在關係,而對於平面多分類問題不用考慮這種關聯關係。
- 如何學習和利用這些不同層級的關係、並對分類結果從層級關係遵循性的角度進行評價成為了層次多標籤分類問題的難點和挑戰。
2、層次多標籤任務
2.1任務簡介:
與多標籤分類類似,給定一個文件樣本可以有一個或者多個類標籤與之對應,不同的是,這些標籤是以層次結構儲存的,層次結構中低的標籤受到層級較高的標籤的約束,層次結構在帶來類標籤之間層次關係的同時,也帶來了計算複雜等更具有挑戰性的特點。
2.2處理流程:
一般來說,層次多標籤任務中涉及到資料集獲取、文字預處理、文字表示、特徵降維、層次結構標籤表示、分類器設計、結果輸出等工作,其中文字預處理、文字表示、特徵降維、層次結構標籤表示、分類器設計比較重要,流程如下圖所示。
(1)文字預處理
文字預處理是處理文字分類任務的重要過程,透過文字預處理可以抽取文字中的重要資訊,去除不必要的內容。文字預處理的一般步驟是固定的,包括分詞(一般英語單詞已經分詞,而對中文需要進行分詞)、詞幹提取(去除單詞的不同詞性表示,得到一致的單詞表示)、刪除停用詞等。
(2)文字表示
文字是非結構化資料,而擬合訓練的模型輸入一般需要的是結構化資料,所以在上面的文字預處理階段後,一般採用以向量的形式來表示文字,準確的向量文字表示可以在很大程度上提升模型的效果。常用的文字向量化的方法主要有兩種:第1種是離散的表示,常見的有獨熱編碼模型等;第2種是分散式的表示,比如有BERT、Word2vec等等。
(3)特徵降維
由於向量空間模型來描述的文字向量通常具有較高的維度,這對於後續的分類任務來說,將帶來效率低下和精確性下降的危害。在文字分類中,特徵降維可以分為基於特徵選擇和基於特徵提取的方法。
(4)層次結構標籤表示
由於層次多標籤分類問題對應的標籤體系是儲存在層次結構中的,所以越來越多的混合方法不僅考慮了文字提供的資訊,也對層次結構標籤進行了相應的表示,未來的方法也將會越來越重視標籤的表示來提高模型效能。
(5)分類器設計
由於層次結構標籤體系下,標籤之間具有結構關係語義,因此,其分類器的設計也與一般的分類器不同,本次分享也將重點對分類器的設計進行討論。
2.3面臨挑戰:
(1)合適的文字表示方式
文字一般是非結構化或者半結構化資料,而分類模型的輸入一般是結構化的向量或者張量等,所以怎樣將文字進行編碼表示,以儘可能保留文字中單詞和單詞、單詞和句子以及句子和句子的順序和語義關係資訊是文字分類的第一步,也是很關鍵的一步。
(2)層次標籤結構語義表示
在層次多標籤文字分類中,標籤之間具有的天然層次依賴關係,例如父—子關係、祖先—後代關係等,這些關係有著不同權重的依賴,它們也叫做標籤的層次約束,文字和這些標籤具有不同層次不同的關聯如何利用它們之間的關係以及標籤之間的關係是一個挑戰,以樹或者DAG(有向無環圖)結構進行建模是目前普遍使用的方法。不過,這些方法相對簡單,對標籤之間以及文字和標籤的複雜語義關聯刻畫並不充分。
(3)缺乏合適的評估指標
在層次多標籤分類問題中,很多研究者提出了自己的評估指標,有的僅僅是自己在使用,有的沿用了多標籤分類中的評估指標,比如精準率、召回率、F1值等。但是很顯然,普通的多標籤分類的評價指標不能很好地評價層次多標籤分類問題,因為在預測時,如果預測結果是真實標籤的兄弟、父親或者後代節點時,這些錯誤的嚴重程度應該是不同的,而上述指標等卻不能體現出這些差異,但是從文字分類的角度來看,預測出錯的程度又是相同的,所以,對於什麼樣的評估指標才能正確反映HMTC中的演算法模型效能還沒有公認的定論。
(4)分類器的設計
分類器不僅要關注於文字的層次關係,而且要關注不同層次不同標籤和文字的關係,分類器如何利用文字的層次關係以及文字和標籤之間的關係,利用的程度有多深,這些都是需要研究的難點,當然這也取決於具體的任務。
3、層次多標籤解決思路
根據是否利用層次類標籤資訊以及如何利用層次資訊,可以將層次多標籤分類演算法主要分為非層次方法和層次方法,其中非層次方法又可以叫做平面方法;而層次方法主要可以分為3種,分別是區域性方法、全域性方法以及它們的組合,即混合方法,如下圖所示:
3.1非層次方法
(1)平面方法
平面方法忽略層次標籤之間的依賴關係,將其轉換為平面的多標籤分類問題,然後再使用多標籤分類的方法進行處理,對於層次標籤的內部標籤節點,以層次約束為準則,任何被歸類為子標籤的樣本都自動被歸類於其所有祖先標籤節點。
在平面方法中,最重要的不是分類器設計,而是文字表示,我們在文字分類(一)和文字分類(二)中從技術演化過程詳細分析了文字表示方法,但是需要注意的是將層次多標籤問題轉換為平面多標籤任務是最差的方法,因為它忽略了層次分類中各類別之間的依賴關係,這種依賴關係不僅存在於不同層級之間,也存在於同一層級的不同類之間,平面方法沒有考慮這些特點,那麼我們來看看層次方法是如何解決這些問題的。
3.2層次方法
(1)區域性方法
區域性方法是利用分而治之的思想,將整個分類問題轉換成多個區域性的子問題,透過解決多個子問題,在層次結構上建立多個區域性分類器,最後再將這些分類結果組合起來為全域性的分類結果。
根據使用區域性資訊的不同,區域性方法可以劃分為不同的策略,主要有
- LCN (LocalClassNode)
- LCPN(LoealCassifierParentNode)
- LCL(LocalClassLevel)
這三種策略使用的分類器個數不同,另外使用的區域性標籤依賴資訊也不盡相同。
首先,我們先看下圖的LCN方法,它對於每個節點來進行分類。
其次,我們看下圖的LCPN方法,它對於父節點的子類來進行分類。
最後,LCL使用了同一層級的關係,實現不同層次類的預測。
以上三種方法也有著相似的處理流程:
在測試階段卻都是以自上而下(Top-Down)的正規化進行的從根節點開始,只有被當前的分類器預測為正的樣本才會被傳遞給其子節點的分類器,依此類推,直至到達葉子節點分類器
但是它存在一定的問題:
- 錯誤傳播問題:需要注意的是,隨著類層次向葉子方向移動,錯誤分類也有著向下傳播的風險
- 模型計算消耗巨大:因為涉及到的分類器過多,模型的引數量會巨大。
(2)全域性方法
全域性方法利用整體的資訊,在層次結構上只建立一個分類器來同時處理所有的類別。大多數全域性方法是基於平面方法修改得來的。近年來,全域性方法大部分是以神經網路實現的,當然也有基於傳統機器學習方法的,所以本節從這兩種大類入手。
①傳統機器學習中,一般採取基於決策樹或者基於整合的方法
- 決策樹思想:
決策樹以樹形結構為架構,在面對分類問題時,透過資訊增益或者資訊增益比等以各個特徵對例項樣本進行分類的過程,即透過樹形結構的模型,在每一層上對特徵值進行判斷,遞迴到葉子節點的決策過程。
- 決策樹舉例:
C4.5演算法原本是平面的決策樹演算法,不能用於層次分類,有文章提出的HMC4.5方法,基於C4.5對計算類熵的方法進行了修改:在C4.5原始的演算法中,每次都是選取資訊增益比最大的屬性作為當前分類的子樹根節點,但是HMC4.5使用所有類的熵的和,相當於描述屬於一個示例的所有類的資訊量之和。該模型將整個層次歸納為一個決策樹,歸納過程較為複雜,但是會生成一組簡單的規則。
- 整合思想:
整合學習的思想是將若干個子學習器(分類器&迴歸器)透過某種策略(Bagging、Boosting)組合之後產生一個新學習器。
- 整合舉例:
AdaBoost的全域性方法,針對DAG(有向無環圖)結構採用非強制性葉節點預測:先對文字資料進行預處理,然後結合適配的AdaBoost進行資料集上的規則學習,最後對樣本進行測試且對預測不一致進行處理:對不一致的節點,考慮其所有祖先類的預測置信度,如果它們的置信度足夠高,那麼就將其所有祖先類來標記例項,否則去除掉該不一致的類標記。
②神經網路的方法中,一般採取基於圖表示學習、注意力機制等方式進行學習
- 圖表示學習思路:
層次多標籤分類存在結構資訊,而圖這種表達形式能夠挖掘結構資訊實現層次分類任務,因此圖表示學習為層次分類任務提供了良好的解決思路。
- 圖表示學習舉例:
圖表示模型首先對文字以詞共現矩陣將文字轉換為圖,可以使用對節點的鄰居節點進行卷積等操作實現圖嵌入,這種思想類似影像或者普通文字一樣進行交替卷積、池化操作,最後透過全連線層進行分類預測,並可以為標籤之間的層次關係設定損失函式,並和網路模型最後的交叉熵函式共同加權作為損失函式,在全域性的層次上考慮層次關係。
- 基於注意力機制的思路:
注意力機制就是把注意力放在重要的資訊上,在文字分類情境下,就是將和層次結構各層最關聯的文字內容利用注意力機制,對文字語義表示的不同部分分配不同的權重來突出實現的。
- 基於注意力機制舉例:
基於注意力的模型同時也可以和上述圖表示學習進行結合,將文字和標籤使用圖表示後,將文字以BERT和雙向GRU進行上下文語義資訊抽取,並透過多頭注意力機制,將標籤的圖表示作為查詢,文件作為鍵值對,讓標籤的層次資訊融入到文字表示輸出中,抽取文字的不同部分和標籤層次中各個層次、各個類別之間的關係資訊。
(3)混合方法
為了結合區域性方法和全域性方法的優勢,可以在利用層次結構區域性資訊的同時也利用全域性資訊,最後對這兩部分進行統一處理,這類方法叫做混合方法。
- HMCN混合模型
- 簡介
以HMCN混合模型進行分析,它是第一個結合區域性和全域性資訊進行層次分類的基於神經網路的HMTC方法,可以適用在樹結構或者DAG(有向無環圖)結構。
- 模型型別
它有兩個型別,分別是前饋版本HMCN-F和遞迴版本HMCN-R,二者的主要區別在於前者需要訓練更多的引數,而後者因為在層級之間共享權重矩陣並且使用類LSTM結構對層次資訊進行編碼,在關聯相鄰層次結構的同時也減少了需要訓練的引數,並且隨著層級越多遞迴版本的優勢越大。
- 總體思路
HMCN模型在標籤層級結構的每一層都會輸出區域性預測以及最後的全域性預測,而最終的預測是各個區域性預測的連線以及全域性預測的加權組合而成;此外,各層的輸入結合了上層的啟用和重用輸入特徵,從而在原始特徵和給定層級之間建立緊密的聯絡;對於預測不一致的情況,則透過在最佳化區域性和全域性損失函式的同時加上懲罰層次違規來儲存預測遵循層級制約。以HMCN-F為例,其模型結構如下:
4、層次多標籤評估指標
平面方法的評價指標並不能體現層次多標籤問題的特點,本節主要展示針對層次分類的評價指標。
平面方法中,總要使用精準率和召回率,這些在之前的分享中已經介紹;而對於預測類別和實際類別處於層次中不同位置予以不同的關注,從而考慮了標籤的層次結構的特性。主要可分為:hP、hR和hF
(1)h精準度(hierarchical-precision,hP)
簡單來說,就是對部分正確的分類給予信任,對距離更遠的預測錯誤更大的懲罰,對更高層次的預測錯誤更大的懲罰,hP的值越大,說明模型預測為真的樣本更多的為正例。公式如下:
(2)h召回率(hierarchical-Recall,hR)
hR的值越大,說明模型將更多為真的樣本預測正確,hR見公式。公式如下:
(3) ℎ��
如上所示,hP和hR分別從真實樣本和預測為真的樣本出發,考慮不夠全面,所以有指出可以將二者結合起來,就變成了ℎ��,公式如下:
一般,將β取為1,表示將hP和hR賦予同等重要的權重
5、層次多標籤未來發展方向
未來的需要繼續突破的研究方向主要包括下面幾點:
(1)分類器的設計
本文的重點在於關注文字分類器的設計,在此過程中如何利用文字和各層標籤的關係、如何利用層次標籤的依賴關係是考察分類器優劣的一個重要方面,這也是本文劃分層次方法的依據,只有在具體的任務中較為精準地抓住上述的關係,並在標籤預測時,將這些關係進行有機的利用是一個難點,也是未來的一個重要研究方向。
(2)尋找更好的文字編碼表示
文字分類和其他分類的一個很大區別在於,因為文字一般是非結構化或者半結構資料,如何將其表示並能夠較少地損失其原來蘊含的資訊,這對後續的文字分類來說很重要,當然,Transformer和BERT是兩個目前效果較好的語言模型,也可以尋求其他方法來表示文字,比如文字的圖表示等。但是這些表示都是通用的表示方法,而什麼樣的編碼表示更適合於層次多標籤文字分類還有待進一步研究。
(3)極端的層次多標籤文字分類問題
隨著應用的深入,不少應用面臨極端的層次多標籤文字分類任務。它的特點是層次標籤的數目非常多,層次級別也非常深,造成模型規模可能非常龐大,目前的計算能力難以處理。如何高效地處理極端層次多標籤文字分類問題將成為未來的一個研究方向。
(4)現實資料集中標籤的長尾問題
在現實資料集中,大部分標籤的資料是相對較少的,即很少的資料和一些標籤關聯,甚至沒有資料關聯,特別在層次結構的底層靠近葉子節點處。長尾問題在極端的層次多標籤文字分類問題中尤其嚴重。這種情況對於模型學習將造成困難,可能導致無法預測的問題。因此,如何處理層次多標籤文字分類中的長尾問題,也是未來的一個重要研究方向。
【動手學 RAG】系列文章:
- 【RAG 專案實戰 01】在 LangChain 中整合 Chainlit
- 【RAG 專案實戰 02】Chainlit 持久化對話歷史
- 【RAG 專案實戰 03】優雅的管理環境變數
- 【RAG 專案實戰 04】新增多輪對話能力
- 【RAG 專案實戰 05】重構:封裝程式碼
- 【RAG 專案實戰 06】使用 LangChain 結合 Chainlit 實現文件問答
- 【RAG 專案實戰 07】替換 ConversationalRetrievalChain(單輪問答)
- 【RAG 專案實戰 08】為 RAG 新增歷史對話能力
- More...
【動手部署大模型】系列文章:
- 【模型部署】vLLM 部署 Qwen2-VL 踩坑記 01 - 環境安裝
- 【模型部署】vLLM 部署 Qwen2-VL 踩坑記 02 - 推理加速
- 【模型部署】vLLM 部署 Qwen2-VL 踩坑記 03 - 多圖支援和輸入格式問題
- More...
【人人都能學得會的NLP】系列文章:
- 【人人都能學得會的NLP - 文字分類篇 01】使用ML方法做文字分類任務
- 【人人都能學得會的NLP - 文字分類篇 02】使用DL方法做文字分類任務
- 【人人都能學得會的NLP - 文字分類篇 03】長文字多標籤分類分類如何做?
- 【人人都能學得會的NLP - 文字分類篇 04】層次化多標籤文字分類如何做?
- 【人人都能學得會的NLP - 文字分類篇 05】使用LSTM完成情感分析任務
- 【人人都能學得會的NLP - 文字分類篇 06】基於 Prompt 的小樣本文字分類實踐
- More...
本文由mdnice多平臺釋出