WordPiece标记化如何帮助有效处理NLP中的稀有词问题?

Har*_*man 18 nlp word-embedding

我已经看到像BERT这样的NLP模型利用WordPiece进行令牌化。在WordPiece中,我们将令牌拆分为playingto play##ing。提到它涵盖了范围更广的词汇外(OOV)单词。有人可以帮我解释一下WordPiece标记化实际上是如何完成的,它如何有效地处理稀有/ OOV单词?

Pro*_*yag 25

WordPiece和BPE是在NLP任务中将单词分割为子单词级别的两种相似且常用的技术。在这两种情况下,都使用语言中的所有单个字符来初始化词汇表,然后将词汇表中符号的最频繁/最有可能的组合迭代地添加到词汇表中。

考虑一下原始论文中的WordPiece算法(我对措辞略有修改):

  1. 用文本中的所有字符初始化词单位清单。
  2. 使用1中的清单在培训数据上建立语言模型。
  3. 通过组合当前单词清单中的两个单位来生成一个新的单词单位,以使单词单位清单增加一个。从所有可能的单词单元中选择新单词单元,这会在添加到模型时最大程度地增加训练数据的可能性。
  4. 转到2,直到达到单词单位的预定义限制或可能性增加降至某个阈值以下。

BPE算法只不同在步骤3中,在那里它简单地选择了新词单元作为当前组的子字单元中的下一个最频繁出现的对的组合。

输入文字:她走了。他是个dog狗的人。我步行

前三个BPE合并

  1. w a = wa
  2. l k = lk
  3. wa lk = walk

因此,在这个阶段,你的词汇包括所有的初始人物,连同walkwalk。通常对固定数量的合并操作执行此操作。

它如何处理稀有/ OOV单词?

很简单,如果使用这种分割方法,则OOV单词是不可能的。词汇中未出现的任何单词都将分解为子单词单元。同样,对于稀有词,由于我们使用的子词合并数量有限,因此该词不会出现在词汇表中,因此会将其拆分为更频繁的子词。

这有什么帮助?

想象一下,模型看到了这个词walking。除非该单词在训练语料库中至少出现几次,否则该模型将无法很好地处理该单词。但是,它可能的话walkedwalkerwalks,每次只出现几次。如果不进行子词分割,则模型会将所有这些词视为完全不同的词。

但是,如果将这些细分为walk@@ ingwalk@@ ed等,请注意,它们现在都将具有walk@@共同点,这在训练时会经常发生,并且该模型可能能够了解更多信息。

  • 您能否详细说明一下“从所有可能的单词单元中选择新的单词单元,当添加到模型中时,该单元可以最大程度地增加训练数据的可能性”?我看到到处都引用了它,但没有人详细说明这到底意味着什么。 (7认同)
  • 说 OOV 词是不可能的并不完全正确。想象一下,您构建的模型中所有训练数据都是 ASCII 字符。在解码时,您传入一个以前从未见过的汉字。这将是OOV。OOV 将会相当罕见,但并非不可能。 (4认同)
  • @JohnDoe 我认为这只是 BPE 算法的情况,而不是 WordPiece 的情况。我认为作者指的是LM的可能性。 (2认同)

Abh*_*25t 8

WordPiece 与 BPE 非常相似。

\n

作为示例,令\xe2\x80\x99s 假设在预标记化之后,已确定以下单词集(包括其频率):

\n
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)\n
Run Code Online (Sandbox Code Playgroud)\n

因此,基本词汇是["b", "g", "h", "n", "p", "s", "u"]。将所有单词拆分为基本词汇表的符号,我们得到:

\n
("h" "u" "g", 10), ("p" "u" "g", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "u" "g" "s", 5)\n
Run Code Online (Sandbox Code Playgroud)\n

然后,BPE 计算每个可能的符号对的频率,并选择出现最频繁的符号对。在上面的示例中"h",后跟"u"出现 10 + 5 = 15 次( 出现 10 次时出现 10 次"hug", 出现 5 次时出现 5 次"hugs")。然而,最常见的符号对"u"紧随其后"g",总共出现 10 + 5 + 5 = 20 次。因此,分词器学习的第一个合并规则是将"u"一个符号后面的所有符号分组"g"在一起。接下来,"ug"添加到词汇表中。那么单词集就变成了

\n
("h" "ug", 10), ("p" "ug", 5), ("p" "u" "n", 12), ("b" "u" "n", 4), ("h" "ug" "s", 5)\n
Run Code Online (Sandbox Code Playgroud)\n

然后,BPE 识别下一个最常见的符号对。它\xe2\x80\x99s"u"后面跟着“n”,出现了 16 次。"u""n"被合并"un"并添加到词汇表中。下一个最常见的符号对是“h”,后跟"ug",出现了 15 次。再次合并该对并"hug"可以将其添加到词汇表中。

\n

在这个阶段,词汇表是["b", "g", "h", "n", "p", "s", "u", "ug", "un", "hug"],我们的独特单词集表示为

\n
("hug", 10), ("p" "ug", 5), ("p" "un", 12), ("b" "un", 4), ("hug" "s", 5)\n
Run Code Online (Sandbox Code Playgroud)\n

假设字节对编码训练将在此时停止,则学习的合并规则将应用于新单词(只要这些新单词不包含不在基本词汇表中的符号)。例如,该单词"bug"将被标记为["b", "ug"]"mug"会被标记为 ["", "ug"],因为符号“m”不在基本词汇表中。一般来说,单个字母(例如)"m"不会被"<unk>"符号替换,因为训练数据通常包含每个字母至少出现一次,但对于表情符号等非常特殊的字符很可能会发生这种情况。

\n

基本词汇量大小+合并次数,是一个需要选择的超参数。例如,GPT 的词汇量为 40,478,因为它们有 478 个基本字符,并在 40,000 次合并后选择停止训练。

\n

WordPiece 与 BPE

\n

WordPiece 首先初始化词汇表以包含训练数据中存在的每个字符,并逐步学习给定数量的合并规则。与 BPE 不同,WordPiece 不会选择最常见的符号对,而是选择在添加到词汇表后使训练数据的可能性最大化的符号对。参考前面的例子,最大化训练数据的似然相当于​​找到一个符号对,其概率除以其第一个符号随后其第二个符号的概率是所有符号对中最大的。例如"u",只有当被 ,整除"g"的概率大于任何其他符号对时,才会被合并。直观上,WordPiece 与 BPE 略有不同,因为它通过合并两个符号来评估其损失,以确保它\xe2\x80\x99s 值得。"ug""u""g"

\n

此外,BPE 将 放置@@在标记的末尾,而单词片段将 放置##在开头。

\n