【LLM模型开发】WordPiece算法
WordPiece算法
- 对待训练语料进行字符拆分,并将拆分的字符加入初始词库中;
- 设置词库上限;
- 训练语言模型,将能够得分最高的子词作为新的部分加入词库;得分计算公式为:
s c o r e = f r e q _ o f _ p a i r f r e q _ o f _ f i r s t _ e l e m e n t × f r e q _ o f _ s e c o n d _ e l e m e n t score = \frac {freq\_of\_pair}{freq\_of\_first\_element \times freq\_of\_second\_element} score=freq_of_first_element×freq_of_second_elementfreq_of_pair - 重复3直到词库规模达到上限;
训练一个WordPiece
模型首先需要生成一个小的初始化的基础词表;以英文为例,存在这样一个语料:"This is the Hugging Face Course."
首先,对语料进行预分词(按空格切分、按语系切分等等);
[("This", 1), ("is", 1), ("the", 1), ("Hugging", 1), ("Face", 1), ("Course.", 1)]
然后,对语料库进行词汇分割构建词汇表:
[("T", "##h", "##i", "##s", 1), ("i", "##s", 1), ("t", "##h", "##e", 1), ("H", "##u", "##g", "##g", "##i", "##n", "##g", 1), ("F", "##a", "##c", "##e", 1), ("C", "##o", "##u", "##r", "##s", "##e", "##.", 1)]
词汇表中当前词汇为:
["T", "h", "i", "s", "t", "e", "H", "u", "g", "n", "F", "a", "c", "C", "o", "r", "."]
计算每种组合的得分:
{('T', '##h'): 0.5, ('##h', '##i'): 0.25, ('##i', '##s'): 0.1667, ('i', '##s'): 0.3333, ('t', '##h'): 0.5, ('##h', '##e'): 0.1667, ('H', '##u'): 0.5, ('##u', '##g'): 0.1667, ('##g', '##g'): 0.1111, ('##g', '##i'): 0.1667, ('##i', '##n'): 0.5, ('##n', '##g'): 0.3333, ('F', '##a'): 1.0, ('##a', '##c'): 1.0, ('##c', '##e'): 0.3333, ('C', '##o'): 1.0, ('##o', '##u'): 0.5, ('##u', '##r'): 0.5, ('##r', '##s'): 0.3333, ('##s', '##e'): 0.1111, ('##e', '##.'): 0.3333}
这里得分最高的字符对事Fa
,因此合并这两个字符;
Fa
的得分计算公式为:
s c o r e ( F , a ) = ( F a : 1 ) ( F : 1 ) × ( a : 1 ) = 1 score(F,a) = \frac {(Fa: 1)}{(F: 1) \times (a: 1)} = 1 score(F,a)=(F:1)×(a:1)(Fa:1)=1
Fa
在词汇表中出现一次,F
和a
各出现一次,所以得分最高;因此作为第一个被合并的字符。
WordPiece
算法与BPE
算法有相似之处。WorldPiece
首先将所有字符、词添加到词库中,并需要预先设定词库的规模。
但是WordPiece算法计算的是实质是条件概率。