分词
我们要将字符映射成计算机能够识别的数字必须要经历分词这一步。本文主要讲解英文分析的主要步骤。
1. char-subwords-word
很自然的我们对每一个独立含义的英文单词独立编码,即apple. dog, chicken 他们分别拥有独立的编码,也是word级别的编码,word级别的编码可以让每个单词都有固定的符号,但是面对一个问题就是英语词库中有太多的英语单词,需要编码的量远超过计算机的运算能力。同时随着互联网的发展,新词还在不断涌现,word编码陷入窘迫。
Char编码应运而生。char编码是只对26个字母进行编码,所以可以很轻松的囊括所有现存的以及将要发展的英文语系下的单词。但是对比于word编码char编码本身没有任何含义,也就是a,b等这些没有任何含义。单纯的表达能力不强。而且char中每个字母蕴含太多语义优化起来比较困难。
介于两者之间的Subwords分词出现了。也就是子词词元化。它能够平衡词表大小与容纳的语义。并就如何进行子词词元化产生了很多方法。
2. subwords
字节对编码(Byte-Pair Encoding, BPE):
GPT-2, GPT-3,LLAMA-1, LLAMA-2, Roberta, GPT-3.5?, GPT-4?
- 提取所有的单词并计算单词出现的次数
- 所有的单词拆分成字符
- 确定词表大小
- 将非重复字母添加到词表中
- 检查词表中出现最频繁的符号对,将其加入词表。加入此表的的符号对以一个单独的词继续参与此迭代。
- 词表大小达到要求,停止统计
字节级字节对编码(Byte-level BPE, BBPE)
WordPiece编码
BERT, DistilBERT, Electra
通过公式:
$$p(st)/p(s)p(t)$$
计算符号对s和t的相似度来决定添加的单词对,而BPE是计算符号对的频率。
N-gram编码
[sentence-piece]
OOV问题
进行非字符级别编码面对的问题就是OOV问题,所给词未在词表中的问题。一般用[UNK]表示
分词
http://example.com/2023/12/09/分词/