關(guān)鍵詞: BPE, WordPiece, Unigram, SentencePiece
https://arxiv.org/pdf/2004.03720.pdf
https://huggingface.co/transformers/tokenizer_summary.html?highlight=tokenizer
目錄
- 預(yù)訓(xùn)練模型使用的分詞方式統(tǒng)計;
- 常見的分詞方法:
2.1 算法
2.2 代碼
預(yù)訓(xùn)練模型使用的分詞方式
分詞 | 模型 |
---|---|
rule-based | Transformer XL |
BPE | GPT |
WordPiece | BERT, DistillBERT, Electra |
Unigram | 作為SentencePiece子模塊 |
SentencePiece | XLNet, ALBERT, T5 |
常見的分詞方法
Rule-based tokenization
根據(jù)標(biāo)點符合和空格對文本進行切割击你。
一般來說田晚,transformer的模型,很少有詞表大于5w的,Transformer XL使用的就是rule-based模型蜜另,詞表大小為267735丰榴。
- 這種方式會導(dǎo)致詞表過大,在進行embedding操作時公浪,非常耗時耗memory他宛;
- 如果遇到OOV的單詞,可能需要用特殊字符(比如[UNKNOWN])表示欠气,從而不能很好的學(xué)習(xí)到它的語義信息厅各。
Subword tokenization
混合了單詞和字母的分詞方式。
分詞原則:高頻單詞不再進行細粒度的分割预柒,但低頻單詞會被切分成subword队塘。
比如:對低頻詞'annoyingly',可以分解成'annoying'和'ly'宜鸯,分解后的subword往往比原詞的出現(xiàn)頻率較高憔古。
如果遇到OOV的單詞,可以將它分解成已知的subword淋袖,從而學(xué)習(xí)到它的語義信息鸿市。
常見的subword 分詞方式為BPE, WordPiece, Unigram, SentencePiece。
1. BPE (Byte-pair encoding)
Neural Machine Translation of Rare Words with Subword Units (Sennrich et al., 2015).
步驟:
- 給定語料即碗,將語料分割成詞焰情,統(tǒng)計詞頻,確定詞表大邪痢烙样;
備注:一般中文直接按照字分割,英文按空格分割成完整單詞蕊肥。 - 將詞分為subword谒获,并在末尾添加<\w>;
- 統(tǒng)計subword的頻次壁却,merge最高頻次的subword對批狱,成為新的subword;
- 重復(fù)3步驟展东,直到滿足詞表大小或者最高頻次為1赔硫。
2. WordPiece
BPE根據(jù)頻次選擇合并的bigram,WordPiece用的n-gram LM 模型的likelihood選擇合并的對象盐肃。
假設(shè)subword-pair為<'u','g'>爪膊,如果<'ug'>的likelihood高于subword-pair<'ux'>,<'xg'>权悟,x表示其他token組合,則合并這對subword推盛。
3. Unigram
BPE和WordPiece是自下而上的構(gòu)建方式峦阁,從subword到word,Unigram相反耘成,通過語言模型榔昔,對詞表中的每一個symbol,計算刪去這個symbol后的log-likelihood損失瘪菌。按照損失排序撒会,去掉loss損失少的symbol。
對詞x师妙,這個詞可能被切割的所有可能的subword诵肛,損失可表示為:
一般會去掉10%or20%詞表大小的symbol。
步驟:
- 給定語料D默穴,對文本切詞曾掂,構(gòu)建初始的詞表V,確定目標(biāo)詞表大斜诙ァ珠洗;
- 如果詞表V數(shù)量大于目標(biāo)詞表;
2.1 訓(xùn)練語言模型LM若专,參數(shù)為;
2.2 對詞表V中的每個詞t许蓖,計算沒有這個詞后的LM的損失:
2.3 ,基于該式调衰,去掉loss最小的詞膊爪; - 重復(fù)步驟2,訓(xùn)練LM嚎莉,返回詞表和LM的參數(shù)米酬。
3. SentencePiece
前面提到的subword分詞手段,都需要對文本切割成詞趋箩,再做unigram分詞赃额。
SentencePiece的輸入是原始文本,初始的分割方式包含不限于空格分詞叫确,接著再進行subword的分詞跳芳。