我已经看到像BERT这样的NLP模型利用WordPiece进行标记化。在 WordPiece 中,我们将playing
等令牌拆分为play
和##ing
.有人提到,它涵盖了更广泛的词汇外(OOV)单词。有人可以帮我解释一下 WordPiece 标记化实际上是如何完成的,以及它如何有效地处理有助于稀有/OOV 单词吗?
WordPiece 和 BPE 是两种相似且常用的技术,用于在 NLP 任务中将单词划分为子单词级别。 在这两种情况下,词汇都使用语言中的所有单个字符进行初始化,然后将词汇表中最频繁/最可能的符号组合迭代添加到词汇表中。
考虑一下原始论文中的WordPiece算法(措辞由我略作修改):
- 使用文本中的所有字符初始化单词单位库存。
- 使用 1 中的清单在训练数据上构建语言模型。
- 通过合并当前单词清单中的两个单元来生成新的单词单位,以将单词单位库存增加一个。从所有可能的单词单元中选择新的单词单元,这些单词单元在添加到模型时最大程度地增加了训练数据的可能性。
- 转到 2,直到达到预定义的单词单位限制或可能性增加低于某个阈值。
BPE 算法仅在步骤 3 中有所不同,在步骤 3 中,它只是选择新的单词单元作为当前子单词单元集中下一个最常出现的对的组合。
例
输入文本:她走路了。 他是一个遛狗的人。 我走路
前 3 个 BPE 合并:
w
a
=wa
l
k
=lk
wa
lk
=walk
所以在这个阶段,你的词汇包括所有的初始字符,以及wa
、lk
和walk
。通常对固定数量的合并操作执行此操作。
它如何处理稀有/OOV 单词?
很简单,如果您使用这种分割方法,OOV 单词是不可能的。词汇表中没有出现的任何单词将被分解为子单词单元。同样,对于生僻词,鉴于我们使用的子词合并数量有限,该词不会出现在词汇表中,因此会拆分为更频繁的子词。
这有什么帮助?
想象一下,模型看到单词walking
.除非这个词在训练语料库中至少出现几次,否则模型无法学会很好地处理这个词。然而,它可能有walked
、walker
、walks
等词,每个词只出现几次。如果没有子词分割,所有这些词都被模型视为完全不同的词。
但是,如果将它们细分为walk@@ ing
、walk@@ ed
等,请注意它们现在都有共同walk@@
,这在训练时会经常发生,并且模型可能能够了解更多信息。
WordPiece与BPE非常相似。
例如,假设在预标记化之后,已经确定了以下一组单词,包括它们的频率:
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)
因此,基本词汇是["b", "g", "h", "n", "p", "s", "u"]
.将所有单词拆分为基本词汇的符号,我们得到:
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)
然后,BPE 计算每个可能的符号对的频率,并选择最常出现的符号对。在上面的例子中,"h"
后跟"u"
存在 10 + 5 = 15 次("hug"
的 10 次出现中的 10 次,"hugs"
的 5 次出现中的 5 次)。然而,最常见的符号对是"u"
后跟"g"
,总共出现 10 + 5 + 5 = 20 次。因此,分词器学习的第一个合并规则是将所有"u"
符号后跟一个"g"
符号组合在一起。接下来,"ug"
被添加到词汇表中。然后,这组单词变为
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)
然后,BPE 确定下一个最常见的符号对。它"u"
后跟"n",出现 16 次。"u"
,"n"
被合并到"un"
并添加到词汇表中。下一个最常见的符号对是 "h",后跟"ug"
,出现 15 次。再次合并该对,"hug"
可以添加到词汇表中。
在这个阶段,词汇是["b", "g", "h", "n", "p", "s", "u", "ug", "un", "hug"]
,我们独特的单词集表示为
("hug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("hug" "s", 5)
假设字节对编码训练此时停止,那么学习的合并规则将应用于新单词(只要这些新单词不包括不在基本词汇表中的符号)。例如,单词"bug"
将被标记为["b", "ug"]
但"mug"
将被标记为 [", "ug"],因为符号"m"不在基本词汇表中。通常,单个字母(如"m"
)不会替换为"<unk>"
符号,因为训练数据通常包括每个字母的至少一次出现,但对于表情符号等非常特殊的字符,这种情况很可能会发生。
基本词汇表大小 + 合并次数,是可供选择的超参数。例如,GPT 的词汇量为 40,478,因为它们有 478 个基本字符,并选择在 40,000 次合并后停止训练。
词片与BPE
WordPiece 首先初始化词汇表以包含训练数据中存在的每个字符,并逐步学习给定数量的合并规则。与 BPE 相比,WordPiece 不会选择最常用的符号对,而是选择将训练数据添加到词汇表后最大化可能性的符号对。参考前面的示例,最大化训练数据的可能性等效于找到符号对,其概率除以其第一个符号后跟第二个符号的概率是所有符号对中最大的。例如"u"
,后跟"g"
只有在"ug"
的概率除以"u"
时,"g"
才会被合并,大于任何其他符号对。直观地说,WordPiece与BPE略有不同,因为它通过合并两个符号来评估它的损失,以确保它是值得的。
此外,BPE 将@@
放在标记的末尾,而词组将##
放在开头。