BERT和 GPT-3 等語言模型針對語言任務(wù)進(jìn)行了預(yù)訓(xùn)練。微調(diào)使它們適應(yīng)特定領(lǐng)域,如營銷、醫(yī)療保健、金融。在本指南中,您將了解 LLM 架構(gòu)、微調(diào)過程以及如何為 NLP 任務(wù)微調(diào)自己的預(yù)訓(xùn)練模型。
介紹
大型語言模型 (LLM) 的特別之處可以概括為兩個(gè)關(guān)鍵詞——大型和通用?!按蟆笔侵杆鼈冇?xùn)練的海量數(shù)據(jù)集及其參數(shù)的大小,即模型在訓(xùn)練過程中學(xué)習(xí)的記憶和知識(shí);“通用”意味著他們具有廣泛的語言任務(wù)能力。
更明確地說,LLM 是 ChatGPT 或 Bard 等聊天機(jī)器人背后的一種新型 AI 技術(shù),與通常針對單個(gè)任務(wù)進(jìn)行訓(xùn)練的典型神經(jīng)網(wǎng)絡(luò)不同,LLM 是在盡可能大的數(shù)據(jù)集上訓(xùn)練的,就像整個(gè)互聯(lián)網(wǎng)一樣,以學(xué)習(xí)生成文本、代碼等各種語言技能。
模型尺寸
然而,它們廣泛的非專業(yè)基礎(chǔ)意味著它們可能會(huì)在利基行業(yè)應(yīng)用中失敗。
例如,在醫(yī)學(xué)領(lǐng)域,雖然LLM大模型可能擅長通過日常的基礎(chǔ)訓(xùn)練總結(jié)通用文章,但它缺乏專業(yè)的醫(yī)學(xué)知識(shí)來準(zhǔn)確總結(jié)包含復(fù)雜技術(shù)細(xì)節(jié)和術(shù)語的專業(yè)外科手術(shù)文件。這就有了微調(diào)的用武之地——對LLM進(jìn)行醫(yī)學(xué)概述數(shù)據(jù)的進(jìn)一步訓(xùn)練,教給它高質(zhì)量醫(yī)學(xué)摘要所需的專業(yè)知識(shí)和詞匯。
好奇這種微調(diào)是如何完成的?嗯,這就是本指南的重點(diǎn)。請繼續(xù)閱讀,我們將更深入地研究使這些模型專業(yè)化的技術(shù)!
根據(jù)新技能訓(xùn)練模型
大型語言模型位于轉(zhuǎn)換器架構(gòu)上。近年來,這種結(jié)構(gòu)極大地推動(dòng)了自然語言處理的進(jìn)步。在 2017 年的論文“Attention is All You Need”中首次引入,轉(zhuǎn)換器架構(gòu)通過其基于注意力的機(jī)制來理解語言上下文,標(biāo)志著 NLP 的轉(zhuǎn)折點(diǎn)。
轉(zhuǎn)換器的核心由編碼器和解碼器組成。編碼器讀取輸入序列(如句子),并創(chuàng)建其抽象表示形式。該向量捕獲單詞背后的上下文和含義,然后解碼器使用該表示來生成輸出。
轉(zhuǎn)換器通過注意力機(jī)制工作。允許模型專注于輸入句子中最重要的單詞。該模型根據(jù)每個(gè)單詞在短語或句子中的上下文為每個(gè)單詞分配權(quán)重和重要性。了解微調(diào)及其工作原理
轉(zhuǎn)換器架構(gòu)的突破通過對大量文本數(shù)據(jù)(包括書籍、網(wǎng)站等)進(jìn)行訓(xùn)練,使創(chuàng)建功能非常強(qiáng)大的基礎(chǔ)模型成為可能。T5、Roberta 和 GPT-3 等流行示例通過接觸大量信息來培養(yǎng)強(qiáng)大的通用語言能力。然而,專業(yè)領(lǐng)域需要對廣泛培訓(xùn)所遺漏的內(nèi)容進(jìn)行調(diào)整。
例如,我最近參與了一個(gè)項(xiàng)目,構(gòu)建了一個(gè)Web 應(yīng)用程序,可以檢測用戶語音中的情感。從語音模式中識(shí)別快樂、沮喪或悲傷等感覺,只能通過在情緒數(shù)據(jù)集上微調(diào)預(yù)先訓(xùn)練的模型來實(shí)現(xiàn)。
彌合這種從寬到窄的差距是微調(diào)的用武之地。就像持續(xù)學(xué)習(xí)一樣,微調(diào)可以通過吸收新信息來增強(qiáng)優(yōu)勢。通過使用特定領(lǐng)域的數(shù)據(jù)(例如醫(yī)學(xué)期刊或客戶對話)訓(xùn)練模型,它們的能力得到了提升,不僅可以匹配,而且可以在這些特定領(lǐng)域表現(xiàn)出色。
現(xiàn)在讓我們來探討一些可用于微調(diào) LLM 的技巧。
微調(diào)技術(shù)
隨著模型變得越來越大,微調(diào)所有模型參數(shù)可能效率低下,但有一些先進(jìn)的方法可以只更新關(guān)鍵區(qū)域,同時(shí)保留有用的知識(shí)。讓我們來看看其中的一些:
PEFT
PEFT(Parameter Efficient Fine-Tuning)是一個(gè)用于高效適應(yīng)預(yù)訓(xùn)練語言模型的庫。它可以通過僅更新一小部分內(nèi)部參數(shù)而不是所有權(quán)重來適應(yīng)大型預(yù)訓(xùn)練語言模型。這有選擇地指導(dǎo)定制,大大降低了微調(diào)的計(jì)算和存儲(chǔ)需求。
LoRA是一種通過僅更新小的關(guān)鍵部分而不是直接更新所有大量內(nèi)部參數(shù)來有效微調(diào)巨型模型的方法.
它的工作原理是在模型架構(gòu)中添加薄的可訓(xùn)練層,將訓(xùn)練重點(diǎn)放在需要新知識(shí)的內(nèi)容上,同時(shí)保留大多數(shù)現(xiàn)有的嵌入式學(xué)習(xí)。
QloRa
QLoRa通過大幅降低內(nèi)存需求,允許在消費(fèi)級(jí)GPU 上微調(diào)具有數(shù)十億個(gè)參數(shù)的巨型模型。
它的工作原理是在訓(xùn)練期間將模型大小縮小到微小的 4 位精度。壓縮格式顯著減少了計(jì)算內(nèi)存的使用量,確保在必要時(shí)將精度重新計(jì)算為完整格式。此外,微調(diào)過程只關(guān)注 LoRA 插入的小適配器層, 而不是直接對整個(gè)擴(kuò)展模型進(jìn)行更改。
微調(diào)的實(shí)際運(yùn)用
現(xiàn)在我們已經(jīng)了解了微調(diào)模型,讓我們通過實(shí)際微調(diào)預(yù)訓(xùn)練模型來獲得實(shí)踐經(jīng)驗(yàn)。在本教程中,我們將微調(diào)醫(yī)學(xué)領(lǐng)域命名實(shí)體識(shí)別任務(wù)的模型。
這里使用的模型是xlm-roberta-base(https://huggingface.co/xlm-roberta-base),它是RoBERTa的多語言版本,數(shù)據(jù)集ncbi_disease(https://huggingface.co/datasets/ncbi_disease)包含NCBI疾病語料庫的疾病名稱和概念注釋。
要繼續(xù)操作,您需要一個(gè) Hugging Face 帳戶,這是大型語言模型構(gòu)建模塊的首選平臺(tái),我們將用于微調(diào)和共享我們的模型。如果您還沒有帳戶,可以在此處(https://huggingface.co/)創(chuàng)建一個(gè)帳戶。
動(dòng)手微調(diào):代碼示例
首先是第一件事。我們需要安裝三個(gè)常用庫:transformer、datasets 和 evalate。這將使我們能夠訪問將用于訓(xùn)練的模型和數(shù)據(jù)集,并在訓(xùn)練期間獲得模型性能。
我們可以直接從 GitHub 上的源代碼安裝該庫,以便在我們想要使用最新開發(fā)時(shí)提供靈活性。
然后,加載專門用于命名實(shí)體識(shí)別 (NER) 的 NCBI 疾病數(shù)據(jù)集。NCBI(The National Center for Biotechnology Information,美國國家生物技術(shù)信息中心)
?
如果需要,還可以從中心選擇其他數(shù)據(jù)集,只需確保任何新數(shù)據(jù)集都適用于嘗試微調(diào)的內(nèi)容,然后再使用它。
接下來,我們可以檢查測試數(shù)據(jù)中使用的實(shí)際命名實(shí)體識(shí)別 (NER) 標(biāo)簽。
這輸出:
測試數(shù)據(jù)僅使用三個(gè)標(biāo)簽:O 表示超出范圍的單詞,B - Disease用于標(biāo)記疾病實(shí)體的開始,I-Disease 用于疾病名稱后面并構(gòu)成疾病名稱一部分的單詞。
序列 ['O', 'B-Disease', 'I-Disease'] 是一組常用于命名實(shí)體識(shí)別 (NER) 任務(wù)的標(biāo)簽。
例如,考慮“患者已被診斷出患有肺癌”這句話。相應(yīng)的標(biāo)簽為:
“O O O O B-疾病 I-疾病 I-疾病”
在這里,“O”標(biāo)記不屬于疾病實(shí)體的單詞,“B-疾病”標(biāo)記開始,“I-疾病”延續(xù)實(shí)體單詞。
現(xiàn)在,我們需要加載一個(gè)分詞器來預(yù)處理文本數(shù)據(jù)。
這將使用 Transformers 庫初始化 xlm-roberta 分詞器。
分詞器將原始文本格式化為 ID 以供模型理解。這為我們的數(shù)據(jù)準(zhǔn)備了微調(diào)預(yù)訓(xùn)練模型。
之后,我們需要?jiǎng)?chuàng)建一個(gè)函數(shù),該函數(shù)將為模型輸入準(zhǔn)備文本數(shù)據(jù)。讓我們將其分解為三個(gè)部分:
在這一部分中,我們使用分詞器來處理輸入詞。它將單詞分解成更小的部分,確保模型能夠更好地理解它們。
在這里,我們?yōu)g覽記錄中的標(biāo)簽。對于每組標(biāo)簽,我們找出它們在標(biāo)記化輸入中對應(yīng)的單詞(或子單詞)。
最后一部分確定每個(gè)令牌的標(biāo)記。如果它是一個(gè)特殊的令牌,它會(huì)得到一個(gè)特定的標(biāo)記。如果它是一個(gè)新詞,它會(huì)得到適當(dāng)?shù)臉?biāo)簽。如果它是一個(gè)子詞,它就會(huì)獲得另一個(gè)特定的標(biāo)簽。接下來,將這些分配的標(biāo)記添加到標(biāo)記化結(jié)果中。
使用分詞器分解數(shù)據(jù)集中的輸入詞。此步驟會(huì)添加特殊標(biāo)記,并可能將單個(gè)單詞拆分為較小的部分。
然后,您可以打印出鍵和值:
完成此操作后,我們可以使用 id2label 和 label2id 創(chuàng)建預(yù)期標(biāo)記 ID 到其標(biāo)記名稱的映射:
在此階段,我們可以使用 Transformers 庫加載預(yù)訓(xùn)練模型,提供預(yù)期標(biāo)記的數(shù)量和標(biāo)記映射。
要訓(xùn)練模型,請使用 Hugging FaceTrainer API。它初始化默認(rèn)的訓(xùn)練參數(shù):
然后訓(xùn)練模型:
此時(shí),我們可以使用默認(rèn)訓(xùn)練參數(shù)將模型推送到 Hub。但是,讓我們先進(jìn)行一些推理,然后可以更具體地針對數(shù)據(jù)自定義訓(xùn)練參數(shù)。
使用管道函數(shù)調(diào)用模型并對文本進(jìn)行分類:
由于 Trainer 在訓(xùn)練過程中不會(huì)自動(dòng)評(píng)估模型性能,我們需要給它傳遞一個(gè)函數(shù)來計(jì)算和顯示指標(biāo),而Hugging Face評(píng)估庫可以提供幫助,它只是提供了準(zhǔn)確性函數(shù),你可以用 evaluate.load() 加載。
首先,導(dǎo)入庫:
然后,創(chuàng)建使用它的評(píng)估函數(shù):
現(xiàn)在可以為模型定義訓(xùn)練參數(shù)了。但首先,登錄到 Hub,以便稍后上傳模型:
我們可以訪問帳戶中的令牌,只需確保它具有“寫入”訪問權(quán)限即可。
然后,指定訓(xùn)練超參數(shù):
到了使用這些計(jì)算指標(biāo)訓(xùn)練模型的時(shí)候了。
首先,重新加載原始的 xlm-roberta 模型和分詞器:
接下來,使用準(zhǔn)確性指標(biāo)和特定的 TrainingArguments 對其進(jìn)行微調(diào):
完成后,可以將模型推送到 Hub:
現(xiàn)在,我們已使用自定義訓(xùn)練參數(shù)和指標(biāo)在 NCBI 疾病數(shù)據(jù)集上成功微調(diào)了預(yù)訓(xùn)練模型。
用于微調(diào)LLM 的工具
現(xiàn)在使用最小化編碼或使用完全可視化界面的工具,可以更輕松地微調(diào)自己的語言模型。
讓我們看看任何人都可以用來微調(diào)模型的一些選項(xiàng):
Lamini
Source:Lamini
微調(diào)套件
Source:Cohere
首先,Cohere是一個(gè) NLP 平臺(tái),它為開發(fā)人員提供了對預(yù)構(gòu)建的大型語言模型的訪問,用于文本摘要、生成和分類等自然語言任務(wù)。
Cohere 現(xiàn)在允許使用新的微調(diào)選項(xiàng)輕松自定義模型,例如:
聊天專業(yè)化 - 個(gè)性化、上下文感知的對話能力
搜索/推薦專業(yè)知識(shí) - 精確匹配用戶偏好
多標(biāo)簽分類 - 跨多個(gè)屬性有效地標(biāo)記內(nèi)容
它們通過微調(diào) Web UI或Python SDK選項(xiàng)來實(shí)現(xiàn)專業(yè)訓(xùn)練。
Autotrain
HuggingFace提供的不僅僅是模型訪問、共享和訓(xùn)練庫。他們還提供用于無代碼微調(diào)的AutoTrain。
它無需編程即可在數(shù)據(jù)上直觀地自定義最先進(jìn)的模型,通過端到端平臺(tái)處理上傳數(shù)據(jù)集、訓(xùn)練、評(píng)估和部署量身定制的創(chuàng)作。
Galileo LLM Studio
Galileo公司幫助開發(fā)語言 LLM 應(yīng)用程序,提供跨越項(xiàng)目生命周期的模塊——從原型實(shí)驗(yàn)到生產(chǎn)監(jiān)控。
Fine-Tune 模塊專注于通過自動(dòng)標(biāo)記有問題的訓(xùn)練數(shù)據(jù)來最大限度地提高模型定制質(zhì)量。這樣可以協(xié)作識(shí)別和解決標(biāo)簽不正確、覆蓋范圍稀疏或污染專業(yè)能力潛力的低質(zhì)量示例等問題。
當(dāng)然,除了這里介紹的 Lamini、Cohere 或 AutoTrain 之外,還有許多其他微調(diào)工具。但這些選項(xiàng)可以幫助您入門,并隨時(shí)將您知道的選項(xiàng)添加到列表中。
有效微調(diào)的最佳實(shí)踐
在微調(diào)大型語言模型時(shí),遵循一些最佳實(shí)踐有助于確保獲得所需的結(jié)果。
這些指南包括以下步驟:
定義目標(biāo)和任務(wù)
我們可以從精確定義模型擅長的任務(wù)開始,例如語言翻譯、文本分類或摘要。然后在這些更廣泛的目標(biāo)中縮小細(xì)節(jié)范圍。例如,情緒分析可能涉及產(chǎn)品評(píng)論、醫(yī)療保健報(bào)告、法律文件等,每一項(xiàng)都需要稍作調(diào)整。
選擇正確模型
選擇預(yù)訓(xùn)練模型,使功能與定義的目標(biāo)保持一致。我們可以前往HuggingFace或Kaggle等模型中心開始,然后調(diào)查架構(gòu)基礎(chǔ)知識(shí)、訓(xùn)練數(shù)據(jù)以及有關(guān)候選人的更多信息。
模型選擇還取決于硬件資源,因?yàn)楸M管效率很高,但較大的模型仍然需要嚴(yán)格的硬件。
Vectara制作的幻覺(Hallucination)排行榜
如果我們打算微調(diào)文本生成或問答任務(wù)的模型,可以查看 Vectara 的模型幻覺排行榜或使用他們的模型。
整理高質(zhì)量的訓(xùn)練數(shù)據(jù)
在獲取數(shù)據(jù)以微調(diào)模型時(shí),質(zhì)量和相關(guān)性非常重要。模型從我們提供的確切訓(xùn)練示例中學(xué)習(xí),因此我們必須投喂反映實(shí)際需求的有代表性的、準(zhǔn)確、干凈的示例。
有用的技術(shù)包括分詞tokenization - 將句子拆分為整齊標(biāo)準(zhǔn)化的單詞分組和詞形還原。數(shù)據(jù)處理過程可確保無縫引入和學(xué)習(xí)。
監(jiān)控和可觀測性
在整個(gè)監(jiān)控過程之前,要取得成功,在訓(xùn)練過程中調(diào)整學(xué)習(xí)率、批量大小和周期等因素非常重要。在開始檢查模型中的偏差之前,這是必要的。
訓(xùn)練模型后,可以使用以下工具:
Giskard來檢測模型中嵌入的幻覺或事實(shí)不準(zhǔn)確等問題。解決這些問題至關(guān)重要,因?yàn)樵趯⒛P筒渴鸬缴a(chǎn)環(huán)境時(shí),它們可能會(huì)帶來重大風(fēng)險(xiǎn)。
Superwise或Langkit用于大型語言模型監(jiān)控。
結(jié)論
微調(diào)模型之后,考慮通過使用Gradio或Streamlit創(chuàng)建用戶友好的應(yīng)用程序?qū)⑵涮嵘揭粋€(gè)新的水平。這些框架使應(yīng)用程序開發(fā)變得輕而易舉,但有很多選項(xiàng)可供探索。
我們可能還想密切關(guān)注用于微調(diào) LLM 的新技術(shù)。一個(gè)好的開始可能是查看"Language Models are Super Mario"的論文,所有關(guān)于結(jié)合專家模型的知識(shí)。
原文:(https://bejamas.io/blog/fine-tuning-llms-for-domain-specific-nlp-tasks/)
審核編輯:劉清
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100766 -
nlp
+關(guān)注
關(guān)注
1文章
488瀏覽量
22037 -
ChatGPT
+關(guān)注
關(guān)注
29文章
1561瀏覽量
7670 -
大模型
+關(guān)注
關(guān)注
2文章
2450瀏覽量
2706 -
LLM
+關(guān)注
關(guān)注
0文章
288瀏覽量
335
原文標(biāo)題:一步一步教您如何精調(diào)出自己的領(lǐng)域大模型
文章出處:【微信號(hào):軟件質(zhì)量報(bào)道,微信公眾號(hào):軟件質(zhì)量報(bào)道】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評(píng)論請先 登錄
相關(guān)推薦
評(píng)論