WordPiece标记化如何有效地处理NLP中的罕见单词问题?

问题描述 投票:5回答:1

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

nlp word-embedding
1个回答
13
投票

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

考虑来自original paper的WordPiece算法(由我稍微修改的措辞):

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

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

输入文字:她走了。他是一个狗步行者。我步行

前3个BPE合并:

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

所以在这个阶段,你的词汇包括所有的初始角色,以及walkwalk。您通常会执行此操作以进行固定数量的合并操作。

它如何处理稀有/ OOV字?

很简单,如果使用这种分割方法,OOV字是不可能的。在词汇表中没有出现的任何单词将被分解为子单词单元。类似地,对于罕见的单词,假设我们使用的子词合并的数量是有限的,则单词不会出现在词汇表中,因此它将被分成更频繁的子词。

这有什么用?

想象一下,该模型看到了walking这个词。除非这个词在训练语料库中至少出现过几次,否则该模型无法学会很好地处理这个词。然而,它可能有walkedwalkerwalks这两个词,每个只出现几次。没有子词分割,所有这些词都被模型视为完全不同的词。

然而,如果这些被分割为walk@@ ingwalk@@ ed等,请注意所有这些都将具有共同的walk@@,这将在训练时经常发生,并且模型可能能够更多地了解它。

© www.soinside.com 2019 - 2024. All rights reserved.