NLP方面知识
一 基础
1.Tokenizer
tokenizer总体上做三件事情:
分词。tokenizer将字符串分为一些sub-word token string,再将token string映射到id,并保留来回映射的mapping。从string映射到id为tokenizer encode过程,从id映射回token为tokenizer decode过程。映射方法有多种,例如BERT用的是WordPiece,GPT-2和RoBERTa用的是BPE等等,后面会详细介绍。
扩展词汇表。部分tokenizer会用一种统一的方法将训练语料出现的且词汇表中本来没有的token加入词汇表。对于不支持的tokenizer,用户也可以手动添加。
识别并处理特殊token。特殊token包括[MASK], <|im_start|>等等。tokenizer会将它们加入词汇表中,并且保证它们在模型中不被切成sub-word,而是完整保留。
1.1 分词粒度:
单词分词法将一个word作为最小元,也就是根据空格或者标点分词;
单字分词法(character-base)。单字分词法会穷举所有出现的字符,所以是最完整的;
子词分词法,会把上面的句子分成最小可分的子词[‘To’, ‘day’, ‘is’, ‘S’, ‘un’, ‘day’]
1.2 大模型的分词粒度
GPT族:Byte-Pair Encoding (BPE)
1. 统计输入中所有出现的单词并在每个单词后加一个单词结束符</w> -> ['hello</w>': 6, 'world</w>': 8, 'peace</w>': 2]
2. 将所有单词拆成单字 -> {
'h': 6, 'e': 10, 'l':