關鍵詞: BPE, WordPiece, Unigram, SentencePiece
https://arxiv.org/pdf/2004.03720.pdf
https://huggingface.co/transformers/tokenizer_summary.html?highlight=tokenizer
目錄
- 預訓練模型使用的分詞方式統計;
- 常見的分詞方法:
2.1 算法
2.2 代碼
預訓練模型使用的分詞方式
分詞 | 模型 |
---|---|
rule-based | Transformer XL |
BPE | GPT |
WordPiece | BERT, DistillBERT, Electra |
Unigram | 作為SentencePiece子模塊 |
SentencePiece | XLNet, ALBERT, T5 |
常見的分詞方法
Rule-based tokenization
根據標點符合和空格對文本進行切割。
一般來說,transformer的模型,很少有詞表大于5w的,Transformer XL使用的就是rule-based模型,詞表大小為267735。
- 這種方式會導致詞表過大,在進行embedding操作時,非常耗時耗memory;
- 如果遇到OOV的單詞,可能需要用特殊字符(比如[UNKNOWN])表示,從而不能很好的學習到它的語義信息。
Subword tokenization
混合了單詞和字母的分詞方式。
分詞原則:高頻單詞不再進行細粒度的分割,但低頻單詞會被切分成subword。
比如:對低頻詞'annoyingly',可以分解成'annoying'和'ly',分解后的subword往往比原詞的出現頻率較高。
如果遇到OOV的單詞,可以將它分解成已知的subword,從而學習到它的語義信息。
常見的subword 分詞方式為BPE, WordPiece, Unigram, SentencePiece。
1. BPE (Byte-pair encoding)
Neural Machine Translation of Rare Words with Subword Units (Sennrich et al., 2015).
步驟:
- 給定語料,將語料分割成詞,統計詞頻,確定詞表大??;
備注:一般中文直接按照字分割,英文按空格分割成完整單詞。 - 將詞分為subword,并在末尾添加<\w>;
- 統計subword的頻次,merge最高頻次的subword對,成為新的subword;
- 重復3步驟,直到滿足詞表大小或者最高頻次為1。
2. WordPiece
BPE根據頻次選擇合并的bigram,WordPiece用的n-gram LM 模型的likelihood選擇合并的對象。
假設subword-pair為<'u','g'>,如果<'ug'>的likelihood高于subword-pair<'ux'>,<'xg'>,x表示其他token組合,則合并這對subword。
3. Unigram
BPE和WordPiece是自下而上的構建方式,從subword到word,Unigram相反,通過語言模型,對詞表中的每一個symbol,計算刪去這個symbol后的log-likelihood損失。按照損失排序,去掉loss損失少的symbol。
對詞x,這個詞可能被切割的所有可能的subword,損失可表示為:
一般會去掉10%or20%詞表大小的symbol。
步驟:
- 給定語料D,對文本切詞,構建初始的詞表V,確定目標詞表大?。?/li>
- 如果詞表V數量大于目標詞表;
2.1 訓練語言模型LM,參數為;
2.2 對詞表V中的每個詞t,計算沒有這個詞后的LM的損失:
2.3,基于該式,去掉loss最小的詞;
- 重復步驟2,訓練LM,返回詞表和LM的參數
。
3. SentencePiece
前面提到的subword分詞手段,都需要對文本切割成詞,再做unigram分詞。
SentencePiece的輸入是原始文本,初始的分割方式包含不限于空格分詞,接著再進行subword的分詞。