我看到像BERT这样的NLP模型使用WordPiece进行标记化。在WordPiece中,我们将标记(例如playing
)拆分为play
和##ing
。它被提到可以覆盖更广泛的未登录词汇(OOV words)。请问有人能帮我解释一下WordPiece标记化实际上是如何完成的,以及它如何有效地处理罕见/未登录词汇?
我看到像BERT这样的NLP模型使用WordPiece进行标记化。在WordPiece中,我们将标记(例如playing
)拆分为play
和##ing
。它被提到可以覆盖更广泛的未登录词汇(OOV words)。请问有人能帮我解释一下WordPiece标记化实际上是如何完成的,以及它如何有效地处理罕见/未登录词汇?
w
a
= wa
l
k
= lk
wa
lk
= walk
因此,在这个阶段,您的词汇表包括所有初始字符,以及 wa
、lk
和 walk
。通常情况下,您会为一定数量的合并操作执行此操作。
它如何处理罕见/未登录词?
非常简单,如果使用这种分割方法,则无法生成未登录词。任何在词汇表中不存在的单词都将被分解为子单元。同样地,对于罕见单词,鉴于我们使用的子单词合并数量有限,该单词将不会出现在词汇表中,因此它将被分成更常见的子单词。
这有什么帮助?
想象一下,模型看到了单词 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)
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)
"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)
"ug"
除以"u"
、"g"
的概率比其他任何符号对都大时才被合并。直观地说,WordPiece与BPE略有不同,它评估合并两个符号所失去的内容以确保值得这样做。