詳細解釋
分詞(Tokenization)是將文本分解為模型可處理的基本單元(token)的過程,是NLP的第一步,影響模型輸入表示和詞彙表設計。
Token類型:
- 詞級(Word):
- 空格分詞(英文)
- 需處理標點
- 問題:未見詞(OOV)
- 子詞級(Subword):
- BPE(Byte Pair Encoding)
- WordPiece(BERT使用)
- SentencePiece(語言無關)
- 平衡詞彙表大小和覆蓋率
- 字符級(Character):
- 每個字符是token
- 序列太長
- 用於特殊場景
常用算法:
- BPE:
- 從字符開始
- 合併頻繁共現對
- GPT-2、RoBERTa使用
- WordPiece:
- 類似BPE但基於概率
- BERT使用
- SentencePiece:
- 語言無關
- 將空格編碼為token
- T5、Llama使用
- Unigram:
- 概率模型
- T5使用
特殊Token:
- [CLS]:分類任務(BERT)
- [SEP]:句子分隔
- [PAD]:填充
- [UNK]/[UNK]:未知詞
- [MASK]:掩碼(MLM)
- [BOS]/[EOS]:開始/結束
詞彙表大小:
- 影響因素:
- 太小:未見詞多
- 太大:參數多、訓練難
- 典型值:
- GPT-2:50,257
- BERT:30,522
- Llama 2:32,000
- Llama 3:128,256
多語言:
- 統一詞彙表:多語言模型
- 平衡:各語言token數
- 擴展:新語言添加
工具:
- Hugging Face Tokenizers:
- Rust實現,極快
- 支持所有主流算法
- SentencePiece:Google開發
- tiktoken:OpenAI的BPE
分詞是NLP的基礎步驟。