GPT 如何处理大型词汇表?

数据挖掘 深度学习 nlp openai-gpt
2021-09-15 02:09:58

据我了解,GPT 和 GPT-2 被训练来预测 ñH 给定前一个句子中的单词 ñ-1字。当词汇量非常大(100k+ 词)时,它如何能够生成任何有意义的预测?鉴于有 100k 个可能的标签可供选择,正确标记下一个单词是否会变得非常困难?即使是像 ImageNet 这样的大规模分类问题也只有 1k 个类可供选择。

1个回答

GPT-2 不使用词级词汇表,而是使用子词级词汇表,特别是字节对编码 (BPE)这意味着它不预测下一个词,而是预测下一个子词标记。

BPE 试图找到最可重用的单词片段。BPE 还保留字符子词(例如“a”、“W”)。

GPT-2 使用的子词词汇表有 50k 个标记。你可以看看这里的词汇表。在那里,您可以看到标记 #12175 是“retro”,标记 #11147 是“fit”,因此在标记单词“retrofit”时,您可能会得到 2 个子词标记 #68 和 #12541。在对低频词(即 BPE 训练数据中未出现的词)进行标记时,您最终可能会得到小的子词标记,例如“Kilimanjaro”-->“Kil”、“iman”、“jar”、“o ”。

使用单词级别的词汇是很麻烦的,因为:

  1. 现有单词表面形式的数量超过了神经网络可以管理的大小,即使对于像英语这样形态简单的语言也是如此。对于形态丰富的融合语言,尤其是粘着性语言,使用词级词汇表更不方便。
  2. 语言是“开放的”,从某种意义上说,可以通过将现有单词拼接在一起(例如 manspreading)或完全组成新单词(例如 bazinga)来创建新单词。
  3. 令牌在训练数据中出现的频率越低,我们的网络就越少学会使用它。如果我们有很多不同的token,每个token在训练数据中出现的频率会很低(即数据稀缺),所以我们的网络将无法正确学习。

因此,子词词汇是当今的常态。