大模型如何理解自然語言:分詞器的入門指南

在自然語言處理(NLP)的領域中察滑,"大模型"如同一位精通語言的大師打厘,能夠理解并生成各種文本修肠。這些模型并非生來就具備這種能力,而是依賴于大量的訓練和精心設計的數據預處理流程户盯。在這一過程中嵌施,分詞器扮演著核心角色,對于文本預處理至關重要莽鸭。本文將深入探討分詞器的工作原理吗伤,以及一些流行大模型(例如LLaMA)的分詞器實現細節(jié),以幫助您理解這些大模型是如何處理自然語言的硫眨。

分詞器的作用:從“字符”到“意義單元”

考慮這樣一句話:“Hello world!”足淆。如果沒有分詞器,計算機只能將其視為一串字符:

Hello world!

對于人類來說礁阁,理解這句話并不困難:“Hello”和“world”是兩個獨立的詞巧号,“!”是一個標點符號。然而姥闭,計算機缺乏直觀的語言理解能力丹鸿,它需要一個“分詞器”來將這句話分解成有意義的單元。經過分詞器的處理棚品,計算機可以將這句話轉化為:

['Hello', 'world', '!']

分詞器的目標是將原始文本轉換為模型可以處理的結構化形式靠欢。所謂的“單元”可能是詞廊敌、子詞或字符,這取決于所采用的分詞策略门怪。

分詞器的工作原理:從規(guī)則到復雜算法

雖然分詞器看似簡單骡澈,但其實現涉及多個層次的算法。現代分詞器不僅僅按詞切割文本薪缆,而是采用了一些更復雜的算法秧廉,例如子詞分詞。我們將從傳統(tǒng)的分詞方法講起拣帽,逐步深入到現代的分詞算法疼电。

1. 基于詞的分割

最簡單的分詞方法是按詞分割,這種方法在英語等語言中效果顯著减拭。例如蔽豺,句子:

Hello world!

經過按詞分割后,得到:

['Hello', 'world', '!']

這種方法直接依賴于空格和標點符號作為分割點拧粪,對于英語等詞匯間有明確空格的語言非常有效修陡。然而,對于中文和日文等沒有空格的語言可霎,需要更復雜的分詞方法魄鸦。

2. 基于字符的分割

對于中文這樣的語言,字符本身就是語言的基本單位癣朗,因此可以按字符進行分割拾因。例如:

你好,世界旷余!

經過字符分割后绢记,得到:

['你', '好', ',', '世', '界', '正卧!']

這種方法簡單直觀蠢熄,但對于一些復雜的任務(如機器翻譯),可能不夠精細炉旷。

3. 子詞級分詞:BPE與WordPiece

子詞級分詞的核心思想是通過將詞拆解成更小的單位(如子詞或字符)签孔,來解決詞匯表稀疏的問題。現代的預訓練大模型窘行,尤其是像BERT饥追、GPT等,都采用了這種方法抽高。最常見的兩種子詞分詞算法是 BPE(Byte Pair Encoding)WordPiece判耕。

BPE(Byte Pair Encoding)

BPE是一種基于統(tǒng)計的子詞分詞算法。其基本原理是通過統(tǒng)計文本中最頻繁的字符對翘骂,并將它們合并成一個新的子詞壁熄,直到達到詞匯表的大小限制帚豪。以簡單的文本為例:

原始文本

low lower newest
  1. 初始時,我們按字符分割:

    ['l', 'o', 'w', ' ', 'l', 'o', 'w', 'e', 'r', ' ', 'n', 'e', 'w', 'e', 's', 't']
    
  2. 統(tǒng)計頻率并合并最頻繁的字符對草丧。例如狸臣,lo 頻率最高,因此合并成 lo

    ['lo', 'w', ' ', 'lo', 'w', 'e', 'r', ' ', 'n', 'e', 'w', 'e', 's', 't']
    
  3. 繼續(xù)統(tǒng)計并合并頻率較高的字符對昌执,如 low

    ['low', ' ', 'low', 'e', 'r', ' ', 'n', 'e', 'w', 'e', 's', 't']
    
  4. 最終烛亦,合并到“newest”變?yōu)椋?/p>

    ['low', 'low', 'er', 'new', 'est']
    

這種方法通過逐步合并字符對,逐步構建出詞匯表懂拾,能夠有效減少詞匯表的大小煤禽,并且能夠處理未見過的詞。

WordPiece

WordPiece是另一種子詞分詞算法岖赋,廣泛應用于BERT模型中檬果。與BPE不同,WordPiece通過最大化文本的對數似然來合并最優(yōu)的字對唐断。假設我們有如下文本:

low lower newest

WordPiece的分詞過程與BPE相似选脊,但它通過一個最大化似然的方法來優(yōu)化合并的方式。最終脸甘,WordPiece也能將文本拆解成子詞單元恳啥。

舉個例子:

  • “l(fā)ow” 會被分割成 ['lo', 'w']
  • “l(fā)ower” 會被分割成 ['lo', 'w', 'er']丹诀。
  • “newest” 會被分割成 ['new', 'est']钝的。

WordPiece在實際應用中非常高效,尤其適合處理多語言和復雜的文本結構忿墅。

SentencePiece

SentencePiece 是由Google提出的一種分詞算法扁藕,它不像BPE和WordPiece那樣需要預先定義詞匯表沮峡。它通過無監(jiān)督的方式直接從文本中學習生成子詞單元疚脐。SentencePiece特別適合于多語言環(huán)境,它能夠同時處理多種語言的文本邢疙。

比如棍弄,對于句子:

低資源語言處理

SentencePiece可能會將它分割成:

['低', '資源', '語', '言', '處理']

SentencePiece的一個重要特點是,它能夠在沒有預定義詞典的情況下直接進行訓練疟游,非常適合低資源語言或多語言環(huán)境呼畸。

常見的大模型分詞器

除了BERT等常見模型,LLaMA颁虐、GPT等現代大語言模型也依賴分詞器來處理文本蛮原。接下來,我們看一看這些大模型中的分詞器實現另绩,特別是它們的Tokenizer類中的常見變量儒陨。

LLaMA中的Tokenizer

LLaMA(Large Language Model Meta AI)是Meta(Facebook)發(fā)布的一款強大的預訓練模型花嘶,它也使用了基于BPE的分詞器。LLaMA的Tokenizer類實現中蹦漠,通常包含以下幾個關鍵變量:

  • vocab_size:詞匯表的大小椭员。這個變量決定了分詞器能處理的最大詞匯量,更大的詞匯表可以提高模型對新詞的處理能力笛园,但也會增加計算和存儲開銷隘击。
  • tokens:分詞器內部存儲的詞匯表,包含所有的子詞單位研铆。
  • encode:用于將文本轉換為子詞單元的函數埋同。該函數會返回一個整數序列,表示每個子詞的ID棵红。
  • decode:與encode相對莺禁,用于將模型輸出的ID序列轉回為可讀文本。

在LLaMA的Tokenizer實現中窄赋,分詞的核心通常依賴于BPE算法哟冬,這樣可以更好地處理未見過的詞匯。

選擇合適的分詞器

在選擇分詞器時忆绰,我們需要考慮以下幾個因素:

  1. 任務類型:如果你的任務需要處理很多未知詞浩峡,或者你的數據集中包含大量拼寫錯誤,采用子詞分詞器(如BPE错敢、WordPiece或SentencePiece)會更合適翰灾。
  2. 資源限制:不同分詞器的效率和詞匯表大小差異較大。對于計算資源有限的場景稚茅,選擇一個更輕量級的分詞器纸淮,如WordPiece,可能會帶來更好的性能亚享。
  3. 多語言支持:如果你的應用需要支持多種語言咽块,SentencePiece是一種非常不錯的選擇,因為它能夠無監(jiān)督地學習語言的結構欺税,適應多語言環(huán)境侈沪。
  4. 上下文感知能力:對于對話生成類任務(如chatbot),需要處理更多上下文信息晚凿,選擇分詞器時也要考慮到模型的上下文感知能力亭罪。

代碼示例:使用Hugging Face的Tokenizer

from transformers import BertTokenizer

# 加載BERT的分詞器
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# 示例文本
text = "Hello, world!"

# 使用分詞器進行編碼
encoded = tokenizer.encode(text, add_special_tokens=True)  # add_special_tokens添加[CLS]和[SEP]
print("Encoded:", encoded)

# 解碼
decoded = tokenizer.decode(encoded)
print("Decoded:", decoded)

在這段代碼中,BertTokenizerencode方法將輸入的文本轉換成整數ID

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末歼秽,一起剝皮案震驚了整個濱河市应役,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖箩祥,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件呻惕,死亡現場離奇詭異,居然都是意外死亡滥比,警方通過查閱死者的電腦和手機亚脆,發(fā)現死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盲泛,“玉大人濒持,你說我怎么就攤上這事∷鹿觯” “怎么了柑营?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長村视。 經常有香客問我官套,道長,這世上最難降的妖魔是什么蚁孔? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任奶赔,我火速辦了婚禮,結果婚禮上杠氢,老公的妹妹穿的比我還像新娘站刑。我一直安慰自己,他們只是感情好鼻百,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布绞旅。 她就那樣靜靜地躺著,像睡著了一般温艇。 火紅的嫁衣襯著肌膚如雪因悲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天勺爱,我揣著相機與錄音晃琳,去河邊找鬼。 笑死邻寿,一個胖子當著我的面吹牛蝎土,可吹牛的內容都是我干的视哑。 我是一名探鬼主播绣否,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼挡毅!你這毒婦竟也來了蒜撮?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎段磨,沒想到半個月后取逾,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡苹支,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年砾隅,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片债蜜。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡晴埂,死狀恐怖,靈堂內的尸體忽然破棺而出寻定,到底是詐尸還是另有隱情儒洛,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布狼速,位于F島的核電站琅锻,受9級特大地震影響,放射性物質發(fā)生泄漏向胡。R本人自食惡果不足惜恼蓬,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望僵芹。 院中可真熱鬧滚秩,春花似錦、人聲如沸淮捆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽攀痊。三九已至桐腌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間苟径,已是汗流浹背案站。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留棘街,地道東北人蟆盐。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像遭殉,于是被迫代替她去往敵國和親石挂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容