首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordPiece标记化如何帮助有效地处理NLP中的稀有单词问题?

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

Stack Overflow用户
提问于 2019-03-27 16:52:34
回答 2查看 18.4K关注 0票数 52

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-29 11:56:51

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

考虑一下来自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@@,这将在培训过程中经常发生,并且模型可能能够更多地了解它。

票数 72
EN

Stack Overflow用户

发布于 2021-11-30 16:43:36

WordPiece与BPE非常相似。

作为一个例子,让我们假设在标记前,确定了以下一组单词,包括它们的频率:

代码语言:javascript
复制
("hug", 10), ("pug", 5), ("pun", 12), ("bun", 4), ("hugs", 5)

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

代码语言:javascript
复制
("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次出现中,在5次"hugs"中出现5次)。然而,最常见的符号对是"u",其次是"g",总共发生10 +5+5= 20次。因此,令牌程序学习的第一个合并规则是将所有"u"符号和一个"g"符号组合在一起。接下来,将"ug"添加到词汇表中。然后这套词就变成了

代码语言:javascript
复制
("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"],我们的一组独特的单词表示为

代码语言:javascript
复制
("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次合并后选择停止训练。

WordPiece Vs BPE

WordPiece首先初始化词汇表以包含训练数据中的每个字符,然后逐步学习给定数量的合并规则。与BPE不同,WordPiece不选择最频繁的符号对,而是在词汇表中增加训练数据的可能性最大的符号对。参照前面的例子,最大化训练数据的可能性等同于寻找符号对,其概率除以其第一个符号的概率和第二个符号的概率是所有符号对中最大的。例如,"u",后面跟着"g",只有当"ug"除以"u"时,"g"才会被合并,"g"会比任何其他符号对都要大。直观地说,WordPiece与BPE略有不同,因为它通过合并两个符号来评估丢失的内容,从而确保它的价值。

同时,BPE将@@放在标记的末尾,而字块将##放在开头。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55382596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档