自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)

發(fā)布于 2024-6-27 15:14
瀏覽
0收藏

寫在前面

以chatgpt為起始節(jié)點(diǎn)的大模型技術(shù)經(jīng)過了兩年左右的發(fā)展,大致沉淀了一些較為確定的研究領(lǐng)域。首先是基座大模型的研究,主要是國內(nèi)外大廠集中大量財(cái)力、人力、算力進(jìn)行大模型軍備競(jìng)賽,企圖將大模型的基礎(chǔ)能力(包括推理能力)上限逐步提升到更高的層次。當(dāng)然也有一些研究機(jī)構(gòu)致力于改進(jìn)transformer的架構(gòu)或者提出其他更先進(jìn)的基礎(chǔ)模型結(jié)構(gòu),在性能或者效率上做文章,例如MOE,Mamba等;多模態(tài)模型,讓大模型同時(shí)能夠理解并生成圖像、音頻、視頻、文字等多種模態(tài)的信息,例如大火的Sora。其次是大模型的微調(diào)對(duì)齊研究,主要是基座大模型通過指令微調(diào)、強(qiáng)化學(xué)習(xí)等技術(shù)將其變成一個(gè)應(yīng)用友好、用戶友好的能力模型,也可以將模型長文本、長上下文能力的提升也包含在該方向內(nèi);另外,還有大模型的高效部署和推理計(jì)算,在降低大模型服務(wù)成本的同時(shí),提升大模型服務(wù)的實(shí)時(shí)性,提升用戶體驗(yàn);最后,則是大模型在各種細(xì)分場(chǎng)景領(lǐng)域的應(yīng)用落地,能夠?qū)⒋竽P头庋b成一個(gè)成熟的應(yīng)用產(chǎn)品,真正的將大模型用起來,當(dāng)然也可以將agent相關(guān)的技術(shù)研究歸納在這個(gè)方向上,因?yàn)閍gent的目標(biāo)就是將大模型的能力充分利用起來,幫助人類更好地使用大模型。詳見下圖所示:

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

本人目前主要精力集中在大模型的應(yīng)用落地,對(duì)大模型在傳統(tǒng)NLP應(yīng)用任務(wù)上的效果非常感興趣。正好前段時(shí)間,有潛在客戶希望我們研究是否能夠通過大模型提升新聞事件分類的效果。借著這個(gè)機(jī)會(huì),我對(duì)大模型在文本分類任務(wù)上的應(yīng)用方式和對(duì)應(yīng)效果進(jìn)行了研究,有了一些初步的結(jié)論。本文希望通過描述上述研究過程與結(jié)果,總結(jié)出大模型在文本分類任務(wù)上的最佳實(shí)踐,并推廣到更多類似的應(yīng)用上,為業(yè)界做大模型應(yīng)用時(shí)提供一些落地的參考。

應(yīng)用場(chǎng)景分類

在談具體的研究內(nèi)容前,需要先明確一下研究的問題類型。目前對(duì)于可能會(huì)應(yīng)用到大模型的傳統(tǒng)NLP應(yīng)用,我自己將其分為兩種不同的情況:

(1)開荒式業(yè)務(wù)場(chǎng)景。這種場(chǎng)景主要出現(xiàn)在那些剛剛完成數(shù)字化還未進(jìn)行智能化的機(jī)構(gòu)、或者業(yè)務(wù)場(chǎng)景本身比較復(fù)雜、傳統(tǒng)技術(shù)無法在該場(chǎng)景中匹配最低的用戶使用體驗(yàn)要求的情況。特點(diǎn):數(shù)據(jù)積累不成熟(也就是沒有足夠的訓(xùn)練語料用于場(chǎng)景專用模型的訓(xùn)練)、硬件資源不足(沒有足夠的GPU用于訓(xùn)練模型)等。

(2)優(yōu)化提升式業(yè)務(wù)場(chǎng)景。這種場(chǎng)景主要出現(xiàn)在那些已經(jīng)有一定智能化基礎(chǔ)的機(jī)構(gòu)、或者業(yè)務(wù)場(chǎng)景中已經(jīng)使用了一些傳統(tǒng)NLP技術(shù)解決了部分問題的情況。特點(diǎn):需要提升已有方法的應(yīng)用效果和用戶體驗(yàn)(如準(zhǔn)確率、召回率等),當(dāng)前方法繼續(xù)優(yōu)化的難度較大。

本文主要討論的是第二種場(chǎng)景,這也是很多有一定數(shù)字化、智能化基礎(chǔ)的公司比較關(guān)注的類型。他們?cè)诖竽P吞岢鲋?,已?jīng)通過一些規(guī)則、統(tǒng)計(jì)機(jī)器學(xué)習(xí)、深度神經(jīng)網(wǎng)絡(luò)等算法模型技術(shù)構(gòu)建了一些分類服務(wù),有些行業(yè)頭部團(tuán)隊(duì)在此基礎(chǔ)上通過一些技巧(數(shù)據(jù)增強(qiáng),對(duì)抗訓(xùn)練等)進(jìn)行了優(yōu)化,將算法指標(biāo)提升到了某個(gè)瓶頸線。然而,業(yè)務(wù)用戶對(duì)于算法的精度提升要求是持續(xù)性的,因此在大模型出現(xiàn)之前的一段時(shí)間,算法人員疲于應(yīng)付業(yè)務(wù)用戶對(duì)于場(chǎng)景效果的高要求。

只用prompt工程足夠嗎?

截止2024年,我瀏覽過很多應(yīng)用大模型研究傳統(tǒng)NLP任務(wù)的工作,大多集中在如何利用prompt技術(shù)、few-shot技術(shù)等直接將大模型應(yīng)用在這些傳統(tǒng)任務(wù)中。例如這一篇:Can ChatGPT Understand Too? A Comparative Study on ChatGPT and Fine-tuned BERT,通過prompt工程對(duì)比ChatGPT與Fine-tuned Roberta在GLUE數(shù)據(jù)集上的效果,最終的結(jié)論是Fine-tuned Roberta在文本理解任務(wù)上仍然無法被超越。然而我也看到有一些觀點(diǎn)認(rèn)為這些傳統(tǒng)任務(wù)直接用大模型一把梭就能搞定,只要prompt寫的足夠好,就能得到一個(gè)足夠好的語言理解分析服務(wù)。本人并不反對(duì)這種觀點(diǎn),而且還支持對(duì)過去的一些應(yīng)用模式進(jìn)行革新,從而讓大模型能夠充分發(fā)揮其特性。不過在目前的階段,很多企業(yè)或者業(yè)務(wù)場(chǎng)景基于安全、成本、時(shí)延等因素,無法使用綜合能力強(qiáng)的模型(GPT4,國內(nèi)模型的付費(fèi)版公有云服務(wù)、超過14B的開源模型等),而通過純prompt工程使用類似7B的模型還無法完全替代已經(jīng)在足量數(shù)據(jù)上訓(xùn)練過的BERT類模型。由于上述提到的研究是使用ChatGPT以及英文的數(shù)據(jù)集,為了驗(yàn)證國內(nèi)開源的大模型是否在中文數(shù)據(jù)集上是否也有類似的結(jié)論,下面我將根據(jù)相關(guān)的目標(biāo)應(yīng)用場(chǎng)景以一個(gè)具體的數(shù)據(jù)集的實(shí)驗(yàn)來說明。

應(yīng)用場(chǎng)景與數(shù)據(jù)集

目標(biāo)應(yīng)用場(chǎng)景:新聞事件分類任務(wù)。任務(wù)特點(diǎn):

(1)多標(biāo)簽分類任務(wù),即一個(gè)新聞可能會(huì)對(duì)應(yīng)多個(gè)事件類別;

(2)事件標(biāo)簽體系龐大,且有比較嚴(yán)重的類別不均衡問題。出現(xiàn)頻次高的類別容易累積訓(xùn)練數(shù)據(jù),而低頻長尾類別屬于典型的小樣本問題。

由于一些原因,不能拿到相關(guān)真實(shí)場(chǎng)景數(shù)據(jù),因此搜尋了網(wǎng)上的公開數(shù)據(jù)集,最終找到了一個(gè)比較貼近上述任務(wù)特點(diǎn)的數(shù)據(jù)集:ccks 2022 任務(wù)八數(shù)據(jù)集。

數(shù)據(jù)鏈接見:https://tianchi.aliyun.com/dataset/136800

數(shù)據(jù)集簡介:數(shù)據(jù)主要來自金融領(lǐng)域的公開新聞、報(bào)道,數(shù)量在5萬+左右。原始數(shù)據(jù)集的任務(wù)是“給定100+事件類型及其事件主體公司,訓(xùn)練數(shù)據(jù)中對(duì)其中16個(gè)事件類型只保留10條左右的訓(xùn)練樣本,測(cè)試集中包含這16個(gè)類型的大量待抽取樣本。

本次的驗(yàn)證為了簡化問題,不會(huì)采用上述的任務(wù)形式,而是采用最基本的全類別分類數(shù)據(jù)集的處理方式,從而驗(yàn)證模型在這種類型的數(shù)據(jù)集上的整體效果,以及在一些小樣本類別上的效果。

由于目前只有訓(xùn)練集有標(biāo)注標(biāo)簽,因此只能針對(duì)標(biāo)注數(shù)據(jù)集進(jìn)行分析。具體做法是根據(jù)標(biāo)注數(shù)據(jù)分布劃分了訓(xùn)練集,測(cè)試集(5000+),其中測(cè)試集只用于評(píng)測(cè)模型的最終結(jié)果。

備注:該數(shù)據(jù)集存在一定的標(biāo)注質(zhì)量問題,前期通過一些人力檢測(cè)與校正,提升了部分的標(biāo)注質(zhì)量。

數(shù)據(jù)示例如下:

{"textId": "2333e4ef53762e498cc79c7613d6ac6f", "text": "科銳國際:2018年年度權(quán)益分派實(shí)施公告", "eventTags": [{"eventType": "公司權(quán)益分派", "eventCompany": "科銳國際"}]}
{
    "textId": "35a726ecec33a755abea4ff6fd5464ec",
    "text": "訥河軟式透水管有限責(zé)任—訥河公司;湘潭招聘/萬達(dá)集團(tuán)招聘信息;多次延期后,ST康美終于披露回覆函",
    "eventTags": [
        {
            "eventType": "延期信息披露",
            "eventCompany": "ST康美"
        },
        {
            "eventType": "當(dāng)?shù)卣心紗T工",
            "eventCompany": "萬達(dá)集團(tuán)"
        }
    ]
}

事件標(biāo)簽數(shù)量為174個(gè),均為金融相關(guān)的事件標(biāo)簽。以下為部分事件標(biāo)簽樣例。

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

對(duì)數(shù)據(jù)集進(jìn)行分析后,發(fā)現(xiàn)其具備典型的長尾分布特征,與實(shí)際的業(yè)務(wù)數(shù)據(jù)分布比較類似。由于類別比較多,以每個(gè)類別為粒度進(jìn)行畫圖不夠直觀,因此將所有標(biāo)簽類別按照從大到小順序排序后,以10為一組進(jìn)行分組,按照組的粒度畫出的柱狀圖如下(圖由GPT-4生成):

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

以下是出于長尾位置的部分事件標(biāo)簽樣例:

  • 產(chǎn)品虛假宣傳: 9
  • 產(chǎn)品虧損: 3
  • 行業(yè)排名下降: 41
  • 責(zé)令轉(zhuǎn)讓所持證券公司股權(quán): 21
  • 新增分支機(jī)構(gòu): 38
  • 分支機(jī)構(gòu)被警方調(diào)查: 11
  • 非法集資: 8
  • 發(fā)放貸款出現(xiàn)壞賬: 27
  • 擠兌: 41
  • 訴訟仲裁-敗訴: 29
  • 澄清辟謠: 9
  • 停產(chǎn)停業(yè): 10
  • 上市前融資: 33
  • 銷量下降: 48
  • 行政處分: 33
  • 薪酬福利下降: 16
  • 被盜: 44
  • 實(shí)際控制人違規(guī): 10
  • 發(fā)布新產(chǎn)品延期: 24
  • 其他經(jīng)營不善: 39
  • 貸款用途變更: 17
  • 第一大股東變化: 8
  • 客戶管理不善: 29
  • 市場(chǎng)份額減少: 28
  • 產(chǎn)品質(zhì)量問題: 10
  • 股東借款: 4
  • 財(cái)務(wù)報(bào)表更正: 8
  • 經(jīng)營資質(zhì)瑕疵: 8
  • 引入新股東: 9
  • 停止批準(zhǔn)增設(shè)分支機(jī)構(gòu): 24
  • 授信額度上升: 10
  • 資金緊張: 7
  • 在當(dāng)?shù)爻焚Y: 22
  • 股權(quán)融資失敗: 19

基于BERT的baseline

為了驗(yàn)證大模型的相關(guān)方案與傳統(tǒng)的NLP方案相比是否有提升,因此選定了BERT簇的分類方案作為baseline來進(jìn)行對(duì)比。

BERT也是一個(gè)以Transformer為模型架構(gòu)的預(yù)訓(xùn)練語言模型。

  • 參數(shù)量相比LLM大模型更小,基本在億級(jí)參數(shù)以下
  • 訓(xùn)練方式與LLM大模型不同,更注重語義理解類任務(wù),而不是文本生成式任務(wù)
  • 一般需要適量的下游任務(wù)訓(xùn)練數(shù)據(jù)進(jìn)行微調(diào),并在基座模型的基礎(chǔ)上設(shè)計(jì)針對(duì)下游任務(wù)的額外組件,從而得到一個(gè)任務(wù)專用的模型。微調(diào)難度較小。
  • LLM大模型出世之前,業(yè)界主流的方法

BERT與GPT在語言模型訓(xùn)練任務(wù)上的區(qū)別如下圖所示:

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

具體來說,本次實(shí)驗(yàn)的BERT模型選擇了哈工大的macbert-base和macbert-large兩種體量的模型。

模型鏈接如下:https://github.com/ymcui/MacBERT

具體訓(xùn)練方式:

輸入:新聞文本

輸出:事件標(biāo)簽列表

loss函數(shù):BCEWithLogitsLoss

將所有訓(xùn)練數(shù)據(jù)(5萬+)灌入模型進(jìn)行訓(xùn)練

最終,base和large模型的指標(biāo)如下:

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

基于Prompt工程的LLM方法

將LLM大模型直接應(yīng)用于文本多標(biāo)簽分類任務(wù),實(shí)際上就是編寫提示詞指令,讓大模型去生成最終的事件標(biāo)簽結(jié)果。整體還是一個(gè)文本生成的過程。

提示詞模版樣例如下:

f"作為一個(gè)多標(biāo)簽新聞分類專家,你的任務(wù)是識(shí)別出新聞中的所有相關(guān)事件標(biāo)簽。
事件標(biāo)簽列表:{event_tags}。新聞內(nèi)容:{text}。該新聞對(duì)應(yīng)的所有事件標(biāo)簽是什么?"

其中,event_tags需要把體系中的事件標(biāo)簽填入。這里涉及到兩個(gè)問題:

  • 如果事件標(biāo)簽體系很龐大,把所有事件標(biāo)簽裝進(jìn)去不太現(xiàn)實(shí),超過了大模型能夠處理的文本長度上限。
  • 把所有標(biāo)簽裝進(jìn)去會(huì)增加大模型分析處理文本的難度

基于當(dāng)前最新的技術(shù)發(fā)展,有的開源大模型已經(jīng)能夠處理超過128K的上下文,對(duì)于170+的標(biāo)簽文本是能夠覆蓋的。當(dāng)然,能處理和處理好是兩種概念,對(duì)于大模型來說,肯定是標(biāo)簽范圍越小越容易解決問題,因此也可以通過先將事件標(biāo)簽進(jìn)行分級(jí)分組,然后逐級(jí)進(jìn)行大模型的分析,兩種方式均可。

引入Few-shot sample

為了能夠充分利用已有的標(biāo)注數(shù)據(jù)集和大模型的能力,在上述prompt中,還可以引入示例樣本(一般論文里面都叫demonstrations),從而激發(fā)大模型的In-context learning能力。為此,對(duì)整體訓(xùn)練數(shù)據(jù)集設(shè)計(jì)了如下的工作流程:

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

該工作流程的主要核心思想是將示例樣本的選擇問題轉(zhuǎn)化成RAG(Retrieve-Augmented-Generation),將訓(xùn)練樣本集合向量化存儲(chǔ)后,對(duì)于每個(gè)測(cè)試樣本的分析,通過召回+排序的方式做知識(shí)庫的檢索,根據(jù)預(yù)設(shè)的示例樣本數(shù)量(實(shí)驗(yàn)中設(shè)置為10),選擇語義最相似的標(biāo)注樣本填充到prompt中。

示例樣本填充順序重要嗎?

在選擇示例樣本后,還有個(gè)容易被忽略的問題:示例樣本填充入prompt的順序需要關(guān)注嗎?

之前,有一些文章提到過,RAG得到的召回樣本在prompt中,如果較為相似的召回內(nèi)容離用戶問題越近,大模型的回答質(zhì)量會(huì)更高。我也嘗試了這樣的處理方式,將相似度高的樣本放置在了與待預(yù)測(cè)的新聞文本接近的位置。提示詞模版樣例如下:

你是一個(gè)先進(jìn)的大語言模型,專門用于理解和分類金融新聞資訊,現(xiàn)在需要你根據(jù)提供的新聞內(nèi)容,
將其分類到預(yù)定義的事件標(biāo)簽中。任務(wù)要求:
1、仔細(xì)閱讀新聞內(nèi)容,理解新聞主題和核心內(nèi)容。
2、只使用給定的事件標(biāo)簽列表進(jìn)行分類,若新聞屬于多個(gè)事件標(biāo)簽,則使用豎線|來分隔不同的事件標(biāo)簽,
若沒有合適的事件標(biāo)簽,則分類為others。
3、只需要輸出事件標(biāo)簽名字,其他內(nèi)容不需要輸出。
事件標(biāo)簽列表如下,使用英文逗號(hào)分隔:\n{event_tags}
下面是給你提供的人工標(biāo)注過的參考樣例:
{demonstrations}待分類的新聞內(nèi)容如下:{text}
該新聞事件標(biāo)簽為:

其中demonstrations存放的順序?yàn)榘凑帐纠c待預(yù)測(cè)樣本相似度的正序排列,即相似度越高的排得越后,離待預(yù)測(cè)樣本text越近。

通過上述處理方式,確實(shí)能夠在這個(gè)任務(wù)上有比較微小的提升,雖然提升幅度不大,但操作成本上也幾乎可以忽略,因此推薦使用。

結(jié)果

基于純Prompt工程的方式采用了開源的qwen-7b-chat,Yi-34b-chat-int4,閉源的qwen-72b-chat接口(百煉平臺(tái))三種大模型來驗(yàn)證。(實(shí)驗(yàn)的時(shí)候,qwen1.5還未出,但根據(jù)其他任務(wù)的分析,可以推測(cè)不會(huì)相差太多)

具體指標(biāo)如下:

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

根據(jù)指標(biāo)結(jié)果,可以看到純Prompt工程的方式,即使是使用百億級(jí)別參數(shù)量的模型,還是離傳統(tǒng)BERT方式的效果差不少。因?yàn)長LM大模型的訓(xùn)練方式與BERT不同,以文本生成為目標(biāo),是單向構(gòu)建上下文(從左到右);而BERT訓(xùn)練是以完形填空式任務(wù)為目標(biāo)。相比于LLM,能夠在雙向(向左向右)構(gòu)建上下文理解,本身就適配自然語言理解任務(wù)(文本分類,信息抽取等均為理解任務(wù))。

通過分析大模型的錯(cuò)誤case,可以發(fā)現(xiàn)很多樣本都是因?yàn)橹噶钭裱芰Σ粔颍ū热绺袷轿窗匆?,生成了無關(guān)的分析解釋內(nèi)容等),導(dǎo)致格式處理后的結(jié)果是錯(cuò)的。因此,推測(cè)如果對(duì)大模型進(jìn)行訓(xùn)練樣本的sft,應(yīng)該還能夠在指標(biāo)上有不少的提升。

Prompt工程+指令微調(diào)

方法描述

既然要指令微調(diào)了,那么基于硬件成本限制,就只能選擇一些性價(jià)比高的開源模型來做驗(yàn)證了。因此,最終選擇了qwen-7b-chat和qwen-14b-chat來做實(shí)驗(yàn)。針對(duì)當(dāng)前的數(shù)據(jù)集,結(jié)合Prompt工程和指令微調(diào)技術(shù),設(shè)計(jì)了如下的大模型文本分類流程:

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

與Prompt工程的方案相比,本方案加入了指令微調(diào)的步驟。具體來說就是對(duì)訓(xùn)練集進(jìn)行數(shù)據(jù)篩選和處理后,篩選出高質(zhì)量的訓(xùn)練數(shù)據(jù)集,然后通過lora的方式進(jìn)行低成本的指令微調(diào)模型,最后在微調(diào)后的模型上使用Prompt工程來完成樣本的分類。整個(gè)流程中,有幾個(gè)重要節(jié)點(diǎn)的詳細(xì)說明如下:

  • 構(gòu)建指令形式的訓(xùn)練數(shù)據(jù)集時(shí),需要生成指令提示詞模版,并將每個(gè)樣本填充到提示詞模版中。一般的做法是一種任務(wù)都用同一個(gè)提示詞模版。不過,這樣處理可能會(huì)讓微調(diào)后的大模型對(duì)指令的理解能力不夠魯棒。因此,我通過ChatGPT,讓其為我生成了適合該分類任務(wù)色50+個(gè)提示詞模版,并為每個(gè)樣本隨機(jī)分配一個(gè)。通過這種方式,能夠讓大模型對(duì)指令的遵循能力更好。
  • 關(guān)于高質(zhì)量數(shù)據(jù)篩選的問題,其實(shí)我做了兩個(gè)不同的方法實(shí)驗(yàn)。一個(gè)是全量數(shù)據(jù)的微調(diào)(5w+),另一個(gè)是采用一些數(shù)據(jù)選擇的方法,得到適量的樣本子集用于訓(xùn)練。

這些方法除去一些不太方便實(shí)現(xiàn)的(例如要訓(xùn)練一個(gè)reward模型,標(biāo)注成本太高),基本都實(shí)現(xiàn)了一下,在當(dāng)前的數(shù)據(jù)集上效果都不是很理想,猜想應(yīng)該是上面的方法對(duì)于目標(biāo)是復(fù)雜生成的任務(wù)會(huì)更有效。

實(shí)際上,探究數(shù)據(jù)集精選的本質(zhì),不外乎以下兩點(diǎn):(1)樣本多樣性高;(2)對(duì)于任務(wù)的重要性或者增益程度盡量高。其實(shí),之前做文本摘要的時(shí)候,對(duì)摘要句子的選取也是遵循這兩個(gè)原則,因此自然而然就想到可以借用文本摘要的思想來選擇:

(1)先將所有樣本根據(jù)標(biāo)簽類別分成不同的簇(當(dāng)然,也可以對(duì)樣本進(jìn)行聚類分析,得到的簇可能更偏文本本身的語義相似性聚合)

(2)對(duì)每個(gè)簇中的樣本,采用MMR算法進(jìn)行樣本的排序。MMR綜合考慮了樣本的多樣性和相關(guān)性,因此我們可以根據(jù)分?jǐn)?shù)從高到低選擇一定數(shù)量的樣本放到訓(xùn)練集中。

MMR算法:https://zhuanlan.zhihu.com/p/83596443

(3)對(duì)于包含多個(gè)標(biāo)簽的樣本,以及樣本數(shù)量本身就很少的標(biāo)簽均采用白名單模式,即全部加入樣本集合中。這也是為了讓大模型對(duì)多標(biāo)簽、小樣本的情況能夠盡可能多的學(xué)習(xí)。

通過上述方式,選擇了4000+的樣本用于訓(xùn)練。(每個(gè)標(biāo)簽數(shù)據(jù)都會(huì)覆蓋到)

結(jié)果

我們將上述篩選后的訓(xùn)練樣本集與全量訓(xùn)練樣本集進(jìn)行了大模型微調(diào)的對(duì)比實(shí)驗(yàn),可以發(fā)現(xiàn)一些有趣但并不意外的結(jié)果。

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

  • 結(jié)論1:大模型的參數(shù)量越大,整體的指標(biāo)效果越好。但限于使用成本,通常沒辦法無限制提升模型的參數(shù)量級(jí)。
  • 結(jié)論2:當(dāng)標(biāo)注數(shù)據(jù)比較少的時(shí)候,大模型微調(diào)后的效果還是會(huì)優(yōu)于BERT簇模型,在小樣本類別的效果上,也要更好。
  • 結(jié)論3:全量數(shù)據(jù)集微調(diào)在整體指標(biāo)上比子集微調(diào)要更好,但是在小樣本標(biāo)簽類別上的效果不一定,會(huì)根據(jù)使用的模型而定。

根據(jù)上述的對(duì)比實(shí)驗(yàn),可以看到當(dāng)標(biāo)注數(shù)據(jù)量比較充裕的時(shí)候,LLM即使經(jīng)過微調(diào)、提示詞精心設(shè)計(jì)等步驟后,整體的效果還是不如BERT模型的微調(diào)效果。除了上一小節(jié)提到的“LLM大模型的訓(xùn)練方式與BERT不同”的原因外,可能還有以下這個(gè)因素:

BERT在數(shù)據(jù)量充足的條件下,能夠充分“過擬合”下游任務(wù)信息,從而在任務(wù)上達(dá)到不錯(cuò)的效果。但是微調(diào)后的模型完全無法去做其他任務(wù);而LLM大模型的目標(biāo)本就是通用人工智能,不會(huì)為了某個(gè)具體任務(wù)而喪失通用性,因此經(jīng)過一定的指令微調(diào)后,并不會(huì)充分“過擬合”某個(gè)任務(wù)。

當(dāng)然,在標(biāo)注數(shù)據(jù)量不是非常充分的情況下,使用大模型做指令微調(diào)配合Prompt工程,確實(shí)能在小樣本場(chǎng)景下有不錯(cuò)的效果。實(shí)際的應(yīng)用場(chǎng)景中,有些小樣本的事件標(biāo)簽雖然出現(xiàn)次數(shù)不多,但業(yè)務(wù)屬性卻非常重要,提升這些數(shù)據(jù)的效果,可能對(duì)整體的評(píng)測(cè)效果沒有明顯的影響,但對(duì)業(yè)務(wù)使用來說是能夠提升體驗(yàn)的。

大模型+BERT式微調(diào)

大模型+指令微調(diào)的組合終究與追求精度提升的文本理解類任務(wù)不太契合。在足量的標(biāo)注數(shù)據(jù)場(chǎng)景下,精度上難以匹敵傳統(tǒng)的BERT式微調(diào)方法。但是大模型畢竟在參數(shù)量和學(xué)習(xí)的知識(shí)信息量級(jí)上要遠(yuǎn)超過往的BERT簇模型,所以從理論上來看,只要能夠充分利用大模型龐大的知識(shí)量,其在文本理解能力上必然是超越BERT簇模型的。指令微調(diào)+Prompt工程的大模型生成式方法在文本理解類任務(wù)上并沒有充分利用到大模型的豐富知識(shí),那么能否參考BERT式的微調(diào)方法,將大模型的參數(shù)權(quán)重作為基座,去針對(duì)性適配下游任務(wù)呢?答案是可行的,因?yàn)榇竽P捅举|(zhì)也是一個(gè)transformer模型網(wǎng)絡(luò),只不過預(yù)訓(xùn)練的方式不同而已,只需要在網(wǎng)絡(luò)的最后一層添加對(duì)應(yīng)的任務(wù)層即可。不過在實(shí)際落地時(shí),這種方式可能面臨這樣的問題:

目前主流的大模型參數(shù)通常在7B以上的量級(jí),使用這種參數(shù)量的模型即使是使用lora微調(diào),訓(xùn)練和在線推理預(yù)測(cè)的成本也是不小的,為了某個(gè)單個(gè)任務(wù)的精度提升而去過擬合一個(gè)大模型看上去得不償失。

不過,上述問題在通義千問發(fā)布了0.5B、1.8B的模型后得到了極大的緩解。相對(duì)于7B的參數(shù)量,1.8B左右的模型在訓(xùn)練成本與推理的時(shí)延等方面都能得到足夠的控制。因此,本次實(shí)驗(yàn)就以qwen1.5-1.8B為基準(zhǔn)模型,來探索它結(jié)合了BERT式微調(diào)方法后的效果。

方法描述

大模型使用BERT式的微調(diào)方法其實(shí)很簡單,甚至transformers的庫都已經(jīng)幫我們寫好了,直接使用"Qwen2ForSequenceClassification"即可,其他的流程就跟傳統(tǒng)的文本分類流程一樣就行了。另外需要手動(dòng)指定tokenizer的pad_token_id,否則在構(gòu)建Dataset數(shù)據(jù)進(jìn)行tokenize的時(shí)候會(huì)報(bào)錯(cuò)。

整個(gè)訓(xùn)練流程其實(shí)與傳統(tǒng)文本任務(wù)相似,但是有一些訓(xùn)練中的細(xì)節(jié)內(nèi)容,我想在下面著重分享一下。

  • base模型通常比chat模型的微調(diào)效果更好。我在不同參數(shù)量的模型上均做了一些訓(xùn)練嘗試,發(fā)現(xiàn)base模型的效果通過會(huì)比chat模型要好。這是因?yàn)閏hat模型通常會(huì)對(duì)base模型進(jìn)行一些對(duì)齊訓(xùn)練,使其在安全性、幻覺程度、用戶友好程度等方面得到提升,但是會(huì)因?yàn)橐恍皩?duì)齊稅”,導(dǎo)致模型喪失部分基礎(chǔ)能力或者知識(shí)。
  • NEFT方法,在微調(diào)中的增益效果是穩(wěn)定的。NEFT簡單來說就是在embedding層引入一些噪聲,從而增強(qiáng)模型的魯棒性。我感覺這個(gè)方法與之前競(jìng)賽中常用的對(duì)抗訓(xùn)練技巧(FGM)有類似的思想。簡單來說就是在前向計(jì)算的時(shí)候給embedding層增加噪聲擾動(dòng),在梯度計(jì)算結(jié)束和參數(shù)更新之間要將embedding還原回去,通過這種方式增強(qiáng)模型的魯棒性。

NEFT方法: https://arxiv.org/pdf/2310.05914.pdf
FGM方法: https://zhuanlan.zhihu.com/p/91269728
  • 建議使用lora微調(diào)。通過實(shí)驗(yàn)對(duì)比發(fā)現(xiàn),lora微調(diào)和全參數(shù)微調(diào)的效果幾乎沒有明顯差距。那么訓(xùn)練參數(shù)更少的lora方式顯然更值得推薦,使用lora后微調(diào)的參數(shù)(340M)恰好與bert-large參數(shù)量相當(dāng);在設(shè)置lora參數(shù)時(shí),建議將embedding參數(shù)也加入訓(xùn)練。我使用的參數(shù)配置見下:

lora_config = LoraConfig(
        r=32,  # low rank
        lora_alpha=64,  # alpha scaling, scale lora weights/outputs
        target_modules=["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], #if you know
        lora_dropout=0.1,
        bias="none",
        modules_to_save=["score","embed_tokens"],
        task_type=TaskType.SEQ_CLS # 文本分類使用該類型
    )
  • 如果使用chatglm3進(jìn)行BERT式微調(diào)時(shí),如果使用bf16精度,可能會(huì)遇到一個(gè)bug。它的modeling_chatglm.py腳本中,沒有指定對(duì)任務(wù)dense層的參數(shù)進(jìn)行正確的參數(shù)初始化,在訓(xùn)練的時(shí)候任務(wù)dense層的參數(shù)都會(huì)精度溢出,從而導(dǎo)致loss一直是nan。修改的方式也很簡單,增加指定的參數(shù)初始化方法就行。代碼行15-18的部分就是新增的代碼。

class ChatGLMPreTrainedModel(PreTrainedModel):
    """
    An abstract class to handle weights initialization and
    a simple interface for downloading and loading pretrained models.
    """

    is_parallelizable = False
    supports_gradient_checkpointing = True
    config_class = ChatGLMConfig
    base_model_prefix = "transformer"
    _no_split_modules = ["GLMBlock"]

    def _init_weights(self, module: nn.Module):
        """Initialize the weights."""
        if isinstance(module, nn.Linear):
            module.weight.data.normal_(mean=0.0, std=self.config.initializer_range)
            if module.bias is not None:
                module.bias.data.zero_()
        return

結(jié)果

下面列出使用qwen1.5-1.8B模型進(jìn)行BERT式微調(diào)與前述的方法效果對(duì)比。

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

可以看到,qwen1.5-1.8B+BERT式微調(diào)+lora的組合在整體F1精度和小樣本標(biāo)簽類別的F1精度都是最好的。當(dāng)整體數(shù)據(jù)集的量級(jí)比較少的時(shí)候,qwen1.5-1.8B+BERT式微調(diào)+lora對(duì)于小樣本標(biāo)簽類別的表現(xiàn)也是不錯(cuò)的,證明其在小樣本學(xué)習(xí)能力上也是有提升的。

結(jié)論是否適用其他分類任務(wù)?

當(dāng)然,僅在一個(gè)任務(wù)上的實(shí)驗(yàn)結(jié)果肯定是不足以支持上述的結(jié)論的,為了驗(yàn)證這種方式是否能夠在文本分類通用任務(wù)上有不錯(cuò)的效果,我又在兩個(gè)開源的數(shù)據(jù)集上進(jìn)行了驗(yàn)證,分別是THUCnews數(shù)據(jù)集以及Iflytek文本分類數(shù)據(jù)集。下面列出BERT-baseline以及qwen1.5-1.8B+BERT式微調(diào)+lora的組合的分類F1指標(biāo)對(duì)比。

THUCnews數(shù)據(jù)集: http://thuctc.thunlp.org/#%E4%B8%AD%E6%96%87%E6%96%87%E6%9C%AC%E5%88%86%E7%B1%BB%E6%95%B0%E6%8D%AE%E9%9B%86THUCNews
Iflytek數(shù)據(jù)集: https://aistudio.baidu.com/datasetdetail/243969

注意?。。∫韵滤兄笜?biāo)為本人自己訓(xùn)練后的結(jié)果,比公開出來的數(shù)據(jù)指標(biāo)會(huì)低一點(diǎn),因?yàn)槲也惶矚g干調(diào)參的活,就隨機(jī)選了超參數(shù),不過bert與qwen兩者訓(xùn)練的通用參數(shù)是保持一致,目標(biāo)是驗(yàn)證qwen是否能夠?qū)ert有效果的提升,所以不建議與公開榜單指標(biāo)做對(duì)比。

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

可以看到,qwen1.5-1.8B+BERT式微調(diào)+lora在其他分類任務(wù)上的精度相較于bert-large來說還是能有不錯(cuò)的提升。

結(jié)論適用于其他參數(shù)量的模型嗎?

答案是肯定的。實(shí)際上,我還嘗試了qwen1.5-4B,qwen1.5-7B,chatglm3-6B,minicpm等模型結(jié)果,下面列出部分?jǐn)?shù)據(jù)集的效果。

探討 | 大模型在傳統(tǒng)NLP任務(wù)的使用姿勢(shì)-AI.x社區(qū)

隨著大模型參數(shù)量的增加,BERT式微調(diào)的效果似乎并沒有隨著參數(shù)顯著得提升,可以看到的是即使是BERT式微調(diào)方法,也無法利用大模型更多的參數(shù)知識(shí)了。結(jié)合應(yīng)用實(shí)際成本的考量,選擇qwen1.5-1.8B似乎是當(dāng)前性價(jià)比最高的。

當(dāng)然,我對(duì)上述結(jié)果也不是完全沒有疑問的。最大的變數(shù)在于這些國內(nèi)大模型是否在預(yù)訓(xùn)練的時(shí)候?qū)⑦@些開源的數(shù)據(jù)集包含進(jìn)去了。如果在訓(xùn)練的時(shí)候就見過這些數(shù)據(jù),那么對(duì)上述結(jié)果的真實(shí)性就需要進(jìn)一步驗(yàn)證了。

應(yīng)用落地的“新姿勢(shì)” 采用BERT式的微調(diào)方式,由于是讓模型盡量過擬合某個(gè)下游任務(wù),微調(diào)后它就無法適配其他類型的任務(wù)了,因此在實(shí)際應(yīng)用時(shí),對(duì)于不同的任務(wù)會(huì)微調(diào)部署多個(gè)獨(dú)立的模型。對(duì)于大模型來說,如果每個(gè)任務(wù)都單獨(dú)部署一個(gè)模型從應(yīng)用成本上來看顯然是不可控的。但通過上述的lora微調(diào),可以有效得降低應(yīng)用部署的顯存成本。

1、訓(xùn)練階段,針對(duì)不同的任務(wù),使用不同lora單獨(dú)進(jìn)行訓(xùn)練,得到獨(dú)立的lora權(quán)重。

其實(shí)我嘗試過MTDNN的多任務(wù)同時(shí)訓(xùn)練的方式,即增加lora的參數(shù)規(guī)模,然后同時(shí)訓(xùn)練不同的分類任務(wù),目的是用一個(gè)模型cover多個(gè)任務(wù)。具體做法是在數(shù)據(jù)預(yù)處理batch的時(shí)候,根據(jù)不同任務(wù)的數(shù)據(jù)量比例通過采樣的方式采樣某個(gè)任務(wù)的1batch數(shù)據(jù)參與當(dāng)前step的訓(xùn)練。然后通過在模型定義時(shí),指定對(duì)應(yīng)任務(wù)與任務(wù)dense層的映射關(guān)系來保證每個(gè)任務(wù)都能使用正確的。

MTDNN方法: https://github.com/microsoft/MT-DNN

class MTDNNForSequenceClassification(Qwen2PreTrainedModel):
    def __init__(self, config,task_configs):
        super().__init__(config)
        # self.num_labels = config.num_labels
        self.model = Qwen2Model(config)
        # self.score = nn.Linear(config.hidden_size, self.num_labels, bias=False)
        self.task_heads = nn.ModuleDict({
            f"task_{task_name}": nn.Linear(config.hidden_size, config_task["num_labels"])
            for task_name, config_task in task_configs.items()
        })
        self.task_configs = task_configs
        self.dropout = nn.Dropout(config.classifier_dropout)
        # Initialize weights and apply final processing
        self.post_init()

然而我嘗試了各種不同的參數(shù)組合,對(duì)上述提到的所有數(shù)據(jù)集進(jìn)行了實(shí)驗(yàn),發(fā)現(xiàn)都無法保證所有的數(shù)據(jù)集都能得到理想的效果,推測(cè)還是因?yàn)閿?shù)據(jù)集之間會(huì)存在“拖后腿”的情況,這種方法要成功最好是找一些特征類似的數(shù)據(jù),才能得到互相增強(qiáng)的效果。最后,還是決定每個(gè)任務(wù)使用獨(dú)立的lora單獨(dú)訓(xùn)練。

2、在部署推理的時(shí)候,我們只需要先將一個(gè)qwen1.5-1.8B的基礎(chǔ)模型加載到顯存中,然后根據(jù)任務(wù)類型,來動(dòng)態(tài)決定使用哪個(gè)lora權(quán)重合并到基礎(chǔ)模型中,具體可參考這篇博文:

https://zhuanlan.zhihu.com/p/691710751

簡單來說就是對(duì)multi-lora進(jìn)行切換的操作。不過,這種方式可能會(huì)增加單次預(yù)測(cè)的推理時(shí)延(額外增加了lora卸載和裝載的操作時(shí)間),可以綜合當(dāng)前硬件情況以及應(yīng)用服務(wù)的使用頻次,對(duì)高頻次、時(shí)延要求比較高的任務(wù)單獨(dú)部署獨(dú)立的模型服務(wù),對(duì)于低頻次、時(shí)延要求低的任務(wù)采用上述multi-lora切換的模式。

小結(jié)

本文主要目的是探討大模型應(yīng)用在傳統(tǒng)NLP任務(wù)上的有效性和增益,通過一個(gè)細(xì)分的文本理解任務(wù)——文本分類,研究了大模型應(yīng)用的不同“姿勢(shì)”。最終發(fā)現(xiàn),將大模型結(jié)合BERT式微調(diào)的方法在標(biāo)注語料比較充分的時(shí)候,相對(duì)于已有的BERT類方法還能有進(jìn)一步的精度提升,同時(shí)在部署推理成本上的投入也是可控的;另外,對(duì)于小樣本標(biāo)簽類別的學(xué)習(xí)能力也能夠幫助提升對(duì)于邊界case的處理。當(dāng)整體的標(biāo)注數(shù)據(jù)語料比較匱乏的時(shí)候,也不妨可以應(yīng)用大模型+sft+prompt工程的模式,輔助技術(shù)團(tuán)隊(duì)進(jìn)行冷啟動(dòng),在積累一定的標(biāo)注語料后,可以切換成上述BERT式的微調(diào)方式,以提升任務(wù)的精度。

本文轉(zhuǎn)載自 ??NLP工作站??,作者: 邱震宇

標(biāo)簽
已于2024-6-27 16:19:06修改
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦