零樣本文本分類——低資源場景下文本分類的利器
筆者近期在使用一些開源算法解決低資源場景分類時(shí),發(fā)現(xiàn)使用一些在modelscope社區(qū)上開源的零樣本分類模型可以極大提高分類準(zhǔn)確率,因此對(duì)零樣本文本分類模型進(jìn)行了梳理,希望對(duì)大家有所幫助~
模型傳送門:
基于自然語言推理的零樣本分類模型:StructBERT零樣本分類-中文-base。
基于文本生成的零樣本分類模型:全任務(wù)零樣本學(xué)習(xí)-mT5分類增強(qiáng)版-中文-base。
為了更直觀地體現(xiàn)零樣本分類模型在低資源場景下的優(yōu)勢(shì),下面我們先來看一個(gè)實(shí)際案例。
實(shí)際案例——工單分類
一些在線平臺(tái)每天都會(huì)產(chǎn)生大量的問題工單,產(chǎn)研同學(xué)需要對(duì)這些工單進(jìn)行歸類和分析,進(jìn)而定位問題、了解變化趨勢(shì)并優(yōu)化產(chǎn)品。由于產(chǎn)品的變化較快,因此產(chǎn)品的分類體系需要靈活調(diào)整,人工打標(biāo)的方式無法滿足日常的工單分析需求,費(fèi)時(shí)費(fèi)力?;趍odelscope開源社區(qū)開放的領(lǐng)先算法模型,我們針對(duì)工單分類的需求,研發(fā)了分類算法,旨在幫助產(chǎn)研團(tuán)隊(duì)針對(duì)工單內(nèi)容實(shí)現(xiàn)自動(dòng)化歸類,進(jìn)而提升工單處理和產(chǎn)品迭代的效率。
在解決工單分類任務(wù)中,遇到的主要難點(diǎn)有:
業(yè)務(wù)方初期可投入的人力資源有限。
有效的標(biāo)注數(shù)據(jù)很少,存在平均每個(gè)類別只有不到10個(gè)樣本的情況。
常規(guī)的分類算法得到的模型效果非常之差,難以滿足基本使用需求。
針對(duì)上述難點(diǎn),我們選擇了采用零樣本分類模型進(jìn)行算法的構(gòu)建。通過零樣本文本分類模型高質(zhì)量建模工單文本與各個(gè)標(biāo)簽文本的相關(guān)性,再將預(yù)測結(jié)果進(jìn)行整合排序,最終得到與工單文本最相關(guān)的標(biāo)簽。實(shí)驗(yàn)結(jié)果如下表所示,在3個(gè)低資源的工單分類任務(wù)上,該模型相較于普通分類模型均取得了明顯的提升,其中:
平臺(tái)1:整體準(zhǔn)確率從0.11提升至0.33,一級(jí)類別準(zhǔn)確率從0.22提升至0.47,二級(jí)類別準(zhǔn)確率從0.19提升至0.46。
平臺(tái)2:整體準(zhǔn)確率從0.13提升至0.64,一級(jí)類別準(zhǔn)確率從0.46提升至0.70。
平臺(tái)3:整體準(zhǔn)確率從0.15提升至0.69,一級(jí)類別準(zhǔn)確率從0.53提升至0.75。

前言
零樣本學(xué)習(xí)(Zero-Shot Learning)是一種機(jī)器學(xué)習(xí)范式,它使用在訓(xùn)練階段從未學(xué)習(xí)過的樣本和類別標(biāo)簽來測試模型。因此,零樣本學(xué)習(xí)的模型應(yīng)當(dāng)具備一定的對(duì)從未學(xué)習(xí)過的分類任務(wù)直接進(jìn)行預(yù)測的能力。機(jī)器學(xué)習(xí)(Machine Learning)已經(jīng)在各個(gè)領(lǐng)域取得了廣泛的應(yīng)用,而其中分類是最基礎(chǔ)的機(jī)器學(xué)習(xí)任務(wù),它需要分析未分類數(shù)據(jù),并確定如何將其歸屬到已知類別中。通常分類任務(wù)需要大量已知類別的數(shù)據(jù)來構(gòu)建和訓(xùn)練模型,然而獲取任何特定任務(wù)、特定領(lǐng)域的已標(biāo)注數(shù)據(jù)都是一個(gè)非常昂貴且耗時(shí)的過程,這使得零樣本學(xué)習(xí)最近變得越來越流行。
文本分類(Text Classification)是自然語言處理(NLP)領(lǐng)域中的一種任務(wù),它指的是將文本數(shù)據(jù)(如新聞文章、電子郵件或社交媒體帖子)自動(dòng)分配到一個(gè)或多個(gè)預(yù)定義的類別(如政治、體育、娛樂等)中。這可以通過訓(xùn)練機(jī)器學(xué)習(xí)模型來實(shí)現(xiàn),該模型可以根據(jù)文本的詞匯、語法等特征來預(yù)測它的類別。
零樣本文本分類(Zero-Shot Text Classification)是一種文本分類方法,其優(yōu)勢(shì)在于它不需要任何預(yù)先標(biāo)記的訓(xùn)練樣本來分類文本。 這意味著,即使在缺乏預(yù)先標(biāo)記的數(shù)據(jù)的情況下,也可以對(duì)文本進(jìn)行分類。傳統(tǒng)的文本分類方法需要大量預(yù)先標(biāo)記的訓(xùn)練樣本來訓(xùn)練模型,但在實(shí)際應(yīng)用中,很難收集到足夠的預(yù)先標(biāo)記的樣本。 因此,零樣本文本分類可以作為一種替代方案,以便在缺乏預(yù)先標(biāo)記的數(shù)據(jù)的情況下進(jìn)行文本分類。圖1展示了零樣本分類的測試效果,從圖中不難發(fā)現(xiàn),零樣本分類模型可以支持標(biāo)簽的自定義,從而使得可以對(duì)任何文本分類任務(wù)進(jìn)行推理。

圖1 零樣本分類模型用例測試
常見的零樣本分類模型主要可以分為以下兩類。
基于自然語言推理的模型
模型特點(diǎn):在訓(xùn)練階段僅使用NLI相關(guān)數(shù)據(jù)集進(jìn)行訓(xùn)練,在進(jìn)行零樣本分類時(shí),需要將樣本轉(zhuǎn)換成nli樣本形式。
模型優(yōu)勢(shì):進(jìn)行推理時(shí),在各種分類任務(wù)上的表現(xiàn)比較均衡,受到訓(xùn)練數(shù)據(jù)的影響較小,分類結(jié)果穩(wěn)定。
模型缺點(diǎn):每次推理時(shí)都需要推理n個(gè)樣本(其中n為標(biāo)簽數(shù)量),模型推理時(shí)間隨標(biāo)簽數(shù)量線性增長。
基于文本生成的模型
模型特點(diǎn):需要設(shè)計(jì)prompt來結(jié)合文本和標(biāo)簽,讓模型生成文本對(duì)應(yīng)的標(biāo)簽。
模型優(yōu)勢(shì):推理效率較高,每次推理只需要推理1個(gè)樣本。
模型缺點(diǎn):由于是生成模型,生成的結(jié)果可能不穩(wěn)定,即生成的文本不存在與候選標(biāo)簽中。同時(shí)該模型在訓(xùn)練時(shí)使用了大量文本分類數(shù)據(jù)集進(jìn)行訓(xùn)練,因此在不同分類任務(wù)上表現(xiàn)出的性能可能存在較大差異。
下面我們將對(duì)這兩個(gè)模型分別進(jìn)行介紹。
基于自然語言推理的零樣本文本分類模型
該系列模型基于StructBERT[1]在xnli_zh數(shù)據(jù)集(將英文數(shù)據(jù)集重新翻譯得到的中文數(shù)據(jù)集)上面進(jìn)行訓(xùn)練得到。
自然語言推理(Natural Language Inference, NLI)是指利用自然語言的語法和語義知識(shí)來判斷一個(gè)給定的文本片段(如兩個(gè)句子)的關(guān)系,例如它們是否是矛盾、是否相關(guān)或是否是一個(gè)是另一個(gè)的后續(xù)。而使用預(yù)訓(xùn)練的自然語言推理模型來實(shí)現(xiàn)零樣本分類的方式,如圖2所示,是將要分類的文本設(shè)置為自然語言推理的前提,然后使用每個(gè)標(biāo)簽構(gòu)建一個(gè)假設(shè),接著對(duì)每個(gè)假設(shè)進(jìn)行推理得到文本所屬的標(biāo)簽,即去判斷給定文本片段與給定的標(biāo)簽之間的關(guān)系。

圖2 基于NLI的零樣本分類模型圖
模型測試
實(shí)驗(yàn)環(huán)境準(zhǔn)備
依據(jù)ModelScope的介紹,實(shí)驗(yàn)環(huán)境可分為兩種情況。筆者在此推薦使用第2種方式,點(diǎn)開就能用,省去本地安裝環(huán)境的麻煩,直接體驗(yàn)ModelScope。
1 本地環(huán)境安裝
可參考ModelScope環(huán)境安裝。
2 Notebook
ModelScope直接集成了線上開發(fā)環(huán)境,用戶可以直接在線訓(xùn)練、調(diào)用模型。
打開零樣本分類模型,點(diǎn)擊右上角“在Notebook中打開”,選擇機(jī)器型號(hào)后,即可進(jìn)入線上開發(fā)環(huán)境。
實(shí)驗(yàn)測試
(注:下面使用的樣本及其獲選標(biāo)簽,模型在訓(xùn)練過程中從未學(xué)習(xí)過。)
加載模型
使用以下兩行命令即可進(jìn)行零樣本分類的模型加載。
from modelscope.pipelines import pipeline
classifier = pipeline('zero-shot-classification', 'damo/nlp_structbert_zero-shot-classification_chinese-base')
運(yùn)行后,ModelScope自動(dòng)將指定的模型下載至緩存目錄中。
設(shè)置標(biāo)簽
與一般的文本分類模型不同,零樣本分類模型可以自己設(shè)定對(duì)應(yīng)的標(biāo)簽,模型將根據(jù)給定的標(biāo)簽進(jìn)行分類。此處我們先將文本標(biāo)簽設(shè)置如下。
labels = ['家居', '旅游', '科技', '軍事', '游戲', '故事']
進(jìn)行分類
接著輸入文本,并使用pipeline進(jìn)行分類。
sentence = '世界那么大,我想去看看'
classifier(sentence, candidate_labels=labels)
最后,我們得到了以下結(jié)果:

從返回的結(jié)果中,可以發(fā)現(xiàn)樣本屬于旅游的概率遠(yuǎn)大于其他類別。即模型認(rèn)為輸入'世界那么大,我想去看看',在標(biāo)簽體系 ['家居', '旅游', '科技', '軍事', '游戲', '故事'] 中應(yīng)當(dāng)屬于旅游類別。
多標(biāo)簽分類
零樣本分類模型除了能解決多分類問題之外,還能解決多標(biāo)簽分類問題。
在上述分類中,我們還有一個(gè)參數(shù)沒有用到,即multi_label。從零樣本分類模型的介紹中可以發(fā)現(xiàn),這個(gè)參數(shù)是用于設(shè)置分類任務(wù)是否為多標(biāo)簽分類的。接著,我們也來嘗試一下多標(biāo)簽分類任務(wù)。首先,設(shè)置標(biāo)簽如下:
labels = ["不開心", "不高心", "高興", "開心"]
接著輸入文本,并使用pipeline進(jìn)行分類,并設(shè)置multi_label=True。
sentence = '世界那么大,我想去看看'
result = classifier(sentence, candidate_labels=labels, multi_label=True)
最后我們得到了以下結(jié)果。

其中scores代表的是每個(gè)標(biāo)簽的概率,預(yù)測結(jié)果可以認(rèn)為是開心和高興,因他們的概率大于0.5。
模型原理
基于NLI的零樣本分類模型主要是應(yīng)用了NLI模型的推理能力,它將獲選標(biāo)簽逐一與待分類文本結(jié)合,構(gòu)建成句子對(duì)的樣本形式后,再對(duì)每個(gè)樣本進(jìn)行推理判斷兩者之間的關(guān)系,最后再將每個(gè)樣本的預(yù)測結(jié)果進(jìn)行結(jié)合根據(jù)其相關(guān)性的概率進(jìn)行分類。
自然語言推理
該零樣本分類模型在訓(xùn)練時(shí)只使用了自然語言推理相關(guān)的數(shù)據(jù)集,并未使用任何文本分類數(shù)據(jù)集進(jìn)行訓(xùn)練。
自然語言推理主要是判斷兩個(gè)句子(前提和假設(shè),Premise and Hypothesis)之間的語義關(guān)系,一般定義有(Entailment, Contradiction, Neutral)三個(gè)類別,可以當(dāng)成是一個(gè)三分類任務(wù)。下面舉了3個(gè)例子讓大家切實(shí)感受一下自然語言推理任務(wù)。
自然語言推理舉例
前提:中間坐著的修鞋匠,就是張永紅的父親
假設(shè):修鞋匠是女的
語義關(guān)系:Contradiction(矛盾)
解釋:張永紅的父親,當(dāng)然是男的!
前提:中間坐著的修鞋匠,就是張永紅的父親
假設(shè):修鞋匠是男的
語義關(guān)系:Entailment(蘊(yùn)含)
解釋:張永紅的父親是男的,所以前提句子中已經(jīng)包含了假設(shè)句的語義。
前提:中間坐著的修鞋匠,就是張永紅的父親
假設(shè):張永紅是男的
語義關(guān)系:Neutral(中立)
解釋:前提和假設(shè)并沒有關(guān)系。
零樣本分類
那么如何基于自然語言推理進(jìn)行零樣本分類任務(wù)呢?
通過研讀模型零樣本分類模型中給出的論文,再結(jié)合對(duì)ModelScope源碼的調(diào)試,我們可以發(fā)現(xiàn),答案其實(shí)很簡單。只要依次將每個(gè)的標(biāo)簽當(dāng)成假設(shè),輸入的文本當(dāng)成前提,進(jìn)行自然語言推理任務(wù)之后,再對(duì)所有標(biāo)簽的預(yù)測結(jié)果進(jìn)行處理,即可實(shí)現(xiàn)零樣本分類。
設(shè)置三個(gè)標(biāo)簽:家居,旅游,科技
輸入文本:世界那么大,我想去看看
對(duì)以上輸入進(jìn)行零樣本分類的時(shí)候,將生成以下三個(gè)自然語言推理任務(wù)的樣本:
1. 前提:世界那么大,我想去看看,假設(shè):家居
2. 前提:世界那么大,我想去看看,假設(shè):旅游
3. 前提:世界那么大,我想去看看,假設(shè):科技
對(duì)三個(gè)樣本進(jìn)行自然語言推理的預(yù)測之后,最后將預(yù)測結(jié)果進(jìn)行整合,即可實(shí)現(xiàn)零樣本分類任務(wù)。例如多分類任務(wù)中,可以將“前提句”蘊(yùn)含“假設(shè)句”概率最大的那個(gè)假設(shè)作為最后的標(biāo)簽。
本章小結(jié)
從模型原理的解析中可以發(fā)現(xiàn)基于自然語言推理的零樣本文本分類模型在進(jìn)行分類時(shí),需要將候選標(biāo)簽逐一與文本進(jìn)行結(jié)合生成對(duì)應(yīng)的NLI的樣本,這意味著有N個(gè)候選標(biāo)簽,就需要生成N個(gè)待推理樣本。因此,該模型的推理效率可能較低,是一種用時(shí)間成本來獲取更高準(zhǔn)確率的方案。但該方案在抹零戰(zhàn)役工單分類任務(wù)的低資源場景下,表現(xiàn)出了優(yōu)異的性能。因此,在推理時(shí)間不敏感的低資源場景下的文本分類任務(wù),該模型非常適用。
基于文本生成的零樣本分類模型
該模型在mT5模型的基礎(chǔ)上,使用3000萬數(shù)據(jù)進(jìn)行全中文任務(wù)的訓(xùn)練,支持各類任務(wù)的零樣本/少樣本學(xué)習(xí),并引入了零樣本分類增強(qiáng)的技術(shù),使模型輸出穩(wěn)定性大幅提升。 模型特點(diǎn):
零樣本分類增強(qiáng):該針對(duì)零樣本分類輸出不穩(wěn)定的情況(即生成的內(nèi)容不在所給的標(biāo)簽之中),進(jìn)行了數(shù)據(jù)增強(qiáng),在零樣本分類穩(wěn)定性評(píng)測中,該模型輸出穩(wěn)定性可達(dá)98.51%。
任務(wù)統(tǒng)一框架:把所有任務(wù),如文本分類、相似度計(jì)算、文本生成等,都使用一個(gè)text-to-text的框架進(jìn)行解決。
該模型除了支持零樣本分類外,還可以支持其他任務(wù)的零樣本學(xué)習(xí)。支持任務(wù)包含:
文本分類:給定一段文本和候選標(biāo)簽,模型可輸出文本所屬的標(biāo)簽。
自然語言推理:給定兩段文本,判斷兩者關(guān)系。
閱讀理解:給定問題和參考文本,輸出問題的答案。
問題生成:給定答案和參考文本,生成該答案對(duì)應(yīng)的問題。
摘要生成:給定一段文本,生成該文本的摘要。
標(biāo)題生成:給定一段文本,為其生成標(biāo)題。
評(píng)價(jià)對(duì)象抽?。航o定一段文本,抽取該段文本的評(píng)價(jià)對(duì)象。
翻譯:給定一段文本,將其翻譯成另一種語言。
T5全稱是Text-to-Text Transfer Transformer,是一種模型架構(gòu)或者說是一種解決NLP任務(wù)的一種范式。它的主要目標(biāo)就是使用文本生成的方式來解決各種自然語言處理任務(wù),例如機(jī)器翻譯、摘要、問答等。T5通過使用一種統(tǒng)一的編碼和解碼方法來解決不同的任務(wù),從而避免了為每個(gè)任務(wù)單獨(dú)設(shè)計(jì)模型的問題,在訓(xùn)練過程中使用了大量的數(shù)據(jù)和計(jì)算資源,以便在比較小的數(shù)據(jù)集上訓(xùn)練任務(wù)特定的模型。并且在大型的數(shù)據(jù)集上進(jìn)行了廣泛的評(píng)估,在許多自然語言處理任務(wù)中表現(xiàn)出優(yōu)越的性能。

零樣本文本分類
使用生成模型進(jìn)行零樣本分類的主要思路是將候選標(biāo)簽與待分類文本按照一定格式進(jìn)行拼接后作為模型輸入,期望模型可以輸入文本所屬的標(biāo)簽。圖4展示了在ModelScope上進(jìn)行測試的結(jié)果(該用例并未在訓(xùn)練過程中學(xué)習(xí)過)。

零樣本分類增強(qiáng)
由于文本生成模型的輸出具有一定的隨機(jī)性,在使用基于文本生成的零樣本學(xué)習(xí)模型進(jìn)行零樣本分類時(shí),模型輸出的結(jié)果可能并不在所給的候選標(biāo)簽之中,從而導(dǎo)致模型不可用。因此,我們使用了一種數(shù)據(jù)增強(qiáng)的方式來提升模型在零樣本分類中的穩(wěn)定性,并設(shè)計(jì)了零樣本分類穩(wěn)定性評(píng)測對(duì)模型分類的穩(wěn)定性進(jìn)行指標(biāo)的量化。
零樣本分類穩(wěn)定性評(píng)測
評(píng)測方式
從40萬條文本中隨機(jī)挑選了1萬條文本作為待分類文本,再為每條文本從130個(gè)標(biāo)簽庫中隨機(jī)挑選隨機(jī)數(shù)量的標(biāo)簽作為候選標(biāo)簽,最后結(jié)合文本和候選標(biāo)簽得到評(píng)測數(shù)據(jù)集。
對(duì)于每個(gè)模型均使用其在訓(xùn)練時(shí)使用的prompt構(gòu)建模型輸入。如果模型最終的輸出存在于候選標(biāo)簽中,則認(rèn)為該模型在該樣本上的預(yù)測穩(wěn)定,否則認(rèn)為模型不穩(wěn)定。
評(píng)測結(jié)果

從評(píng)測結(jié)果中可以發(fā)現(xiàn),經(jīng)過零樣本分類增強(qiáng)之后,該模型零樣本分類穩(wěn)定率從64.32提升到了98.51。
樣例測試
測試流程
使用模型指定的prompt構(gòu)建輸入,進(jìn)行第一次分類。
如果分類結(jié)果穩(wěn)定,即輸出的內(nèi)容屬于候選標(biāo)簽,那么將輸出的標(biāo)簽從候選標(biāo)簽中剔除。
再次根據(jù)指定的prompt構(gòu)建輸入,進(jìn)行分類。
重復(fù)步驟b和步驟c,直到分類結(jié)果不穩(wěn)定或候選標(biāo)簽已清空。
測試用例
測試用例使用PromptCLUE中所給的demo用例。
待分類文本:如果日本沉沒,中國會(huì)接收日本難民嗎?
候選標(biāo)簽:故事,文化,娛樂,體育,財(cái)經(jīng),房產(chǎn),汽車,教育,科技,軍事,旅游,國際,股票,農(nóng)業(yè),游戲
測試結(jié)果

從測試結(jié)果中可以發(fā)現(xiàn),Prompt CLUE在第3次分類時(shí),已經(jīng)出現(xiàn)了模型不穩(wěn)定的情況。
全任務(wù)零樣本學(xué)習(xí)-mT5分類增強(qiáng)版-中文-base

在測試過程中,該模型可以一直保持輸出穩(wěn)定直到候選標(biāo)簽被完全清空。
零樣本學(xué)習(xí)評(píng)測
基于文本生成的零樣本學(xué)習(xí)模型不僅支持零樣本分類,同時(shí)還可以支持其他任務(wù),如閱讀理解、摘要生成、翻譯等。因此,該模型選用了pCLUE[5]進(jìn)行評(píng)測,同時(shí)與PromptCLUE進(jìn)行了對(duì)比。整體評(píng)測結(jié)果如下:

本章小結(jié)
使用文本生成的方式實(shí)現(xiàn)零樣本分類時(shí),可以將所有候選標(biāo)簽進(jìn)行結(jié)合,只需要生成一個(gè)樣本進(jìn)行分類。相比基于NLI的零樣本分類模型,在推理效率上優(yōu)勢(shì)比較大。但該模型會(huì)帶來了分類結(jié)果不穩(wěn)定的問題,即輸出的文本不存在于候選標(biāo)簽中。而全任務(wù)零樣本學(xué)習(xí)-mT5分類增強(qiáng)版-中文-base通過一種數(shù)據(jù)增強(qiáng)的方式大幅提升了在文本分類場景下的穩(wěn)定性,在零樣本分類穩(wěn)定性評(píng)測中表現(xiàn)出的準(zhǔn)確率可達(dá)98.51%,遠(yuǎn)大于其他模型,但在穩(wěn)定性方面依然不如基于nli的模型。因此,該模型適用于對(duì)推理時(shí)間較為敏感的低資源文本分類場景。
總結(jié)
本文主要介紹了兩類可以用于零樣本文本分類的模型。
a基于自然語言推理的零樣本分類模型:適用于對(duì)模型推理時(shí)間不敏感的低資源文本分類場景,在抹零戰(zhàn)役工單分類任務(wù)中,表現(xiàn)出了優(yōu)異的性能。
b基于文本生成的零樣本學(xué)習(xí)模型:適用于對(duì)模型推理時(shí)間要求較高的低資源本文分類場景,同時(shí)還能進(jìn)行其他任務(wù)的零樣本學(xué)習(xí)。而本文介紹的模型在分類場景下進(jìn)行了特定的數(shù)據(jù)增強(qiáng),大幅提高了分類的穩(wěn)定性,相比于其他模型更加適合應(yīng)用于零樣本文本分類場景。
參考文獻(xiàn)
[1] Wang W, Bi B, Yan M, et al. Structbert: Incorporating language structures into pre-training for deep language understanding[J]. arXiv preprint arXiv:1908.04577, 2019.
[2] Raffel C, Shazeer N, Roberts A, et al. Exploring the limits of transfer learning with a unified text-to-text transformer[J]. The Journal of Machine Learning Research, 2020, 21(1): 5485-5551.
[3]https://www.modelscope.cn/models/ClueAI/PromptCLUE/summary
[4]https://www.modelscope.cn/models/ClueAI/PromptCLUE-base-v1-5/summary
[5]https://github.com/CLUEbenchmar