【NLP】大模型時(shí)代,我們真的不再需要分詞了嗎?

文 | 付奶茶
編 | 小軼
分詞是NLP的基礎(chǔ)任務(wù),將句子、段落分解為字詞單位,方便后續(xù)的處理的分析。不知道NLPer有沒有思考過(guò)這個(gè)問(wèn)題:
我們?cè)诟黜?xiàng)研究工作中想要建模的文本單位究竟是什么?
What are the units of text that we want to model?
在這篇論文中,作者調(diào)查了pre-neural、neural era期的幾項(xiàng)工作,通過(guò)工作,作者提出了一個(gè)結(jié)論:
"there is and likely will never be a silver bullet solution for all applications and that thinking seriously about okenization remains important for many applications"
即對(duì)于所有的應(yīng)用,有且可能永遠(yuǎn)不會(huì)有靈丹妙藥般的解決方案(angular solution),認(rèn)真思考研究的計(jì)劃對(duì)于很多應(yīng)用仍然很重要.下面,我們一起來(lái)看下這篇論文:

論文標(biāo)題:
Between words and characters: A Brief History of Open-Vocabulary Modeling and Tokenization in NLP
論文鏈接:
https://arxiv.org/abs/2112.10508
在關(guān)于什么是token這個(gè)問(wèn)題上一直沒有蓋棺定論,我們可以看到知乎中大家的討論:


在這些回答中可以看到大部分同學(xué)都持有“按照特定需求切分”“有一定的意義”等想法,并未提煉出標(biāo)準(zhǔn)解決答案.在本篇論文開頭作者引用了twitter中的一個(gè)回答:

博主的大概意思是,token是人造的概念.在自然語(yǔ)言處理技術(shù)的研究中,NLP模型默認(rèn)被認(rèn)為文是本被分割成小塊,然后輸入計(jì)算機(jī),最終只是一個(gè)整數(shù)序列的過(guò)程。而在Webster和Kit(1992)[1]提出將這些所謂的“小塊”稱為連續(xù)子字符串-token,token這個(gè)概念才正式出現(xiàn)。

1.0時(shí)代 token=word的近似
在早期的的認(rèn)知中,token應(yīng)該是語(yǔ)義上的切割單位,文本數(shù)據(jù)傳統(tǒng)上被分割為“句子”和“單詞”。
這些宏觀單位再被分割成微觀原子單位,而這些微觀單位的定義既要承接語(yǔ)言注釋(如詞性標(biāo)記、形態(tài)句法注釋、句法依賴信息等),也是需承接語(yǔ)言動(dòng)機(jī),包括縮略詞(don't)、復(fù)合詞(如法語(yǔ)copier-coller)、形態(tài)衍生詞(如英語(yǔ)或法語(yǔ)antiTrump),以及眾多的命名實(shí)體類、遵循特定類型語(yǔ)法的其他序列(如數(shù)字、url)。
MAF(Morphological Annotation Framework,MAF定義的ISO標(biāo)準(zhǔn))定義token為“non-empty contiguous sequence of graphemes or phonemes in a document”-文檔中字素或音素的非空連續(xù)序列,在通常的處理方式是用空格切分。
近年來(lái),基于神經(jīng)語(yǔ)言模型的方法進(jìn)一步導(dǎo)致了句子如何被分割成原子單位的進(jìn)化。
這種進(jìn)化使得利用Tokenization任務(wù)將文本分割為“non-typographically (and indeed non-linguistically) motivated units”,即原來(lái)的token變?yōu)閜re-token,原來(lái)的tokenization變?yōu)閜re-tokenization,常見的工具M(jìn)oses的tokenizer、Hugging Facede Tokenizers package。
2.0時(shí)代 token=subword
在神經(jīng)網(wǎng)絡(luò)的時(shí)代基于單詞級(jí)別的模型雖然簡(jiǎn)單容易理解上手,但是它們無(wú)法處理罕見和新奇的單詞(在訓(xùn)練中罕見、或者未出現(xiàn)詞匯,out- vocabularyOOV)——即可以視為封閉的詞匯模型。
在訓(xùn)練時(shí),歷史上罕見的單詞類型被替換為一個(gè)新的單詞類型[UNK],任何不屬于模型原來(lái)封閉詞匯表的令牌都替換為[UNK]。這種方法會(huì)有很多問(wèn)題,無(wú)法勝任NLG任務(wù)等。
除此之外,形態(tài)不同意思相近的詞在詞表中這些詞會(huì)被當(dāng)作不同的詞處理使得訓(xùn)練冗余。在解決怎么樣在有限詞匯表下有效地處理無(wú)限詞匯的問(wèn)題,研究者們啟用更小、更細(xì)致的單位來(lái)代表存在以上問(wèn)題的原來(lái)的word的單位。
subword tokenization最于常見的詞不做處理仍然取word,將稀有單詞分割為具有含義的子詞單詞語(yǔ)(subword)。
例如:unfriendly分解為un-friendly-ly,這些單位都是有意義的單位,un的意思是相反的,friend是一個(gè)名詞,ly則變成副詞。在文本的第六章,作者簡(jiǎn)要的介紹了幾大subwords的常用算法:BPE、WordPiece、UnigramLM。
作者論述最為核心的算法即為- Byte Pair Encoding(BPE),算法來(lái)源自《Neural Machine Translation of Rare Words with Subword Units》[3]這篇論文,將字節(jié)對(duì)編碼(BPE)(Gage,1994)壓縮算法,應(yīng)用于分詞任務(wù),將編碼或二元編碼是一種簡(jiǎn)單的數(shù)據(jù)壓縮形式,其中最常見的一對(duì)連續(xù)字節(jié)數(shù)據(jù)被替換為該數(shù)據(jù)中不存在的字節(jié)。
算法步驟:
(1)準(zhǔn)備足夠大的訓(xùn)練語(yǔ)料
(2)確定期望的subword詞表大小
(3)將單詞拆分為字符序列并在末尾添加后綴“ w>”,統(tǒng)計(jì)單詞頻率。本階段的subword的粒度是字符。例如,“ low”的頻率為5,那么我們將其改寫為“ l o w w>”:5
(4)統(tǒng)計(jì)每一個(gè)連續(xù)字節(jié)對(duì)的出現(xiàn)頻率,選擇最高頻者合并成新的subword
(5)重復(fù)第4步直到達(dá)到第2步設(shè)定的subword詞表大小或下一個(gè)最高頻的字節(jié)對(duì)出現(xiàn)頻率為1

停止符""的意義在于表示subword是詞后綴。舉例來(lái)說(shuō):"st"字詞不加""可以出現(xiàn)在詞首如"st ar",加了""表明改字詞位于詞尾,如"wide st",二者意義截然不同。每次合并后詞表可能出現(xiàn)3種變化:
+1,表明加入合并后的新字詞,同時(shí)原來(lái)在2個(gè)子詞還保留(2個(gè)字詞不是完全同時(shí)連續(xù)出現(xiàn))
+0,表明加入合并后的新字詞,同時(shí)原來(lái)2個(gè)子詞中一個(gè)保留,一個(gè)被消解(一個(gè)字詞完全隨著另一個(gè)字詞的出現(xiàn)而緊跟著出現(xiàn))
-1,表明加入合并后的新字詞,同時(shí)原來(lái)2個(gè)子詞都被消解(2個(gè)字詞同時(shí)連續(xù)出現(xiàn))
通過(guò)以上步驟得到了subword的詞表,對(duì)該詞表按照subword長(zhǎng)度由大到小排序。編碼時(shí),對(duì)于每個(gè)單詞,遍歷排好序的子詞詞表尋找是否有token是當(dāng)前單詞的子字符串,如果有,則該token是表示單詞的tokens之一。
從最長(zhǎng)的token迭代到最短的token,嘗試將每個(gè)單詞中的子字符串替換為token。最終,將所有子字符串替換為tokens,對(duì)仍然沒被替換的子字符串情況,則將剩余的子詞替換為特殊token,如
實(shí)際上,隨著合并的次數(shù)增加,詞表大小通常先增加后減小。BPE允許通過(guò)可變長(zhǎng)度字符序列的固定大小詞匯表來(lái)表示一個(gè)開放的詞匯表,使其成為一種非常適合神經(jīng)網(wǎng)絡(luò)模型的分詞策略。后期使用時(shí)需要一個(gè)替換表來(lái)重建原始數(shù)據(jù)。OpenAI GPT-2 與Facebook RoBERTa均采用此方法構(gòu)建subword vector.該可以有效地平衡詞匯表大小和步數(shù)(編碼句子所需的token數(shù)量)。但是基于貪婪和確定的符號(hào)替換,不能提供帶概率的多個(gè)分片結(jié)果。
除此之外,作者還介紹了基于概率生成新的subword而不是下一最高頻字節(jié)對(duì)的WordPiece、從詞匯表中刪除概率最低的項(xiàng)目的UnigramLM、允許已學(xué)習(xí)的單元跨越這些邊界的SentencePiece.在一些研究者們的實(shí)驗(yàn)中我們可以看到,例如英、日語(yǔ)中BERT-style模型在NLP任務(wù)重Unigram比BPE分割效果更好,而在翻譯方面的各項(xiàng)試驗(yàn)中BPE最為可靠.在種種不同角度的論證中,究竟是誰(shuí)一騎絕塵C位出道,仍舊沒有結(jié)論性的結(jié)果。
賣萌屋相關(guān)解讀:《NLP Subword三大算法原理:BPE、WordPiece、ULM》
在本章的末尾作者還有一個(gè)問(wèn)題:
How many units do we need?
我們?yōu)榱双@得最佳性能,應(yīng)該選擇多少次merge?在這個(gè)問(wèn)題上研究者們也各持一詞,如由于神經(jīng)機(jī)器翻譯模型的輸出是有頻率偏差的,為保持一個(gè)更均勻的頻率分布是更好的,合并盡可能縮短整個(gè)序列的長(zhǎng)度而確保95%的subword單位出現(xiàn)至少100次(大概在訓(xùn)練數(shù)據(jù)),因此在這個(gè)問(wèn)題上,現(xiàn)有的結(jié)論仍是表現(xiàn)最好的數(shù)字可能取決于任務(wù)和領(lǐng)域,并因語(yǔ)言而異。
3.0時(shí)代 tokenization-free
作者在本章中提出,如果我們一直依賴于一個(gè)預(yù)定義word(pretokenization output)概念,在沒有這樣的定義、或者無(wú)法獲得、不需要該怎么辦,有沒有一種方法可以 let our data-driven machine learning approach also learn the tokenization? 因此,在這章中,作者介紹了各種技術(shù)來(lái)生成不同大小、質(zhì)量的units。在這里作者做了幾大熱門選項(xiàng)的分析:
(1) Characters?
研究者們認(rèn)為word或sub-word級(jí)標(biāo)記序列在噪聲存在時(shí)將發(fā)生顯著變化,從而character模型對(duì)噪聲和非分布數(shù)據(jù)更有魯棒性。但是限制采用字符級(jí)模型的一個(gè)主要因素是,字符序列往往比它們的字級(jí)或子字級(jí)的對(duì)應(yīng)字符長(zhǎng)得多,這使得訓(xùn)練和推理變慢。為了提高訓(xùn)練速度和效率,Libovicky、Chung、Cherry等人評(píng)估了各種策略和實(shí)驗(yàn),但是它們都沒有提供性能和速度的適當(dāng)權(quán)衡。
(2)Character hashes?
在多語(yǔ)言環(huán)境中,使用字符級(jí)模型會(huì)導(dǎo)致非常大的詞匯量。不給每個(gè)字符自己的embedding,而是用多個(gè)哈希函數(shù)將所有可能的代碼點(diǎn)散列到更小的集合中,以便在代碼點(diǎn)之間共享參數(shù),以獲得合理的計(jì)算效率,并專注于非生成序列標(biāo)記任務(wù)。
(3)Bytes?
避免字符級(jí)模型詞匯量過(guò)大問(wèn)題的另一種方法是使用UTF-8等標(biāo)準(zhǔn)編碼產(chǎn)生的字節(jié)序列來(lái)表示文本。這可以看作是使用了由標(biāo)準(zhǔn)團(tuán)體(Unicode聯(lián)盟)創(chuàng)建的固定的標(biāo)記化方案,而不是基于語(yǔ)言或統(tǒng)計(jì)信息的過(guò)程。
具體使用Unicode字節(jié)的主要優(yōu)勢(shì)是遵循“建模數(shù)據(jù)中最小有意義單位的原則”時(shí),字節(jié)級(jí)建模是一種自然選擇,ByT5最近的研究表明,字節(jié)級(jí)模型與字符級(jí)模型具有類似的好處(對(duì)噪聲有更好的魯棒性,避免詞匯量不足等問(wèn)題),但也有類似的缺點(diǎn)(由于序列較長(zhǎng),訓(xùn)練和推理時(shí)間較長(zhǎng))。
(4)Visual featurization: Pixels?
另一種 “tokenization-free” 的建模方式是基于視覺概念,字節(jié)級(jí)模型的目標(biāo)是覆蓋磁盤上所表示的全部底層“詞匯”,而視覺表示的目標(biāo)是編碼人類讀者在處理文本時(shí)可能使用的字符之間的相似性。
字節(jié)級(jí)模型依賴于一致的觀察序列,這使得它們?nèi)菀资艿阶兓驮肼暤挠绊?,這些可能會(huì)在視覺上呈現(xiàn)相似的效果,而使用視覺特征的最初動(dòng)機(jī)是創(chuàng)造反映共享字符組件的嵌入,如漢字或韓語(yǔ),因此能夠更好地概括罕見的或不可見的字符,直接從像素分解進(jìn)行轉(zhuǎn)換這種模型在機(jī)器翻譯的各種語(yǔ)言和腳本上都具有競(jìng)爭(zhēng)力,而且對(duì)誘導(dǎo)噪聲具有更強(qiáng)的魯棒性。
總結(jié)
作者在結(jié)尾引用了一句話:
“It remains to ?nd effective neural architectures for learning the set of entities jointly with the rest of the neural model, and for generalising such methods from the level of character strings to higher levels of representation”
Tokenization,無(wú)論是分詞的演進(jìn)過(guò)程還是術(shù)語(yǔ)的含義本身都隨著研究者的深耕有了顯著的發(fā)展。這篇論文追蹤了它們的進(jìn)化,并展現(xiàn)了多年來(lái)研究者們一步步嘗試,立足于不同的motivation帶來(lái)的的重大變化。
我們從論文中的介紹可以看到,盡管tokenization有了重大的進(jìn)步,但是知道現(xiàn)在還沒有完美的方法,所有選項(xiàng)都有缺點(diǎn)和優(yōu)點(diǎn),這片希望之鄉(xiāng)還很遙遠(yuǎn)?!叭匀恍枰业接行У纳窠?jīng)架構(gòu),以便與神經(jīng)模型的其余部分一起學(xué)習(xí)實(shí)體集,并將這些方法從字符串級(jí)別推廣到更高級(jí)別的表示”。
萌屋作者:付奶茶
新媒體交叉學(xué)科在讀Phd,賣萌屋十級(jí)粉絲修煉上任小編,目前深耕多模態(tài),希望可以和大家一起認(rèn)真科研,快樂生活!
[1] Tokenization as the initial phase in NLP.https://www.researchgate.net/publication/221102283_Tokenization_as_the_initial_phase_in_NLP
[2] https://jishuin.proginn.com/p/763bfbd34ee4
[3] Neural Machine Translation of Rare Words with Subword Units.https://aclanthology.org/P16-1162/
往期精彩回顧

萌屋作者:付奶茶