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