優(yōu)雅談大模型:Token與分詞方法
1.Token
在繼續(xù)前行之前,需要先停下來澄清下Token這個詞,以及如何將原始的語料轉(zhuǎn)化為Token,在細究背后的原理之后會更加優(yōu)雅的理解大模型。任何的資訊都可以生成語料,而這些語料需要被機器理解以及供后續(xù)的模型訓練,那么最常見的做法是將一段文字先切片,然后一一對應(yīng)的轉(zhuǎn)化為數(shù)字或者向量輸入模型。通常而言有三種類型的分詞法:基于單詞、字符以及子詞的分詞法。單詞和字符這里就不解釋,字詞法運用得最為廣泛,也是最為主流。字詞分詞法包含了BPE、WordPiece、Unigram等。GPT等主流大模型也是采用BPE的分詞法。
圖片

按照常識,中文不是應(yīng)該一個字一個Token。因為這里舉的例子是GPT,一個多語言模型,它覆蓋了國際很多種語言。但是它并沒有特殊的針對中文做適配,因此它采用了一種辦法,將中文轉(zhuǎn)為unicode,然后在按照英文的體系去切分,所以會看到有些切塊是“?”的字符。其實這樣一來,整體效率降低了,而且代價巨大,畢竟收費是基于Token數(shù)。
2.分詞方法
BPE、WordPiece、SentencePiece等方法的技術(shù)專業(yè)性的詳細拆解后續(xù)可以參見??《大模型背后的基礎(chǔ)模型》??這個專欄。
各種分詞法對比,各種分詞法都是基于大的詞匯庫然后按照特定的算法進行學習切分。BPE是貪婪而且是確定的,SentencePiece是可以針對同一個字符串進行反復(fù)的抽樣。
BPE(Byte Pair Encoding)自于論文《Neural Machine Translation of Rare Words with Subword Units》。它是一種基于頻率的分詞方法,它從一個完整的詞匯表開始,迭代地合并出現(xiàn)頻率最高的字符對,直到預(yù)定的詞匯表規(guī)模。例如:“I love lubanmochui.” 使用BPE分詞法,首先將每個單詞分割成字符,然后合并最常見的字符對。也許“l(fā)ove”會變成“l(fā)o”和“ve”,因為“l(fā)o”和“ve”在整個語料庫中頻繁出現(xiàn)。英語中“un”、“est”、“l(fā)ess”也經(jīng)常被單獨提煉出來。
WordPiece來至論文《Japanese and korean voice search》,和BPE一樣在合并字符時除了考慮出現(xiàn)的頻率,還考慮了合并后的token對整體語言模型的貢獻,某種意義是基于概率的分詞法。畢竟有些名詞,例如針對蔬菜名合并和切分的意義不大,保留詞匯的原始意義是最優(yōu)的選擇。
SentencePiece來至論文《Subword Regularization: Improving Neural Network Translation Models with Multiple Subword Candidates》。它是谷歌推出的子詞開源工具包,其中集成了BPE、ULM子詞算法。除此之外,SentencePiece還能支持字符和詞級別的分詞。為了能夠處理多語言問題,SentencePiece將句子視為Unicode編碼序列,從而子詞算法不用依賴于語言的表示。
3.HuggingFace Tokenizer
HuggingFace(重量級的大模型社區(qū))的介紹會放在后續(xù),這里主要介紹下HuggingFace提供的Tokenizer的庫。在HuggingFace里面它對于輸入文本的處理流程(黃色部分)如下圖所示,粉色則為處理的輸出結(jié)果。
注意:
GPT, GPT-2, RoBERTa, BART, DeBERTa 等模型使用了 BPE,其中 GPT-2 使用了 byte-level BPE 。
BERT,DistilBERT,MobileBERT,Funnel Transformers,MPNET等模型使用了WordPiece。Hugging Face中的實現(xiàn)是基于已發(fā)表文獻的模擬。
AlBERT,T5,mBART,Big Bird,XLNet等模型使用了 Unigram。
- Normalization:標準化步驟,包括一些常規(guī)清理,例如刪除不必要的空格、小寫、以及刪除重音符號
- Pre-tokenization:tokenizer 不能單獨在原始文本上進行訓練。相反,我們首先需要將文本拆分為小的單元,例如單詞。這就是pre-tokenization 步驟。基于單詞的tokenizer可以簡單地基于空白和標點符號將原始文本拆分為單詞。這些詞將是tokenizer在訓練期間可以學習的子詞邊界
- Model:執(zhí)行tokenization從而生成token序列
- Postprocessor:針對具體的任務(wù)插入special token,以及生成attention mask和token-type ID
本文轉(zhuǎn)載自 ??魯班模錘??,作者: 龐德公
