据我了解,GPT 和 GPT-2 被训练来预测 给定前一个句子中的单词 字。当词汇量非常大(100k+ 词)时,它如何能够生成任何有意义的预测?鉴于有 100k 个可能的标签可供选择,正确标记下一个单词是否会变得非常困难?即使是像 ImageNet 这样的大规模分类问题也只有 1k 个类可供选择。
GPT 如何处理大型词汇表?
数据挖掘
深度学习
nlp
openai-gpt
2021-09-15 02:09:58
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 ”。
使用单词级别的词汇是很麻烦的,因为:
- 现有单词表面形式的数量超过了神经网络可以管理的大小,即使对于像英语这样形态简单的语言也是如此。对于形态丰富的融合语言,尤其是粘着性语言,使用词级词汇表更不方便。
- 语言是“开放的”,从某种意义上说,可以通过将现有单词拼接在一起(例如 manspreading)或完全组成新单词(例如 bazinga)来创建新单词。
- 令牌在训练数据中出现的频率越低,我们的网络就越少学会使用它。如果我们有很多不同的token,每个token在训练数据中出现的频率会很低(即数据稀缺),所以我们的网络将无法正确学习。
因此,子词词汇是当今的常态。
其它你可能感兴趣的问题