NLP | 一文搞懂如何微調(diào)抱臉(Hugging Face)模型
介紹
微調(diào)自然語(yǔ)言處理 (NLP) 模型需要更改模型的超參數(shù)和架構(gòu),并且通常會(huì)調(diào)整數(shù)據(jù)集以提高模型在給定任務(wù)上的性能。您可以通過(guò)調(diào)整學(xué)習(xí)率、模型中的層數(shù)、嵌入的大小以及各種其他參數(shù)來(lái)實(shí)現(xiàn)這一點(diǎn)。微調(diào)是一個(gè)耗時(shí)的過(guò)程,需要牢牢掌握模型和工作。本文將介紹如何微調(diào)抱臉模型。

學(xué)習(xí)目標(biāo)
● 了解 T5 模型的結(jié)構(gòu),包括變形金剛和自注意力。
● 了解如何優(yōu)化超參數(shù)以獲得更好的模型性能。
● 主文本數(shù)據(jù)準(zhǔn)備,包括標(biāo)記化和格式化。
● 知道如何使預(yù)訓(xùn)練模型適應(yīng)特定任務(wù)。
● 了解如何清理、拆分和創(chuàng)建用于訓(xùn)練的數(shù)據(jù)集。
● 獲得使用損失和準(zhǔn)確性等指標(biāo)進(jìn)行模型訓(xùn)練和評(píng)估的經(jīng)驗(yàn)。
● 探索微調(diào)模型在生成響應(yīng)或答案方面的實(shí)際應(yīng)用。
關(guān)于 Hugging Face Models
Hugging Face 是一家為自然語(yǔ)言處理 (NLP) 模型訓(xùn)練和部署提供平臺(tái)的公司。該平臺(tái)擁有適用于各種 NLP 任務(wù)的模型庫(kù),包括語(yǔ)言翻譯、文本生成和問(wèn)答。這些模型在廣泛的數(shù)據(jù)集上接受訓(xùn)練,旨在在廣泛的自然語(yǔ)言處理 (NLP) 活動(dòng)中表現(xiàn)出色。
Hugging Face 平臺(tái)還包括用于在特定數(shù)據(jù)集上微調(diào)預(yù)訓(xùn)練模型的工具,這有助于使算法適應(yīng)特定領(lǐng)域或語(yǔ)言。該平臺(tái)還具有用于訪問(wèn)和利用應(yīng)用程序中預(yù)訓(xùn)練模型的 API,以及用于構(gòu)建定制模型并將其交付到云端的工具。
將 Hugging Face 庫(kù)用于自然語(yǔ)言處理 (NLP) 任務(wù)具有多種優(yōu)勢(shì):
1. 多種型號(hào)可供選擇:?Hugging Face 庫(kù)提供了大量預(yù)訓(xùn)練的 NLP 模型,包括針對(duì)語(yǔ)言翻譯、問(wèn)答和文本分類等任務(wù)進(jìn)行訓(xùn)練的模型。這使得選擇滿足您確切要求的型號(hào)變得簡(jiǎn)單。
2. 跨平臺(tái)兼容性:Hugging Face 庫(kù)與 TensorFlow、PyTorch 和 Keras 等標(biāo)準(zhǔn)深度學(xué)習(xí)系統(tǒng)兼容,可以輕松集成到您現(xiàn)有的工作流程中。
3. 簡(jiǎn)單的微調(diào):?Hugging Face 庫(kù)包含用于微調(diào)數(shù)據(jù)集上預(yù)訓(xùn)練模型的工具,與從頭開始訓(xùn)練模型相比,可以節(jié)省時(shí)間和精力。
4. 活躍的社區(qū):?Hugging Face 圖書館擁有龐大而活躍的用戶社區(qū),這意味著您可以獲得幫助和支持,并為圖書館的發(fā)展做出貢獻(xiàn)。
5. 有據(jù)可查:Hugging Face 庫(kù)包含大量文檔,可以輕松上手并學(xué)習(xí)如何有效地使用它。
導(dǎo)入必要的庫(kù)
導(dǎo)入必要的庫(kù)類似于為特定的編程和數(shù)據(jù)分析活動(dòng)構(gòu)建工具包。這些庫(kù)通常是預(yù)先編寫的代碼集合,它們提供了廣泛的功能和工具,有助于加快開發(fā)速度。開發(fā)人員和數(shù)據(jù)科學(xué)家可以通過(guò)導(dǎo)入適當(dāng)?shù)膸?kù)來(lái)訪問(wèn)新功能、提高生產(chǎn)力并使用現(xiàn)有解決方案。
導(dǎo)入數(shù)據(jù)集
導(dǎo)入數(shù)據(jù)集是數(shù)據(jù)驅(qū)動(dòng)項(xiàng)目中至關(guān)重要的第一步。


問(wèn)題陳述
“創(chuàng)建一個(gè)能夠根據(jù)上下文和問(wèn)題生成響應(yīng)的模型?!?/p>
例如
Context = “例如,對(duì)類似病例的聚類組可以找到
相似的患者或用于
銀行領(lǐng)域的客戶細(xì)分。關(guān)聯(lián)技術(shù)用于查找經(jīng)常同時(shí)發(fā)生的物料或事件
,例如,特定客戶通常一起購(gòu)買的雜貨物料。異常檢測(cè)用于發(fā)現(xiàn)異常和異常
情況;例如,信用卡欺詐
檢測(cè)。
問(wèn)題 =“異常檢測(cè)的示例是什么?
答案 = ????????????????????????????????

初始化參數(shù)
●?輸入長(zhǎng)度:?在訓(xùn)練過(guò)程中,我們將輸入到模型中的單個(gè)示例中的輸入標(biāo)記(例如單詞或字符)的數(shù)量稱為輸入長(zhǎng)度。如果要訓(xùn)練語(yǔ)言模型來(lái)預(yù)測(cè)句子中的下一個(gè)單詞,則輸入長(zhǎng)度將是短語(yǔ)中的單詞數(shù)。
●?輸出長(zhǎng)度:?在訓(xùn)練期間,模型應(yīng)在單個(gè)樣本中生成特定數(shù)量的輸出標(biāo)記,例如單詞或字符。輸出長(zhǎng)度對(duì)應(yīng)于模型在句子中預(yù)測(cè)的單詞數(shù)。
●?訓(xùn)練批量大小:在訓(xùn)練期間,模型一次處理多個(gè)樣本。如果將訓(xùn)練批次大小設(shè)置為 32,則模型會(huì)在更新其模型權(quán)重之前同時(shí)處理 32 個(gè)實(shí)例,例如 32 個(gè)短語(yǔ)。
●?驗(yàn)證批量大小:?與訓(xùn)練批處理大小類似,此參數(shù)指示模型在驗(yàn)證階段處理的實(shí)例數(shù)。換句話說(shuō),它表示模型在保留數(shù)據(jù)集上進(jìn)行測(cè)試時(shí)處理的數(shù)據(jù)量。
●?時(shí)代:一個(gè) epoch 是整個(gè)訓(xùn)練數(shù)據(jù)集的單次行程。因此,如果訓(xùn)練數(shù)據(jù)集包含 1000 個(gè)實(shí)例,并且訓(xùn)練批次大小為 32,則一個(gè) epoch 將需要 32 個(gè)訓(xùn)練步驟。如果模型訓(xùn)練了 10 個(gè) epoch,它將處理 10000 個(gè)實(shí)例(10 * 1000 = 10000 個(gè))。
T5 Transformer
T5 模型基于 Transformer 架構(gòu),這是一種旨在有效處理順序輸入數(shù)據(jù)的神經(jīng)網(wǎng)絡(luò)。它包括一個(gè)編碼器和一個(gè)解碼器,其中包括一系列相互連接的“層”。
編碼器和解碼器層包括各種“注意力”機(jī)制和“前饋”網(wǎng)絡(luò)。注意力機(jī)制使模型能夠在其他時(shí)間關(guān)注輸入序列的不同部分。同時(shí),前饋網(wǎng)絡(luò)使用一組權(quán)重和偏差來(lái)改變輸入數(shù)據(jù)。
T5 模型還采用了“自注意力”,它允許輸入序列中的每個(gè)元素注意其他每個(gè)元素。這允許模型識(shí)別輸入數(shù)據(jù)中單詞和短語(yǔ)之間的聯(lián)系,這對(duì)于許多 NLP 應(yīng)用程序至關(guān)重要。
除了編碼器和解碼器之外,T5 模型還包含一個(gè)“語(yǔ)言模型頭”,它根據(jù)前一個(gè)單詞預(yù)測(cè)序列中的下一個(gè)單詞。這對(duì)于翻譯和文本制作工作至關(guān)重要,在這些工作中,模型必須提供有凝聚力和自然的輸出。
除了編碼器和解碼器之外,T5 模型還包含一個(gè)“語(yǔ)言模型頭”,它根據(jù)前一個(gè)單詞預(yù)測(cè)序列中的下一個(gè)單詞。這對(duì)于翻譯和文本制作工作至關(guān)重要,在這些工作中,模型必須提供有凝聚力和自然的輸出。
T5 模型代表了一個(gè)大型而復(fù)雜的神經(jīng)網(wǎng)絡(luò),旨在高效、準(zhǔn)確地處理順序輸入。它在各種文本數(shù)據(jù)集上進(jìn)行了廣泛的訓(xùn)練,可以熟練地執(zhí)行廣泛的自然語(yǔ)言處理任務(wù)。
T5Tokenizer
T5Tokenizer 用于將文本轉(zhuǎn)換為標(biāo)記列表,每個(gè)標(biāo)記代表一個(gè)單詞或標(biāo)點(diǎn)符號(hào)。分詞器還會(huì)在輸入文本中插入唯一標(biāo)記,以表示文本的開始和結(jié)束,并區(qū)分各種短語(yǔ)。
T5Tokenizer 結(jié)合了字符級(jí)和單詞級(jí)分詞化,以及與 SentencePiece 分詞器相當(dāng)?shù)淖幼旨?jí)分詞化策略。它根據(jù)訓(xùn)練數(shù)據(jù)中每個(gè)字符或字符序列的頻率對(duì)輸入文本進(jìn)行子字處理。這有助于分詞器處理未出現(xiàn)在訓(xùn)練數(shù)據(jù)中但出現(xiàn)在測(cè)試數(shù)據(jù)中的詞匯外 (OOV) 術(shù)語(yǔ)。
T5Tokenizer 還會(huì)在文本中插入唯一標(biāo)記,以表示句子的開頭和結(jié)尾并劃分它們。例如,它添加標(biāo)記 s > 和 / s > 表示短語(yǔ)的開頭和結(jié)尾,而填充 > 表示填充。

數(shù)據(jù)集準(zhǔn)備
在處理 PyTorch 時(shí),通常使用數(shù)據(jù)集類準(zhǔn)備數(shù)據(jù)以用于模型。數(shù)據(jù)集類負(fù)責(zé)從光盤加載數(shù)據(jù)并執(zhí)行所需的準(zhǔn)備過(guò)程,例如標(biāo)記化和數(shù)值化。該類還應(yīng)實(shí)現(xiàn) getitem 函數(shù),該函數(shù)用于按索引從數(shù)據(jù)集中獲取單個(gè)項(xiàng)目。 init 方法使用文本列表、標(biāo)簽列表和分詞器填充數(shù)據(jù)集。len 函數(shù)返回?cái)?shù)據(jù)集中的樣本數(shù)。get item 函數(shù)按索引從數(shù)據(jù)集中返回單個(gè)項(xiàng)目。它接受索引 idx 并輸出標(biāo)記化的輸入和標(biāo)簽。 通常還包括各種預(yù)處理步驟,例如填充和截?cái)鄻?biāo)記化輸入。您也可以將標(biāo)簽轉(zhuǎn)換為張量。
數(shù)據(jù)加載器
DataLoader 類以并行和批處理方式加載數(shù)據(jù),從而可以處理大型數(shù)據(jù)集,否則這些數(shù)據(jù)集將過(guò)于龐大而無(wú)法存儲(chǔ)在內(nèi)存中。將 DataLoader 類與包含要加載的數(shù)據(jù)的數(shù)據(jù)集類組合在一起。
Dataloader 負(fù)責(zé)遍歷數(shù)據(jù)集,并在訓(xùn)練 transformer 模型時(shí)將一批數(shù)據(jù)返回給模型進(jìn)行訓(xùn)練或評(píng)估。DataLoader 類提供了各種參數(shù)來(lái)控制數(shù)據(jù)的加載和預(yù)處理,包括批處理大小、工作線程計(jì)數(shù)以及是否在每個(gè)紀(jì)元之前對(duì)數(shù)據(jù)進(jìn)行隨機(jī)排序。
模型構(gòu)建
在 PyTorch 中創(chuàng)建轉(zhuǎn)換器模型時(shí),通常首先創(chuàng)建一個(gè)派生自 torch 的新類 -- nn.Module。此類描述模型的體系結(jié)構(gòu),包括層和轉(zhuǎn)發(fā)函數(shù)。類的 init 函數(shù)定義模型的體系結(jié)構(gòu),通常通過(guò)實(shí)例化模型的不同級(jí)別并將它們分配為類屬性。
正向方法負(fù)責(zé)在模型中向前傳遞數(shù)據(jù)。此方法接受輸入數(shù)據(jù)并應(yīng)用模型的層來(lái)創(chuàng)建輸出。forward 方法應(yīng)實(shí)現(xiàn)模型的邏輯,例如通過(guò)一系列層傳遞輸入并返回結(jié)果。
該類的 init 函數(shù)創(chuàng)建一個(gè)嵌入層、一個(gè)轉(zhuǎn)換器層和一個(gè)全連接層,并將它們指定為類屬性。forward 方法接受傳入的數(shù)據(jù) x,通過(guò)給定的階段對(duì)其進(jìn)行處理,并返回結(jié)果。訓(xùn)練 transformer 模型時(shí),訓(xùn)練過(guò)程通常包括兩個(gè)階段:訓(xùn)練和驗(yàn)證。
training_step 方法指定了執(zhí)行單個(gè)訓(xùn)練步驟的基本原理,通常包括:
● 前向傳遞模型
● 計(jì)算損失
● 計(jì)算梯度
● 更新模型的參數(shù)
val_step 方法與 training_step 方法一樣,用于評(píng)估驗(yàn)證集上的模型。它通常包括:
● 前向傳遞模型
● 計(jì)算評(píng)估指標(biāo)
模型訓(xùn)練
在訓(xùn)練轉(zhuǎn)換器模型時(shí),通常會(huì)批量迭代數(shù)據(jù)集,通過(guò)模型發(fā)送輸入,并根據(jù)計(jì)算出的梯度和一組優(yōu)化標(biāo)準(zhǔn)更改模型的參數(shù)。
模型預(yù)測(cè)
要使用新輸入對(duì) T5 等微調(diào)的 NLP 模型進(jìn)行預(yù)測(cè),您可以按照以下步驟操作:
● 預(yù)處理新輸入:對(duì)新輸入文本進(jìn)行標(biāo)記化和預(yù)處理,以匹配應(yīng)用于訓(xùn)練數(shù)據(jù)的預(yù)處理。確保它采用模型預(yù)期的正確格式。
● 使用微調(diào)模型進(jìn)行推理: 加載您之前從檢查點(diǎn)訓(xùn)練或加載的微調(diào) T5 模型。
● 生成預(yù)測(cè): 將預(yù)處理的新輸入傳遞給模型進(jìn)行預(yù)測(cè)。對(duì)于 T5,可以使用 generate 方法生成響應(yīng)。
預(yù)測(cè)
讓我們使用帶有新輸入的微調(diào) T5 模型生成預(yù)測(cè):
*context = “對(duì)相似病例的分組進(jìn)行聚類,例如,\可以找到相似的患者,或用于 *
*banking 字段中的客戶細(xì)分。使用關(guān)聯(lián)技術(shù)查找*
經(jīng)常同時(shí)發(fā)生的項(xiàng)目或事件,例如,通常由特定客戶一起購(gòu)買的
雜貨項(xiàng)目。使用異常檢測(cè)來(lái)發(fā)現(xiàn)異常
和異常情況,例如信用卡欺詐檢測(cè)。
que = “異常檢測(cè)的例子是什么?”
print(generate_question(上下文, que))


結(jié)論
在本文中,我們開始了對(duì)自然語(yǔ)言處理 (NLP) 模型(特別是 T5 模型)進(jìn)行微調(diào)的旅程,以完成問(wèn)答任務(wù)。在整個(gè)過(guò)程中,我們深入研究了NLP模型開發(fā)和部署的各個(gè)方面。
關(guān)鍵要點(diǎn):
● 探索了支撐其功能的編碼器-解碼器結(jié)構(gòu)和自注意力機(jī)制。
● 超參數(shù)調(diào)優(yōu)的藝術(shù)是優(yōu)化模型性能的一項(xiàng)基本技能。
● 通過(guò)對(duì)學(xué)習(xí)率、批量大小和模型大小進(jìn)行試驗(yàn),我們可以有效地對(duì)模型進(jìn)行微調(diào)。
● 精通標(biāo)記化、填充以及將原始文本數(shù)據(jù)轉(zhuǎn)換為適合模型輸入的格式。
● 深入研究微調(diào),包括加載預(yù)先訓(xùn)練的權(quán)重、修改模型層以及使其適應(yīng)特定任務(wù)。
● 學(xué)習(xí)了如何清理和構(gòu)建數(shù)據(jù),將其拆分為訓(xùn)練集和驗(yàn)證集。
● 演示了它如何根據(jù)輸入上下文和問(wèn)題生成響應(yīng)或答案,展示了其在現(xiàn)實(shí)世界中的效用。
常見問(wèn)題解答
問(wèn)題1. 什么是自然語(yǔ)言處理 (NLP) 中的微調(diào)?
答:NLP 中的微調(diào)涉及修改預(yù)訓(xùn)練模型的超參數(shù)和架構(gòu),以優(yōu)化其針對(duì)特定任務(wù)或數(shù)據(jù)集的性能。
問(wèn)題2. T5 等 NLP 模型中使用的 Transformer 架構(gòu)是什么?
答:Transformer 架構(gòu)是一種神經(jīng)網(wǎng)絡(luò)架構(gòu)。它擅長(zhǎng)處理順序數(shù)據(jù),是 T5 等模型的基礎(chǔ)。它使用自注意力機(jī)制來(lái)理解上下文。
問(wèn)題3. T5 等模型中的編碼器-解碼器結(jié)構(gòu)的目的是什么?
答:在 NLP 中的序列到序列任務(wù)中,我們使用編碼器-解碼器結(jié)構(gòu)。編碼器處理輸入數(shù)據(jù),解碼器生成輸出數(shù)據(jù)。
問(wèn)題4. 是否有可能在實(shí)際應(yīng)用中利用 T5 等微調(diào)的 NLP 模型?
答:是的,您可以將微調(diào)模型應(yīng)用于各種實(shí)際的 NLP 任務(wù),包括文本生成、翻譯和問(wèn)答。
問(wèn)題5. 如何開始微調(diào) T5 等 NLP 模型?
答: 首先,您可以探索 Hugging Face 等庫(kù)。這些庫(kù)提供預(yù)先訓(xùn)練的模型和工具,用于微調(diào)數(shù)據(jù)集。學(xué)習(xí) NLP 基礎(chǔ)知識(shí)和深度學(xué)習(xí)概念也至關(guān)重要。
原文地址:https://www.analyticsvidhya.com/blog/2023/10/hugging-face-fine-tuning-tutorial/

非常感謝大家的閱讀,小Mo在這里祝你在末來(lái)的 Python 學(xué)習(xí)職業(yè)生涯中一切順利!
后續(xù)小Mo會(huì)不定期更新書籍、視頻等學(xué)習(xí)資源,以上這些書籍資料也可通過(guò)關(guān)注微信公眾號(hào)免費(fèi)獲取哦!
歡迎關(guān)注我們的微信公眾號(hào):MomodelAl
同時(shí),歡迎使用「Mo AI編程」微信小程序
以及登錄官網(wǎng),了解更多信息:Mo 人工智能教育實(shí)訓(xùn)平臺(tái)
Mo,發(fā)現(xiàn)意外,創(chuàng)造可能
注:部分資源來(lái)源于互聯(lián)網(wǎng),若有侵權(quán),請(qǐng)直接聯(lián)系作者刪除。