系列文章目錄??
AI大模型探索之路-訓(xùn)練篇1:大語言模型微調(diào)基礎(chǔ)認(rèn)知
AI大模型探索之路-訓(xùn)練篇2:大語言模型預(yù)訓(xùn)練基礎(chǔ)認(rèn)知
AI大模型探索之路-訓(xùn)練篇3:大語言模型全景解讀
AI大模型探索之路-訓(xùn)練篇4:大語言模型訓(xùn)練數(shù)據(jù)集概覽
前言
在自然語言處理領(lǐng)域,大語言模型預(yù)訓(xùn)練數(shù)據(jù)準(zhǔn)備是一個重要的環(huán)節(jié)。其中,詞元化(Tokenization)作為預(yù)訓(xùn)練前期的關(guān)鍵步驟,旨在將原始文本分割成模型可識別和建模的詞元序列,為大語言模型提供輸入數(shù)據(jù)。本文將對詞元化技術(shù)進(jìn)行詳細(xì)介紹,包括分詞的粒度、分詞器的類型以及各大模型的分詞效果等內(nèi)容。
一、概述
分詞(詞元化):詞元化(Tokenization)是數(shù)據(jù)預(yù)處理中的一個關(guān)鍵步驟,旨在將原始文本分割成模型可識別和建模的詞元序列,作為大語言模型的輸入數(shù)據(jù);形成一個詞匯表。
傳統(tǒng)自然語言處理研究(如基于條件隨機(jī)場的序列標(biāo)注)主要使用基于詞匯的分詞方法,這種方法更符合人類的語言認(rèn)知。然而,基于詞匯的分詞在某些語言(如中文分詞)中可能對于相同的輸入產(chǎn)生不同的分詞結(jié)果,導(dǎo)致生成包含海量低頻詞的龐大詞表,還可能存在未登錄詞(Out-of-vocabulary, OOV)等問題。因此,一些語言模型開始采用字符作為最小單位來分詞。其中子詞分詞器(Subword Tokenizer)被廣泛應(yīng)用于基于 Transformer 的語言模型中,包括 BPE 分詞、WordPiece 分詞和 Unigram 分詞三種常見方法。
二、分詞的粒度
從分詞的粒度區(qū)分,主要包括3種類型,Word 、Subword、Char
1)Word分詞粒度以完整的單詞為單位進(jìn)行分詞,能夠很好地保留每個詞的語義,適合上下文理解和語義分析。然而,它面臨著長尾效應(yīng)和稀有詞問題,可能導(dǎo)致詞匯表龐大并且出現(xiàn)OOV(Out-of-Vocabulary)問題。
OOV是“Out-Of-Vocabulary”的縮寫,直譯為“詞匯表外的”,在自然語言處理中,表示的是那些在詞匯表中沒有的單詞
2)Char分詞粒度則是將文本拆分為字符級別,這樣可以解決OOV問題,因?yàn)榭梢蕴幚砣魏巫址?,但缺點(diǎn)是可能缺乏明確的語義信息,并且由于粒度過細(xì),會增加后續(xù)處理的計算成本和時間。
3)Subword分詞粒度介于Word和Char之間,旨在克服兩者的缺點(diǎn),同時保留語義信息并減少OOV問題的發(fā)生。Subword分詞方法如BPE(Byte Pair Encoding)或WordPiece通過統(tǒng)計學(xué)方法切分單詞為更小的有意義的單元,這使得它們在處理生僻詞和縮寫時更為有效。(目前使用比較廣泛)
三、分詞器的類型
針對Subword常用的分詞器有3種:BPE 分詞、WordPiece 分詞和 Unigram 分詞。
SentencePiece 是一個開源的分詞器工具;是由谷歌開發(fā)的,旨在提供一種高效的方式來對文本進(jìn)行分詞,尤其適用于處理變長和不規(guī)則的文本數(shù)據(jù)。它通過訓(xùn)練特定領(lǐng)域的模型來代替預(yù)訓(xùn)練模型中的詞表,從而更有效地處理詞匯。常用的BPE、WordPiece、 Unigram分詞器都支持。
四、BPE/BBPE分詞
1)BPE:從字符級別開始,逐步合并最頻繁連續(xù)出現(xiàn)的字符或字符組合,形成新的詞匯單元。
2)BBPE:字節(jié)級別的 BPE(Byte-level BPE, B-BPE)是 BPE 算法的一種拓展。它將字節(jié)視為合并操作的基本符號,從而可以實(shí)現(xiàn)更細(xì)粒度的分割,且解決了未登錄詞問題。采用這種詞元化方法的代表性語言模型包括 GPT-2 、BART 和 LLaMA 。
3)對于英文、拉美體系的語言來說使用BPE分詞足以在可接受的詞表大小下解決OOV的問題,但面對中文、日文等語言時,其稀有的字符可能會不必要的占用詞匯表(詞匯表要么巨大要么會OOV),因此考慮使用字節(jié)級別byte-level解決不同語言進(jìn)行分詞時OOV的問題。具體的,BBPE將一段文本的UTF-8編碼(UTF-8保證任何語言都可以通用)中的一個字節(jié)256位不同的編碼作為詞表的初始化基礎(chǔ)Subword。
例如,GPT-2 的詞表大小為 50,257 ,包括 256 個字節(jié)的基本詞元、一個特殊的文末詞元以及通過 50,000 次合并學(xué)習(xí)到的詞元。(相當(dāng)于既有了BPE特性,又兼容了中文)
BBPE的優(yōu)點(diǎn):不會出現(xiàn) OOV 的情況。不管是怎樣的漢字,只要可以用字節(jié)表示,就都會存在于初始詞表中。
BBPE的缺點(diǎn):一個漢字由3個字節(jié)組成,一個漢字就會被切成多個token,但實(shí)際上這多個token沒必要進(jìn)行訓(xùn)練。
BPE詞表構(gòu)建整體流程如下:
五、WordPiece分詞
1)WordPiece 分詞和 BPE 分詞的想法非常相似,都是通過迭代合并連續(xù)的詞元,但是合并的選擇標(biāo)準(zhǔn)略有不同WordPiece 分詞算法并不選擇最頻繁的詞對,而是使用下面的公式為每個詞對計算分?jǐn)?shù)
比如unable,BPE 只關(guān)心 token pair 的出現(xiàn)頻率,即 freq_of_pair;WordPiece 還考慮了每個 token 的出現(xiàn)頻率。即使 unable 出現(xiàn)頻率很高,但如果 un 和 able 單個 token 的出現(xiàn)頻率都很高,也不會合并它們。
2)WordPiece:就是將所有的「常用字」和「常用詞」都存到詞表中,當(dāng)需要切詞的時候就從詞表里面查找即可。
WordPiece 的方式很有效,但當(dāng)字詞數(shù)目過于龐大時這個方式就有點(diǎn)難以實(shí)現(xiàn)了。對于一些多語言模型來講,要想窮舉所有語言中的常用詞,這個量會非常大(窮舉不全會造成 OOV)
六、Unigram 分詞
Unigram分詞器與BPE和WordPiece的不同在于它的構(gòu)建過程。Unigram初始化時會創(chuàng)建一個非常大的詞匯表,然后根據(jù)一定的標(biāo)準(zhǔn)逐步丟棄較不常用的詞匯單元,直到滿足限定的詞匯表大?。ū容^適合處理生僻詞)
七、分詞器的選擇
大語言模型通常使用 SentencePiece 代碼庫為預(yù)訓(xùn)練語料訓(xùn)練定制化的分詞器(也可以自定義);
這一代碼庫支持字節(jié)級別的 BPE 、 Unigram 、WordPiece分詞。為了訓(xùn)練出高效的分詞器,通常主要關(guān)注以下幾個因素。首先,分詞器必須具備無損重構(gòu)的特性,即其分詞結(jié)果能夠準(zhǔn)確無誤地還原為原始輸入文本。其次,分詞器應(yīng)具有高壓縮率,即在給定文本數(shù)據(jù)的情況下,經(jīng)過分詞處理后的詞元數(shù)量應(yīng)盡可能少,從而實(shí)現(xiàn)更為高效的文本編碼和存儲。具體來說,壓縮比可以通過將原始文本的 UTF-8 字節(jié)數(shù)除以分詞器生成的詞元數(shù)(即每個詞元的平均字節(jié)數(shù))來計算:
例如,給定一段大小為 1MB(1,048,576 字節(jié))的文本,如果它被分詞為 200,000
個詞元,其壓縮率即為 1,048,576/200,000=5.24
八、各大模型的分詞效果
分詞效果:男兒何不帶吳鉤,收取關(guān)山五十州
1、LLaMA 詞表是最小的,LLaMA 在中英文上的平均 token 數(shù)都是最多的,意味 LLaMA 對中英文分詞都會比較碎,比較細(xì)粒度。
尤其在中文上平均 token 數(shù)高達(dá)1.45,這意味著 LLaMA 大概率會將中文字符切分為2個以上的 token。
2、Chinese LLaMA 擴(kuò)展詞表后,中文平均 token 數(shù)顯著降低,會將一個漢字或兩個漢字切分為一個 token,提高了中文編碼效率。
3、ChatGLM-6B 是平衡中英文分詞效果最好的 tokenizer。由于詞表比較大,中文處理時間也有增加。
4、BLOOM 雖然是詞表最大的,但由于是多語種的,在中英文上分詞效率與 ChatGLM-6B 基本相當(dāng)。
九、SentencePiece分詞器使用
SentencePiece地址:https://github.com/google/sentencepiece
1)安裝相關(guān)依賴
pip install sentencepiece
2)分詞器使用
% spm_train --input=<input> --model_prefix=<model_name> --vocab_size=8000 --character_coverage=1.0 --model_type=<type>
參數(shù)說明:
--input:原始語料庫文件,可以傳遞以逗號分隔的文件列表。
--model_prefix:輸出的詞表名稱; 文件格式:<model_name>.model 、 <model_name>.vocab
--vocab_size:設(shè)置詞表大小,例如 8000、16000 或 32000
--character_coverage:詞表對語料庫的覆蓋率,默認(rèn):0.9995 對于具有豐富字符集的語言(如日語或中文)和其他具有小字符集的語言可以設(shè)置為1.0 (即對原料庫的覆蓋率為100%,包含語料庫所有的單詞)
--model_type:模型類型。unigram (default), bpe, char, or word
??更多專欄系列文章:??????AIGC-AI大模型探索之路文章來源:http://www.zghlxwxcb.cn/news/detail-860713.html
文章若有瑕疵,懇請不吝賜教;若有所觸動或助益,還望各位老鐵多多關(guān)注并給予支持。文章來源地址http://www.zghlxwxcb.cn/news/detail-860713.html
到了這里,關(guān)于AI大模型探索之路-訓(xùn)練篇5:大語言模型預(yù)訓(xùn)練數(shù)據(jù)準(zhǔn)備-詞元化的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!